DBAtlas · Veritabanı operasyon atlası

PostgreSQL logical replication (publication / subscription)

PostgreSQLSeviye: İleriSüre: 45–90 dk (+ ilk kopya süresi)

İki PostgreSQL cluster'ı arasında tablo düzeyinde logical replication: wal_level=logical, replica identity kontrolü, publication ve subscription, ilk senkron, izleme, çakışma (conflict) yönetimi, sequence'lerin elle eşitlenmesi. Sürümler arası taşıma (major upgrade, sunucu değişimi) için kesintiyi saniyelerle sınırlayan son geçiş (cutover) adımları da dahil.

Logical replication HA ya da yedek yöntemi değildir: tüm cluster'ın birebir kopyası ve failover için streaming replication ya da Patroni, yedek için pgBackRest kullanılır. Aynı sunucuda yerinde ana sürüm yükseltmesi (pg_upgrade) pg-major-upgrade'dedir.

Yapı: 2 sunucu: yayıncı (publisher) + abone (subscriber); yayıncı tek sunucu, streaming replication ya da Patroni cluster'ı olabilir

Senaryolar

  • Sürekli replikasyon (raporlama, entegrasyon, kısmi kopya) — Seçilen tablolar sürekli olarak başka bir cluster'a akar (raporlama sunucusu, veri ambarı beslemesi, servisler arası entegrasyon). Abone yazılabilir kalır.
  • Taşıma: yeni sunucu / yeni ana sürüm + son geçiş (cutover) — Yeni sunucuya ya da yeni ana sürüme saniyelik kesintiyle geçiş: ilk kopya ve sürekli eşitleme, sonra kısa yazma durdurma ve son geçiş (cutover).

Başlamadan önce

  • Yayıncıda PostgreSQL … çalışıyor ve … veritabanı var.
  • Patroni cluster'ı … sağlıklı ve … şu an Leader; replica'larda hot_standby_feedback = on (pg-patroni varsayılanı).
  • Standby … primary'ye physical replication slot ile bağlı (primary_slot_name = …, pg-streaming'de slot seçeneği). Slot senkronizasyonu bu slot olmadan çalışmaz.
  • Abonede PostgreSQL … pg-install ile kuruldu ve çalışıyor; yayıncıdaki eklentilerin (PostGIS vb.) … sürümleri kurulu.
  • Abone, yayıncının …HAProxy/VIP adresine (…:…)…… portuna… erişebiliyor (firewall / güvenlik grubu).
  • Yayıncıda wal_level şu an hangi değerde? logical değilse değiştirmek yeniden başlatma ister: bakım penceresi planlayın.
  • Yayınlanacak tablolarda primary key ya da uygun bir unique index var. Yoksa UPDATE/DELETE yayıncıda hata verir: listelenen tablolara PK ekleyin ya da replica identity tanımlayın (aşağıdaki adım).
  • Logical replication DDL taşımaz (CREATE/ALTER TABLE), sequence değerlerini ve large object'leri de taşımaz. Replikasyon süresince şema değişiklikleri önce abonede, sonra yayıncıda elle uygulanacak; ekip bilgilendirildi.
  • Yayıncıda WAL için ek disk payı var: abone durursa slot WAL biriktirir (sınır: … GB).

Rehberin aşamaları

  • Yayıncının hazırlanması — Yayıncının …Leader…primary… olduğunu doğrula · Logical replication ayarlarını yaz · Logical replication ayarlarını Patroni'ye yaz · Yayıncıyı yeniden başlat · Patroni üyelerini yeniden başlat · Replikasyon kullanıcısını oluştur …
  • Replica identity — PK'sız tabloları listele · PK'sız tablolar için replica identity tanımla
  • Publication — Publication oluştur
  • Abonenin hazırlanması — Abone worker ayarlarını yaz · Aboneyi yeniden başlat · Yayıncı parolasını .pgpass'a yaz · Veritabanını ve şemayı oluştur · Rolleri ve yetkileri aktar
  • Subscription ve ilk senkron — Subscription oluştur · İlk senkronun bitmesini bekle · Veri sayılarını karşılaştır · Canlı değişiklik testi
  • Failover'da slotun korunması — Slotu Patroni'de kalıcı (permanent) tanımla · Slotun replica'larda göründüğünü doğrula · Primary: senkronize standby slot'larını tanımla · Standby: slot senkronizasyonunu aç · Failover sonrası aboneliği yeni primary'ye yönlendir · Failover sonrası aboneliği yeniden kur
  • İzleme — Abonelik durumu (abone) · Slot gecikmesi (yayıncı)
  • Çakışma (conflict) yönetimi — Hatayı bul · Çakışan satırı abonede düzelt · Çakışan transaction'ı atla
  • Sequence'lerin eşitlenmesi — Sequence değerlerini yayıncıdan aboneye aktar
  • Son geçiş (cutover) — Yayıncıda yazmayı durdur · Son değişikliklerin aktarıldığını doğrula · Sequence'leri son kez eşitle · Aboneliği kaldır · İstatistikleri topla · Uygulamaları aboneye yönlendir …
  • Bakım işlemleri — Yeni tablo ekleme · Şema değişikliği (ALTER TABLE) · Aboneliği kaldırma (yayıncıya erişim yokken)
Ortamına göre adım adım planı aç →