Ağustos 15, 2018
PostgreSQL Streaming Replication

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;

echo "10.0.0.249 replica" >> /etc/hosts
echo "10.0.0.241 master" >> /etc/hosts

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;

DANIŞMANLIK

Uzmanlık seviyesinde danışmanlık hizmeti verdiğimiz alanlar:

  • PostgreSQL Yönetimi, Performans ve Sorun Giderme
  • Diğer Veritabanlarından PostgreSQL'e Geçiş ve Planlama
  • Replikasyon, Yedekleme ve Felaket kurtarma
  • Veritabanı Güvenliği
  • Uygulama Geliştirme ve Performans Değerlendirme
  • PostgreSQL'de Application Scale-out
  • Veritabanı Mimarisi ve Yapılandırması