Postgresql Multi-Master Replication(Pgpool-II)
Multi-master kullanımı;
Pgpool sunucusu gelen sorguları kopyalayarak her iki sunucuya da gönderir. Instance’lar fiziksel dosya yapısında birbirinin kopyası olmayacak olup sadece veri içeriği olarak kopyasıdır.
Artılar;
- Sync replikasyon (no loss transaction)
- Otomatik Failover (Automatic Failover)
- Node’lardan birinde sorun oluşması üzerine Online Recovery
Eksiler;
- Yazma hızında %30 düşme
- Sequences’larda karışıklık
Gereksinimler;
- (www.pgpool.net) Pgpool source dosyası güncel olan tercih ediniz.
- Libpq.so (/usr/lib64/libpq* kontrol edebilirsiniz.)
- Make
- Postgresql-devel
- Postgresql-lib
Hazırlıklar;
- Replikasyon yapılacak iki sunucuda mutlaka aynı sürüm OS olması gerekmekte,
- Pgpool kurulu olan sunucu Node1 ve Node2 üzerine postgres (veya pgpool conf’a yazacağınız başka user) ile şifresiz ssh yapabilmesi,
- (www.pgpool.net) sitesinden dökümanları okumanız kesinlikle gerekli.
Kurulum;
1) İndirdiğiniz tar dosyasını istediğiniz dizine;
tar -xzf pgpool-II-2.1.tar.gz
2) Açtığınız dizinde ;
./configure \
–prefix=(pgpool kurulacak dizin)
–with-pgsql-libdir=(postgres lib bulunan dizini)
–with-pgsql-includedir=(includedir dizini)
make
make install
3) Pgpool kendi conf dosyalarının benzerlerini örnek olması açısından vermekte;
cd /opt/pgpoolII/
cp etc/pcp.conf.sample etc/pcp.conf
cp etc/pgpool.conf.sample etc/pgpool.conf
vi etc/pcp.conf
4) Değiştirdiğiniz dosya uzantılarını pcp.conf dosyasında;
Postgres: e8a48653851e28c69d0506508fb27fc5 (Şifresi md5 olarak yazılır. /opt/pgpoolII/bin/pg_md5 –p dizininden şifreleyebilirsiniz.)
5) pgpool.conf dosyasında;
listen_addresses ='(pgpool IP adress veya *)’
…
replication_mode = true (multi-master kullanımını açar)
…
backend_hostname0 = (node2 IP adresi)
backend_port0 = (node 1 Portu)
backend_weight0 = 1
backend_data_directory0 = ‘(node1 data path)‘
backend_hostname1 = (node2 IP adresi)
backend_port1 = (node 2 Portu)
backend_weight1 = 1
backend_data_directory1 = (node2 data path)
6 ) Pgpool start komutu;
İlk debug modu (-d) ile açarsak loga daha detaylı yazacağından sorunları çözmek açısından daha faydalı olur; Daha sonra servis olarak ayaralayabilirsiniz.
/opt/pgpoolII/bin/pgpool -d -n > /opt/pgpoolII/log/pgpool.log 2>&1 &
7) Pgpool stop komutu;
/opt/pgpoolII/bin/pgpool stop
9) Pgpool.conf da verdiğiniz port’a göre pgpool’a bağlanabilirsiniz. Sorgular sadece pgpool üzerinden gelmeli asla postgres instance’lar üzerinden sorgu çalıştırılmamalıdır. Aksi halde veri tutarsızlığı meydana gelir.
psql -p 9999 –h localhost
10) Her iki postgres node’uda başlatıp ardından pgpool başlatırsanız /opt/pgpoolII/log/pgpool.log dosyasında ;
Eklediğimiz instance’ları backend 0 ve backend 1 olarak görürseniz iki node online demektir.(Ayrıca pgpool_status.log dosyasında da instance’ların durumlarını anlık olarak up-down parametreleri ile görebilirsiniz.)
11) Test için pgpool üzerinden tablo create edip her iki node’da da kontrol edebilirsiniz.
12) Node’lardan birinde sorun olduğu durumunda otomatik olarak failover olacak olup sadece tek node tarafına yazmaya başlayacaktır. Sorun olan node’daki sıkıntıyı çözmeniz üzerine Online recovery işlemini yapıp sistem kesintisi olmadan diğer nodu pool’a dahil edebilirsiniz.