Selamlar arkadaşlar bu makalemde sizlere PostGreSQL üzerinde Replication işlemlerini anlatıyor olacağım. Bu Replication işlemlerini yaparken ise Slot yapısını kullanacağım ve birden fazla Slot ile birden fazla Slave PostGre sunucusunu nasıl Replication işlemine tabi tutacağınızı anlatacağım.
İlk olarak buradaki linke gitmelisiniz ve sunucularınıza PostGreSQL 13 kurulumu yapmalı ve Master sisteminize DB’inizi eklemelisiniz. Sonrasında ise aşağıdaki adımlar ile Replication işlemlerine başlayabiliriz.
Sunucularımızın bir birine bağlanabilmesi için yapılması gereken ayarlar ile başlayalım.
İlk olarak /etc/postgresql/13/main/pg_hba.conf dosyasını nano ile açmalısınız. Ardından aşağıdaki kodları hem Master sunucunuz için hem de Slave olarak çalışan diğer sunucularınız için eklemelisiniz. Bu dosya yukarıda da görüldüğü gibi IP, User, Connection Type gibi türlere göre ayırarak sunucumuza erişimleri sağlayabilecek ipleri belirtiyor.
[Bu ayarlar Master ve Tüm Slave’leriniz de yapılacak.]
host replication repuser 192.168.1.103/32 md5
host all postgres 192.168.1.104/32 trust
Bu satırları düzenleyerek kendi dosyanıza eklemeniz gerekmektedir.
/etc/postgresql/13/main/postgresql.conf dosyamızın içerisinde ise aşağıdaki adımları tüm sunucularınız için uygulamanız gerekmektedir.
[Bu ayarlar Master ve Tüm Slave’leriniz de yapılacak.]
– listen_addresses = ‘*’
– wal_level = replica
– wal_log_hints = on
– max_wal_senders = 10
– wal_keep_size= 10
– wal_receiver_status_interval = 5s
– hot_standby_feedback = on
Bu ayarları bulmalı ve değiştirmelisiniz. Bu sayede cihazımıza hangi Portlardan bağlanacağını, wal_level’in replica olacağı gibi sunucu ayarlarını veriyoruz.
Replication için Kullanıcı Oluşturma :
> sudo -u postgres createuser -U postgres repuser -P --replication
// Bu kod ile Repuser adında bir kullanıcı oluşturuyoruz. Bu İşlemi [Master] sunucuda yapıyoruz.
Master Cihazımızda Replicationlar için Slot Oluşturma İşlemleri :
[Bu ayarlar Master da yapılacak.]
Bu kısımda birden fazla Replication Slot oluşturacağız ve oluşturulan bu Slot’ları ayrı ayrı cihazlarımıza atayacağız. Bu sayede birden fazla Replication’ı sistemimizde çalıştıracağız.
Yukarıdaki resimde olan kodlar ise :
> su - postgres
> psql
> select * from pg_create_physical_replication_slot('standby1_slot');
// Kod ile standy1_slot adında bir Replication Slot oluşturuyoruz.
> select * from pg_create_physical_replication_slot('standby2_slot');
> select * from pg_replication_slots;
// Aynı şekilde ikincisini de oluşturduktan sonra en son kodumuz ile slotlarımızı görüntülüyoruz.
Sonra yapılan her işlemden sonra ki biz baya bir işlem yaptığımız için exit’lar ile Postgres kullanıcısından çıkıyor ve Root kullanıcısında;
> systemctl restart postgresql
PostGreSQL’imizi Restartlıyoruz.
> tail -100 /var/log/postgresql/postgresql-13-main.log;
//Komutu ile ise PostGreSQL açılırken herhangi bir hata ile karşılaşıp karşılaşmadığını kontrol edebilirsiniz.
Slave Cihazları Replication’a Dahil Etme :
Yazının ilk kısımlarında Master ve Slave cihazlarda birkaç ayar yaptık. Bu kısımda ise ayarlarımızı Slave cihazlarımızda yapacağız. Aksi bir durum olması durumunda Master cihaz’da çalıştırın diye uyarımı yazıyor olacağım zaten. J
[Bu ayarlar Slave lerde yapılacak.]
> systemctl stop postgresql
//İlk olarak PostGreSQL’imizi durduruyoruz.
> rm -r /var/lib/postgresql/13/main/
// Komutu ile PostGreSQL DB Datalarının tutulduğu dizin’i siliyoruz.
> sudo -H -u postgres bash -c 'pg_basebackup --pgdata=/var/lib/postgresql/13/main/ --format=p --write-recovery-conf --checkpoint=fast --label=mffb --progress --host=192.168.1.104 --port=5432 --username=repuser'
// PG_BaseBackup komutu ile 192.168.1.104’de olan Master cihazımızdan 5432 Portunu kullanarak ve repuser kullanıcı yetkileri ile /var/lib/postgresql/13/main/ doyasında bulunan dataları Slave cihazıma çekiyorum.
> ls /var/lib/postgresql/13/main
//Komutunu yazarak dataların olduğu alanı kontrol ediyorum. Bu dosyalarının içerisinde standby.signal komutu olması gerekiyor.
> chown -R postgres:postgres /var/lib/postgresql/13/main/
//Komutu ile postgres kullanıcısının klasördeki yetkilerini ayarlıyorum.
/etc/postgresql/13/main/postgresql.conf dosyamızı açıyoruz ve aşağıdaki alanlarda düzenleme yapıyoruz.
– primary_conninfo = ‘host=192.168.1.104 port=5432 user=repuser password=*******’
//Host kısmına Master sunucunuzun ip adresini giriyorsunuz. Bu sunucuda oluşturmuş olduğumuz repuser kullanıcı adı ve şifre bilgilerinide aynı şekilde bu satırda belirtiyorsunuz.
– primary_slot_name = ‘standby1_slot’
// Oluşturmuş olduğumuz bir Slot adını buraya veriyoruz. Diğer Slave cihazınıda bu ayara geldiğinizde slot adını oluşturduğumuz diğer slot olan standby2_slot yapmayı unutmayın. J
Çünkü diğer cihazda ayarları siz yapabilirsiniz ben bu yazıyıcı uzatmamak adına sadece bir Slave sunucuda bu ayarları yapıyorum. Aynı ayarları diğerleri için sizde yapabilirsiniz.
> systemctl restart postgresql
> tail -100 /var/log/postgresql/postgresql-13-main.log
// Komutları ile PostGreSQL’ime Restart atıyorum ve Loglarını kontrol ediyorum.
> su - postgres
> psql
> select * from pg_stat_wal_receiver;
// DB içerisinde çalıştırmış olduğunuz bu komut ile Slave cihazların içerisinden Replication’ın olup olmadığını kontrol etmenizi sağlamaktadır.
Replication’ların Kontrollerinin Sağlanması :
– İlk olarak sunucularınızın Role bilgilerini karıştırdınız ve hangisinin Master hangisinin Slave yani Replication olduğunu görmek istiyorsanız eğer :
> /usr/lib/postgresql/13/bin/pg_controldata -D /var/lib/postgresql/13/main | grep cluster
Kodunu çalıştırmalısınız. Sonucu = Database cluster state: in production ise sunucunuz Master, Database cluster state: in archive recovery ise sunucunuz replication sunucusudur.
– Replication’ların Master tarafından kontrol edilmesi :
Bu işlemleri yaparken unutmayın ki her zaman psql ile db’lerin içinde olmalısınız.
> su - postgres
> psql
> \x
// İle düzenli liste modunu aktif ediyorsunuz.
> select * from pg_stat_replication;
// Komutu ilede gerekli kontrolleri sağlayabilirsiniz.
> select slot_name, slot_type, active, wal_status from pg_replication_slots;
//Komutu ile Replication’ların oturup oturmadığını kontrol edebilirsiniz.
– Replication’ların Slave tarafından kontrol edilmesi :
> select * from pg_stat_wal_receiver;
//Kodu ile gerekli kontrolleri sağlayabilirsiniz.
Son olarak ise DB’lerinizin gerçekten Replication olup olmadıklarını Test etmek kalıyor. Bu kısımda ise işler size kalıyor arkadaşlar. Yeni bir DB oluşturmalı ve diğer (Read Only) Replication yaptığınız serverlarınız da otomatik olarak oluşturulduğunu görmek. Sonrasında Replication işlemlerimiz tamamlanmış oluyor.
Şurada yazdığım Read Only’e de bir açıklama yapmak isterim J Replication olarak kurduğunuz cihazlarda Read Only mode’da çalışacaklardır.
NOT : Eğer daha öncesinde Replication yapılan bir sisteme yeni bir Replica ekleyecekseniz postgresql.conf dosyasında wal_keep_size‘ı artırmanız gerekmektedir. Az olması durumunda eski wal dosyaları siliniyor ve datayı aktarsanız bile Replication olmuyor. Bundan dolayı bu değer önemli.
Yazımın sonuna geldim arkadaşlar umarım yararlı bilgiler vermişimdir. Umarım bir yerlerde bunu kullanan ve öğrenmesine yardımcı olduğum insanlar vardır. Herkese kolaylıklar diliyorum. Sorularınız olması durumunda yorumlardan iletmenizi bekliyorum.