PostgreSQL streaming replication (primary + standby)
PostgreSQLSeviye: OrtaSüre: 45–90 dkKurulu bir primary'ye pg_basebackup ile bir ya da daha fazla hot standby ekler (replikasyon kullanıcısı, pg_hba, replication slot, asenkron ya da senkron ANY/FIRST mod, gecikme izleme) ve bu Patroni'siz cluster'ın işletim runbook'larını üretir: planlı switchover, elle failover (pg_promote), eski primary'yi pg_rewind ile geri katma, standby'ı yeniden kurma, cascading ve gecikmeli standby, slot temizliği, senkron ayar değişikliği. Failover otomatik değildir, DBA yapar; otomatik failover için pg-patroni, tablo düzeyinde ya da sürümler arası veri akışı için pg-logical-repl.
Yapı: 1 primary + 1..N standby
Senaryolar
- Kurulum: primary'ye standby ekle — Kurulu primary'ye pg_basebackup ile bir ya da daha fazla hot standby eklenir (slot, senkron/asenkron, izleme). Primary açık kalır; ilk kopya primary'ye disk ve ağ yükü bindirir.
- Planlı switchover (rol değişimi, veri kaybı yok) — Planlı bakım: primary temiz kapatılır, ilk standby promote edilir, eski primary standby olarak döner. Veri kaybı yok; yazma kesintisi genelde 1 dakikadan kısa.
- Manuel failover (primary çöktü, standby'ı promote et) — Primary çöktü ya da erişilemiyor: eski primary yalıtılır (fencing), en güncel standby elle promote edilir. Asenkron modda son işlemler kaybolabilir.
- Eski primary'yi pg_rewind ile standby olarak geri kat — Failover sonrası eski primary pg_rewind ile yeni primary'ye eşitlenip standby olarak geri katılır; tam kopyadan çok daha hızlıdır.
- Bir standby'dan beslenen yeni standby ekle (cascading) — Yeni standby WAL'ı primary yerine ilk standby'dan alır: uzak veri merkezi ya da çok standby'lı düzende primary'nin ağ/WAL gönderim yükü azalır. Primary etkilenmez.
- Gecikmeli (delayed) standby kur — WAL'ı saatler sonra uygulayan standby (recovery_min_apply_delay): yanlışlıkla silinen veriyi yedekten dönmeden kurtarmak için. Failover adayı değildir.
- Bir standby'ı sıfırdan yeniden kur — Standby geride kaldı, WAL'ı silinmiş ya da bozuk: veri dizini kenara alınır, primary'den yeniden kopyalanır. Primary etkilenmez.
- pg_wal büyüyor, disk doluyor (kullanılmayan slot temizliği) — WAL birikmesinin nedeni bulunur (pasif slot, arşiv hatası, wal_keep_size); kullanılmayan replication slot silinir, WAL alanı geri kazanılır. Primary açık kalır.
- Senkron standby ekle / çıkar (synchronous_standby_names) — Senkron listesini formdaki moda (ANY/FIRST, k) göre yeniden yazar ya da asenkrona döner; reload ile uygulanır, restart gerekmez. Yanlış ayar commit'leri askıda bırakabilir; önce kontrol edilir.
Başlamadan önce
- Primary …, pg-install rehberiyle kurulu ve çalışıyor (PostgreSQL …, PGDATA …, port …).
- Standby sunucularında pg-install rehberinin yalnız işletim sistemi hazırlığı aşaması (hostname, chrony, sysctl, THP) yapıldı. Cluster oluşturulmadı; yazılım bu rehberde kurulur.
- Tüm sunucularda aynı işletim sistemi ailesi, aynı mimari (x86_64/aarch64) ve aynı PostgreSQL ana sürümü (…). Standby, primary'nin birebir fiziksel kopyasıdır.
- Standby'da … için primary'deki veri boyutundan en az %20 fazla boş alan var.
- Sunucular birbirine port … üzerinden erişebiliyor; hostname'ler çözülüyor ve saatler NTP ile eşit.
- Firewall'da port … sunucular arasında açık (pg-install yalnız uygulama ağını açtıysa replikasyon IP'lerini de ekleyin).
- Debian/Ubuntu'da yapılandırma dosyaları veri dizininin dışında (/etc/postgresql) olduğundan pg_basebackup onları kopyalamaz; standby'dan primary'ye scp ile root (ya da sudo yetkili kullanıcı) erişimi var veya dosyaları elle taşıyacaksınız.
- Eski primary'nin veri dizini sağlam ve sunucu açılabiliyor (disk arızasında pg_rewind değil, pg_basebackup ile yeniden kurulum gerekir).
- …Primary'ye yük bindirecek ilk kopya (pg_basebackup) için uygun bir zaman seçildi.…Bakım penceresi açıldı; uygulama ekipleri kısa yazma kesintisinden haberdar.…Primary'nin gerçekten erişilemez olduğu doğrulandı; geri gelip ikinci bir primary olarak yazma almayacağı garanti altında (fencing).…Yeni primary sağlıklı ve yazma alıyor.…Yeni sunucu (…) hazır: işletim sistemi hazırlığı yapıldı, … boş ve yeterli alanlı; ilk kopya kaynağa (…) yük bindirecek.…… yeniden kurulurken okuma yükü diğer sunuculara alınabilir; kopya primary'ye yük bindirecek.…Disk doluluğu izleniyor; slot silmeden önce o slotu kullanan standby'ın sahibiyle konuşuldu.…Senkron değişikliği bakım penceresinde; commit gecikmesi değişeceği için uygulama ekipleri haberdar.…
Rehberin aşamaları
- Hazırlık (tüm sunucular) — Sunucu adlarını /etc/hosts'a ekle · PGDG repo'sunu ekle · PGDG repo'sunu ekle · PostgreSQL sunucu yazılımını kur · Veri dizinini hazırla · Cluster yapılandırmasını oluştur ve veri dizinini boşalt
- Primary'de replikasyon hazırlığı — pg_rewind ön koşulunu kontrol et · Replikasyon ayar dosyasını yaz · Ayarları yükle · Replikasyon kullanıcısını oluştur · Replikasyon kullanıcısına parola ver · pg_hba.conf'a replikasyon kurallarını ekle …
- Standby kurulumu (pg_basebackup) — Primary'ye replikasyon bağlantısını test et · Primary'nin kopyasını al: … · Yapılandırma dosyalarını primary'den kopyala · Standby'ı başlat
- Doğrulama — Primary'de replikasyon durumunu kontrol et · Standby'da WAL alıcısını kontrol et · Primary'de deneme verisi yaz · Standby'da deneme verisini oku · Deneme tablosunu sil
- Senkron replikasyonu etkinleştir — Senkron ayar dosyasını yaz · Ayarı tüm sunucularda yükle · Senkron durumu doğrula
- İzleme ve kurulum sonrası — Gecikme izleme sorgusu (primary) · Gecikme izleme sorgusu (standby) · Slot doluluk izleme · Uygulama bağlantı dizesi · Yedeklemeyi standby'a göre ayarla
- Switchover öncesi kontrol — Standby'ların durumunu kontrol et · Yeni primary'nin hazır olduğunu doğrula · Eski primary'de .pgpass ve pg_hba'yı kontrol et
- Switchover — Eski primary'yi temiz kapat · Yeni primary'nin son WAL'ı aldığını doğrula · … sunucusunu promote et · Yeni primary'de slotları oluştur · Eski primary'yi standby olarak ayarla · Eski primary'yi standby olarak başlat …
- Manuel failover — Eski primary'yi durdur ve devre dışı bırak (fencing) · En güncel standby'ı belirle · … sunucusunu promote et · Senkron beklemeyi geçici olarak kaldır · Yeni primary'de slotları oluştur · Diğer standby'ları yeni primary'ye yönlendir: … …
- Eski primary'yi pg_rewind ile geri kat — Yeni primary'de slot ve bağlantı kuralını kontrol et · Eski primary'nin kapalı olduğunu doğrula · pg_rewind deneme çalıştırması · pg_rewind uygula · Standby ayarlarını tamamla · Eski primary'yi standby olarak başlat …
- pg_wal şişmesi ve slot temizliği — pg_wal neden büyüyor? · Slotun sahibini bul · Kullanılmayan slotu sil: … · Slot silme: formu doldurun · WAL alanının geri kazanıldığını doğrula · Tekrarı önle: üst sınır ve izleme
- Senkron standby değişikliği — Mevcut senkron durum · Güvenlik kontrolü: yeterli standby bağlı mı? · Senkron ayar dosyasını yaz · Senkron ayarı kaldır (asenkrona dön) · Ayarı tüm sunucularda yükle · Yeni durumu doğrula