Replikasyon ile canlı veritabanının sorgulabilir bir kopyası oluşturulur. Raporlama amaçlı sorgular bu read-only sunucu üzerinde çalıştırılarak master sunucu üzerindeki yük azaltılmış olur.
Replikasyon uygulaması için postgresql-11 kurulumu yapılmış iki adet Debian 9 sunucu kullanacağız.
Her iki sunucunun bilgilerini /etc/hosts dosyalarına giriyoruz;
Master Sunucu İşlemleri
Replikasyon işlemi için veritabanına bağlanacak “replication” adında bir kullanıcı oluşturuyoruz;
Oluşturduğumuz “replication” kullanıcısı ile veritabanına bağlantı için pg_hba.conf dosyasını düzenliyoruz. pg_hba.conf dosyasında yaptığımız değişikliklerin etkinleştirebilmek için postgresql servisinin konfigürasyon dosyalarını yeniden yüklüyoruz;
Postgresql, varsayılan olarak localhost’u dinleyecek şekilde ayarlanmış olarak kurulur. Gelen tüm bağlantıları dinleyecek şekilde ayarlıyoruz;
postgresql.conf dosyasında yer alan wal_level, max_wal_senders, hot_standby, max_replication_slots parametrelerinin değerleri postgresql-10 sürümünden itibaren varsayılan olarak replikasyon işlemi için ayarlanmış olarak gelir.
wal_level -> Üretilen WAL dosyalarına kaydedilecek bilginin miktarını belirtmek için kullanılır.
hot_standby -> Standby sunucuda sistemi tutarlı hale getirdikten sonra bağlantıları kabul etmesini sağlar. Master-slave arasında veri aktarımındaki gecikmenin sorgu sonuçlarında veri tutarsızlıklarına sebep olmasının önüne geçilir.
max_wal_senders -> Eş zamanlı olan replikasyon bağlantısı sayısını belirtir. Bu sayı en az slave sunucu sayısı +1 olmalıdır.
max_replication_slots -> Replikasyon slot sayısının üst limitini belirtir.
Slot Oluşturma
Master sunucuda işi biten WAL lar silinir. Replica(slave) sunucu WAL ları master sunucudan zamanında almazsa kopar. Replica sunucu için tanımlanan slot, master sunucuda WAL alırken kaldığı yeri işaretleyerek kalan kısmı silmemesini söyler.
Replica sunucunun kullanması için bir slot oluşturuyoruz;
Replica Sunucu İşlemleri
Debian’da postgresql kurulumu sırasında initdb aşaması varsayılan olarak yapılır ve postgresql servisine ait main dizini otomatik olarak oluşturulur. Replikasyon işleminde master sunucudaki verilerin replica sunucu üzerinde bir kopyası oluşturulacağından main dizininin içi boş olmalıdır.
Replikasyon için postgresql servisini durduruyoruz sonrasında main dizininin içindekileri siliyoruz;
pg_basebackup komutunu çalıştırıyoruz;
Replikasyonun çalışmasını master üzerinden sorgularla kontrol edebiliriz;
pg_stat_replication tablosu ile master’a gelen replikasyon bağlantılarının istatistiklerini görebiliyoruz. Replikasyon işlemi için bağlı olan sunucunun hostname bilgisi, WAL aktarımı için bağlanılan kullanıcıyı, gönderilen, diske yazılan ve temizlenen logların bilgisi ve replikasyonun çalışma durumu gibi bilgileri bu tablo aracılığıyla kontrol ediyoruz.
pg_replication_slots tablosu ile master sunucuda tanımlanan slot’lara ait istatistikleri görüntüleyebiliyoruz.
Replica sunucu üzerinden de aşağıdaki gibi kontrol edebiliriz;