PostgreSQL Replikasyon Kurulumu

Replica olmasının başlıca güzellikleri arkanızı sağlama almak ve bazı disk IO’sunu tavana vurduran sorguları replica üstünden çalıştırarak performans artışı sağlamak.

Kısaca PostgreSQL asenkron replica kurulumunu ben şu şekilde yaparım.

Master ve Slave de postgresql.conf ayarlarını yaparım. Eğer Master da replication için kullanıcı yok ise kullanıcı yaratırım. Ardından bu kullanıcının Slave’den Master’a bağlanabilmesi için izin veriririm. Master’daki tablespace yapısı slave de oluştururum.

1- Master & Slave server conf. ayarları yapılır.

2- Replication için kullanıcı oluşturulur makinelerin birbirine bağlanması için izin verilir.

Master: CREATE ROLE replicationuser REPLICATION LOGIN;
Master: host replication replication
user 192.168.20.2/32 trust
Slave: host replication replication_user 192.168.20.1/32 trust

3- Master’da ki Tablespace yapısı neyse aynısı Slave’de de oluşturulur.

4- Veriler kopyalanır. (iki yöntem ile yapılabilir)

rsync ile veriler master’dan slave’e kopyalabilir ya da bu iş pgbasebackup tooluna bırakılabilir.
ama bu işlerden sonra pg
hba.conf ve postgresql.conf dosyalarını slave için değiştirmeyi unutmayın.

Veriler derken hem veritabanları(Eğer veritabanlarının lokasyonu başka yerde ise) hem de postgresql’in data klasorü(“/var/lib/pgsql/9.x/data/”) slave’e taşınmalıdır.

Benim tercihim pg_basebackup aracı çünkü hep daha rahat gelmiştir.

5- Slave’de recovery.conf oluşturulur.

standbymode = ‘on’
primary
conninfo = ‘host=192.168.20.1 port=5432 user=replicationuser’
restore
command = ‘cp -i /data/base/walarchive/%f “%p” triggerfile = ‘/data/base/finish.replication’

Önemli! *Slave Master’a dönüşmesi için *trigger file sistemde sadece var olmalı. Oluşturduğunuz anda Master server’a dönüşecektir. “touch /data/base/finish.replication”

Bunların dışında master veritabanı çalışırken slave de pgbasebackup çalıştırıp arkama yaslanırım ve tool işini tamamladıktan sonra master’dan gelen pghba.conf, postgresql.conf ve recovery.conf dosyalarını slave için ayarlanmış olanlarla değiştirip “service postgresql start” dedim miydi işim bitmiştir. Tabi orda ok görmek gerekiyor. Master da yapılan değişiklikler anında wal sender ile slave’e aktarılır slave de bunlar wal receiver ile alıp işler ve aradaki farkı kısa sürede kapatır.
 

Erkin Çakar

PostgreSQL DBA & Software developer