Postgresql repmgr

Repmgr,Postgresql high availibilty çözümlerinden biri olan açık kaynaklı bir yönetim aracıdır.

Repmgr streaming replication mimarisi üzerine kurulmuş ve bunu yönetmeye ve streaming işlemlerinde bazı işlemleri kısaltarak daha kolay ve pratik şekilde yapmamız için hazırlanmış araçtır.

Repmgr da kullanılan bazı kavramlar

Node: Repmgr da bulunan sunucular.

Upstream Node : Primay sunucu

Fencing : Failover sonrası eski Primary nin geri geldiğinde Primary olması için gereken çalışma.(fenced off)

Witnes Server : Standby sunucusunun fazla olması durumunda hangisine failover olması gerektiğini belirleyen sunucu.

192.168.202.137

Primary

192.168.202.140

Secondary

 

Yukarıda sunucularımız ve sunucularımız iplerini belirttim konfigürasyonlar da karışıklık olmaması için.

İlk olarak iki sunucuya da aşağıdaki paketleri yüklememiz gerekiyor.

yum -y install epel-release yum-utils vim 

 

Postgresql repolarını aşağıdaki şekilde yüklememiz gerekiyor.

 

yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

 

Postgresql12 aşağıdaki komutlar yardımı ile yükleyelim.

yum-config-manager --enable pgdg12

yum -y install postgresql12-server postgresql12

 

Yükledikten sonra default initdb yapıyoruz farklı lokasyona yüklemek isterseniz -D parametresi ile belirtebilirsiniz.

 

/usr/pgsql-12/bin/postgresql-12-setup initdb

İnitdb yaptıktan sonra servisimizi başlatıyoruz.

 

systemctl enable postgresql-12

systemctl start postgresql-12

 

Postgresql kurulumları bittikten sonra repmgr kurulumuna geçiyoruz ve aşağıdaki komutu iki sunucuda da çalıştıyoruz.

 

 yum -y  install repmgr12*

 

Postgresql.conf  da aşağıdaki gibi değişiklikler yapıyoruz.

 

max_wal_senders = 10

max_replication_slots = 10

wal_level = 'hot_standby' or 'replica' or 'logical'

hot_standby = on

archive_mode = on

archive_command = '/bin/true'

shared_preload_libraries = 'repmgr'

 

Pg_hba.conf  da aşağıdaki gibi değişiklikler yapıyoruz.

vim /var/lib/pgsql/12/data/pg_hba.conf

# “local” is for Unix domain socket connections only

local   all             all                                     trust

# IPv4 local connections:

host    all             all             127.0.0.1/32            trust

host    all             all             0.0.0.0/32              trust

# IPv6 local connections:

host    all             all             ::1/128                 trust

# Allow replication connections from localhost, by a user with the

# replication privilege.

local   replication     all                                     trust

host    replication     all             127.0.0.1/32            trust

host    replication     all             0.0.0.0/32              trust

host    replication     all             ::1/128                 trust

Yukarıdaki  pg_hba.conf değişikliklerini gerçek ortamlarda sadece ilgili sunuculara yetki verecek şekilde düzeltmenizi öneririm.

Değişiklikleri yaptıktan sonra aşağıdaki linkteki gibi iki sunucu arasında ssh key oluşturmanız gerekiyor.

https://www.farukerdem.com/ssh-key-olusturma-ve-ssh-keyi-farkli-makineye-kopyalayarak-baglanmak/2020/01/28

Postgresql.conf ve pg_hba.conf’u değiştirdikten sonra repmgr.conf’u primary sunucuda aşağıdaki gibi postgresql de kullanıcı ve database oluşturuyoruz.


create user repmgr;

create database repmgr with owner repmgr;
alter user repmgr with superuser; 
psql -c 'ALTER ROLE repmgr SET search_path TO repmgr, "$user", public;'

Primary sunucuda vi /etc/repmgr/12/repmgr.conf  üzerinde aşağıdakini komutları ekliyoruz.

 

cluster='frkcluster'

node_id=1

node_name=node1

conninfo='host=node1 user=repmgr dbname=repmgr connect_timeout=2'

data_directory='/var/lib/pgsql/12/data/'

failover=automatic

promote_command='/usr/pgsql-12/bin/repmgr standby promote -f /var/lib/pgsql/repmgr.conf --log-to-file'

follow_command='/usr/pgsql-12/bin/repmgr standby follow -f /var/lib/pgsql/repmgr.conf --log-to-file --upstream-node-id=%n'
 
service_start_command = 'systemctl start postgresql-12'
service_stop_command = 'systemctl stop postgresql-12'
service_restart_command = 'systemctl restart postgresql-12'
service_reload_command = 'systemctl reload postgresql-12'
log_file='/var/log/repmgr/repmgr.log' 

 

/etc/sudoers.d/postgres dosyasına aşağıdaki komutları iki sunucuda da  ekliyoruz.

 

Defaults:postgres !requiretty
postgres ALL = NOPASSWD: /usr/bin/systemctl stop postgresql-12, /usr/bin/systemctl start postgresql-12, /usr/bin/systemctl restart postgresql-12, /usr/bin/systemctl reload postgresql-12

 

Primary sunucuda konfigurasyonlarımız bitti ve sunucumuzu repmgr aşağıdaki komut yardımı ile ekliyoruz.

/usr/pgsql-12/bin/repmgr -f /etc/repmgr/12/repmgr.conf primary register

 

Eklenmiş mi kontrol edelim.

/usr/pgsql-12/bin/repmgr -f /etc/repmgr/12/repmgr.conf  cluster show

Secondary sunucuda aşağıdaki gibi değişiklikler yapıyoruz.

Secondary sunucuda vi /etc/repmgr/12/repmgr.conf  üzerinde aşağıdakini komutları ekliyoruz.

 

cluster='frkcluster'
node_id=2
node_name=node2
conninfo='host=node2 user=repmgr dbname=repmgr connect_timeout=2'
data_directory='/var/lib/pgsql/12/data/'
failover=automatic
promote_command='/usr/pgsql-12/bin/repmgr standby promote -f /var/lib/pgsql/repmgr.conf --log-to-file'
follow_command='/usr/pgsql-12/bin/repmgr standby follow -f /var/lib/pgsql/repmgr.conf --log-to-file --upstream-node-id=%n'
service_start_command = 'systemctl start postgresql-12'
service_stop_command = 'systemctl stop postgresql-12'
service_restart_command = 'systemctl restart postgresql-12'
service_reload_command = 'systemctl reload postgresql-12'
log_file='/var/log/repmgr/repmgr.log' 

/etc/sudoers.d/postgres dosyasına aşağıdaki komutları iki sunucuda da  ekliyoruz.

Defaults:postgres !requiretty
postgres ALL = NOPASSWD: /usr/bin/systemctl stop postgresql-12, /usr/bin/systemctl start postgresql-12, /usr/bin/systemctl restart postgresql-12, /usr/bin/systemctl reload postgresql-12

Secondary sunucuya geçerek aşağıdaki komut yardımı ile primary’i klonluyoruz.

/usr/pgsql-12/bin/repmgr -h 192.168.202.137 -U repmgr -d repmgr -f /etc/repmgr/12/repmgr.conf standby clone --dry-run

 

Klonlama işlemi tamamlandıktan sonra aşağıdaki komut yardımı ile stanby’ı repmgr a ekliyoruz.

/usr/pgsql-12/bin/repmgr -h 192.168.202.137 -U repmgr -d repmgr -f /etc/repmgr/12/repmgr.conf   standby register -F

/usr/pgsql-12/bin/repmgr -f /var/lib/pgsql/12/repmgr.conf  cluster show komut yardımı ile clusterımızı kontrol ediyoruz.

Repmgr clusterımız kuruldu ve sağlıklı bir şekilde  çalışıyor.

 

Loading