PostgreSql ile Synchronous Replication

Selamlar arkadaşlar bu yazımda sizlere PostgreSql üzerinden Streaming Replication’nı bu sefer Synchronous ve Asynchronous olacak şekilde çalıştıracağım.

Sizinde bildiğiniz üzere PostgreSql; Streaming Replication, Hot Standby ve Sync Replication’ları destekler. Bu bağlantıları yapmanız durumunda DB’miz WAL dosyalarını bir ağ yardımı ile Primary’den alarak Replica cihazlarımıza gönderir. Bu gönderme işlemleri varsayılan olarak Asynchronous olarak yapılmaktadır. Primary, Replica’lardan verileri yazdığının onayını beklemez. Ancak bu işlemi Synchronous bir Replication ile yapmanız durumunda Primary bir ve ya daha fazla Replica’dan yazdığının onayını almayı bekleyecektir.

İş akışınıza ve yapınıza uygun olarak ister birden fazla Sync ile çalışın, ister bir Sync bir Async ile çalışın, bu yapılandırmayı PostgreSql destekleyecektir.

Başlamadan önce :

Ben bu işlemi 3 farklı Ubuntu 20.04 cihazda PostgreSql13 yükleyerek yaptım. Bu PostgreSql’ler de Streaming Replication’ları yaparak hazır hale getirdim. Örneğe başlamadan önce sizde bunları yapmalısınız. Buraya tıklayarak PostgreSql kurulumuna, Buraya tıklayarak ise Streaming Replication yazılarıma ulaşabilirsiniz.

Instance’lara Ad Verme :

İlk olarak yapacağımız işlem her instance’ımıza bir ad belirlemek. Bu işlemi yapmamız durumunda Primary’de çalıştıracağımız pg_stat_replication komutundaki çıktılarımız daha anlamlı olacaktır.

Bunun için her bir serverımızda nano /etc/postgresql/13/main/postgresql.conf komutu ile PostgreSql ayar dosyasına gidiyoruz.

> cluster_name = 'primary' 

Alanını buluyoruz ve serverlarımızı belirtecek isimleri buraya giriyoruz. Ben sırasıyla şu isimleri verdim.

– primary
– replica1
– replica2

İşlemleri tamamladıktan sonra her bir PostgreSql’e Restart atmanız gerekmektedir.

> systemctl restart postgresql

pg_stat_replication Kontrolü :

> select * from pg_stat_replication;

// Komudunu çalıştırarak ise ayarlarımızın gerçekleşip gerçekleşmediğini kontrol ediyoruz. Komutun çıktısında adlarımızın değiştiğini (application_name), Replicationların streaming (state) olduğunu ve asyn (sync_state) olarak replication yaptıklarını görüyoruz.

Usefull pg_stat_replication Commands :

> \x
> select usename,application_name,client_addr,backend_start,state,sync_state from pg_stat_replication ;

// Kodumuz daha az bilgiyi ama istenilen alanları çekiyor.

> select * from pg_stat_wal_receiver;

// Replica tarafında çalıştırmanız gereken bir kod. Wall bilgilerini de veriyor.

Replica’lardan Birini Sync Yapalım :

Bunun için her bir serverımızda nano /etc/postgresql/13/main/postgresql.conf komutu ile PostgreSql ayar dosyasına gidiyoruz. Bu ayarımızı Primary cihazımızda yapıyoruz.

> synchronous_standby_names = 'replica1'

//Alanını arıyoruz ve Sync olmasını istediğimiz cihazları bu alana yazıyoruz. Ben Replica1’i Sync yapmak istediğim için bunu yazdım. Ancak siz virgül ile ayırarak birden fazla sunucu belirtebilirsiniz.

Kodumunuzu çalıştırarak kontrolleri sağlıyoruz. Birinci kısımda gördüğünüz Potential yazısı birden fazla sunucuyu sync olarak seçtiğinizde kaynaklanan durumdur. Üst kısmında da zaten Sync olan replica1’imizi görüyorsunuz.

Ikinci kısımında ise sync olan ve async olan yani conf dosyasında sadece bir adet replica’yı yazdığımız durumunlarda çıkan sonuçlar arkadaşlar.

Son olarak bu ayarların tamamlanması için Postgresql‘lerinize Restart atmanız gerekmektedir. Ancak Restart olmadan ayarları etkinleştirmek isterseniz ise aşağıdaki komutu psql alanındayken de çalıştırabilirsiniz.

> SELECT pg_reload_conf();

Komudumuz sayesinde ayarları aktifleştirmiş olacaksınız.

Evet arkadaşlar bu sayede Sync ve Async işlemlerimizi tamamlamış olduk.

PostgreSql’inizde data girişi yapdığınız esnada ise Sync olan PostgreSql’iniz Down olursa, tekrar Up olana kadar yaptığınız işlemler bekleyecek eklemeler yapmayacaktır. Bunun nedeni eş zamanlı gidebilmesi içindir.

Bu örneği yazarak anlatmaya kalksam çok uzun süreceğine düşünerek aşağıda bıraktığım Youtube video’mda direk izleyebilirsiniz.

Destekleriniz ve yazımı okuyarak zamanınızı ayırdığınız için teşekkür ederim. Umarım yararlı olmuştur.

Sorularınız ve yorumlarınız olması durumunda çekinmeden aşağıdaki yorum alanından bana iletin.

Herkese kolaylıklar diliyorum.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir