pg_auto_failover ファイル PostgreSQL クラスタのクルルム


モニター (10.10.10.147) + 3 PostgreSQL (10.10.10.144、10.10.10.145、10.10.10.146) トップラム 4 ノード

Aşağıdaki komut tüm node'lerde, sudo yetkili kullanıcı ile çalıştırılmalıdır.

curl https://install.citusdata.com/community/deb.sh | sudo bash
sudo apt-get install postgresql-13-auto-failover-1.5


注: PostgreSQL のデフォルトは 5432 ポートです. Biz de gelecekte herhangi bir karışıklığa sebebiyet vermemek için(yani dışarıdan bir kullanıcı veritabanına bağlanmak için psql dediğinde varsayılan olarak 5432 portu üzerinden çalışan PostgreSQL instance veritabanına bağlantı yapacaktır. Doğal olarak pg_auto_failover ile biz farklı portlar üzerinden cluster kurulumu yapabileceğimiz için psql ile cluster'a ip ya da portu belirterek cluster PostgreSQL'e bağlantı sağlayabiliriz. Biz hem bu durumun önüne geçip birden fazla instance PostgreSQL çalışmasını önlemek hem de farklı kullanıcılarda oluşabilecek kafa karışıklığınıne geçebilmek için varsaypisif PostgreSQL, kahales patirisilan if PostgreSQL.

sudo systemctl stop postgresql.service

sudo systemctl disable postgresql.service


Akabinde Monitor Node'sinde(10.10.10.147) çalıştırılır.

Posgres kullanıcısına geçilir.

sudo su - postgres

export PGDATA=./monitor

pg_autoctl create monitor --ssl-self-signed --hostname 10.10.10.147 --auth trust --run

ctrl+c   # servisin çalıştığı görülür ve kesilir


postgres kullanicisindan çıkılır ve sudo yetkili kullaniciya dönülür.

pg_autoctl -q show systemd --pgdata /var/lib/postgresql/monitor | sudo tee /etc/systemd/system/pgautofailover.service

sudo systemctl daemon-reload
sudo systemctl enable pgautofailover
sudo systemctl start pgautofailover
sudo systemctl status pgautofailover


1.ノード(10.10.10.144)

Posgres kullanıcısına geçilir.

sudo su - postgres

export PGDATA=./data

pg_autoctl create postgres --hostname 10.10.10.144 --auth trust --ssl-self-signed --monitor 'postgres://[email protected]:5432/pg_auto_failover?sslmode=require' --run

ctrl+c    # servisin çalıştığı görülür ve kesilir


postgres kullanicisindan çıkılır ve sudo yetkili kullaniciya dönülür.

pg_autoctl -q show systemd --pgdata /var/lib/postgresql/data | sudo tee /etc/systemd/system/pgautofailover.service

sudo systemctl daemon-reload
sudo systemctl enable pgautofailover
sudo systemctl start pgautofailover
sudo systemctl status pgautofailover


2.ノード(10.10.10.145)

Posgres kullanıcısına geçilir.

sudo su - postgres

export PGDATA=./data

pg_autoctl create postgres --hostname 10.10.10.145 --auth trust --ssl-self-signed --monitor 'postgres://[email protected]:5432/pg_auto_failover?sslmode=require' --run

ctrl+c    # servisin çalıştığı görülür ve kesilir


postgres kullanicisindan çıkılır ve sudo yetkili kullaniciya dönülür.

pg_autoctl -q show systemd --pgdata /var/lib/postgresql/data | sudo tee /etc/systemd/system/pgautofailover.service

sudo systemctl daemon-reload
sudo systemctl enable pgautofailover
sudo systemctl start pgautofailover
sudo systemctl status pgautofailover


3.ノード(10.10.10.145)

Posgres kullanıcısına geçilir.

sudo su - postgres

export PGDATA=./data

pg_autoctl create postgres --hostname 10.10.10.146 --auth trust --ssl-self-signed --monitor 'postgres://[email protected]:5432/pg_auto_failover?sslmode=require' --run

ctrl+c    # servisin çalıştığı görülür ve kesilir


postgres kullanicisindan çıkılır ve sudo yetkili kullaniciya dönülür.

pg_autoctl -q show systemd --pgdata /var/lib/postgresql/data | sudo tee /etc/systemd/system/pgautofailover.service

sudo systemctl daemon-reload
sudo systemctl enable pgautofailover
sudo systemctl start pgautofailover
sudo systemctl status pgautofailover


クラスターkurulumumuz tamamlandı.

モニター ノードのシンデクラスター ステータスを確認するには、gostermek için、posgres kullanıcısına、

export PGDATA=./monitor

pg_autoctl show state



  Name |  Node |        Host:Port |       LSN |   Connection |       Current State |      Assigned State
-------+-------+------------------+-----------+--------------+---------------------+--------------------
node_1 |     1 | 10.10.10.144:5432 | 0/8000B78 |   read-write |             primary |             primary
node_2 |     2 | 10.10.10.145:5432 | 0/8000B78 |    read-only |           secondary |           secondary
node_3 |     3 | 10.10.10.146:5432 | 0/8000B78 |    read-only |           secondary |           secondary



モニター ノードのシンデ接続文字列は、ユーザーによって作成されます.

export PGDATA=./monitor

pg_autoctl show uri



        Type |    Name | Connection String
-------------+---------+-------------------------------
     monitor | monitor | postgres://[email protected]:5432/pg_auto_failover?sslmode=require
   formation | default | postgres://10.10.10.145:5432,10.10.10.144:5432,10.10.10.146:5432/postgres?target_session_attrs=read-write&sslmode=require


監視ノードのsinde cluster log'larını görmek için yine posgres kullanıcısında,

export PGDATA=./monitor

pg_autoctl show events


Veritabanína dışarıdan(remote vs) erişim için pg_hba.conf dosyasında ilgili ayarlamalar yapılmalıdır, nasıl yapılacağına dair dosya içinde gerekli yönlendirme mevcuttur. Bu değişiklikler her node için ayrı ayrı yapılmalıdır.

#pg_hba.conf değişiklik yapıldığında

export PGDATA=./data

export PATH=/usr/lib/postgresql/13/bin:$PATH

pg_ctl reload


PostgreSQL データベース接続の例.

sudo -u postgres psql postgres://10.10.10.144:5432,10.10.10.145:5432,10.10.10.146:5432/postgres?target_session_attrs=read-write


PostgreSQL JDBC Spring リードレプリカの例.

spring.datasource.url=jdbc:postgresql://10.10.10.144:5432,10.10.10.145:5432,10.10.10.146:5432/postgres?currentSchema=postgres&targetServerType=master


参照:

pg_auto_failover github | readthedocs |