DBAtlas · Veritabanı operasyon atlası

PostgreSQL major upgrade (pg_upgrade / logical replication)

PostgreSQLSeviye: İleriSüre: 1–3 saat (+ veri boyutuna bağlı)

Ana sürüm yükseltmesi (ör. 16 → 17): yöntem seçimi (pg_upgrade --link / --copy / --clone ya da logical replication ile neredeyse kesintisiz taşıma), pg_upgrade --check, eklenti uyumluluğu, yapılandırmanın taşınması, istatistiklerin yeniden toplanması, standby'ların rsync ya da pg_basebackup ile yeniden kurulması, eski cluster'ın silinmesi ve geri dönüş runbook'u. Tek sunucu, streaming replication (primary + standby'lar) ve Patroni cluster'ı (Patroni'nin resmi major upgrade akışı: Patroni durdurulur, leader'da pg_upgrade, DCS kaydı silinir, replica'lar Patroni ile yeniden kopyalanır). RHEL ailesi ve Debian/Ubuntu (pg_upgradecluster dahil).

Aynı ana sürüm içinde güncelleme (ör. 17.4 → 17.6) için bu rehber değil pg-minor-update kullanılır. Tablo düzeyinde sürekli replikasyon ya da kısmi taşıma için pg-logical-repl, küçük veritabanını başka sunucuya dump ile taşımak için pg-dump-restore.

Yapı: Aynı sunucuda yerinde (pg_upgrade; tek sunucu, primary + standby'lar ya da Patroni cluster'ı) veya yeni sunucuya (logical)

Senaryolar

  • Major upgrade — Ana sürüm yükseltmesi (ör. 16 → 17): ön kontrol, yedek, pg_upgrade ya da logical replication, doğrulama ve temizlik.
  • Geri dönüş (upgrade başarısız / vazgeçildi) — Upgrade yarıda kaldı ya da yeni sürümde sorun çıktı: eski sürüme dönüş. --link'te yeni cluster başlatıldıysa yalnız yedekten dönülür.

Başlamadan önce

  • Kaynak cluster PostgreSQL … ve PGDG repo'sundan kurulu (pg-install). Hedef sürüm … kaynaktan büyük.
  • Uygulama ve sürücüler PostgreSQL … ile test edildi; aynı yükseltme önceden bir test ortamında prova edildi. … sürümüne kadar her ana sürümün release notes'undaki "Migration to Version" bölümleri okundu (kaldırılan ayarlar, davranış değişiklikleri).
  • Kurulu tüm eklentilerin … için sürümü mevcut (PostGIS, pg_repack, pgaudit, TimescaleDB…). Eklenti … için yoksa upgrade yapılamaz.
  • …Yeni veri dizini için mevcut veri boyutu kadar boş alan var.…Eski ve yeni veri dizini aynı dosya sisteminde (hard link şartı); WAL ve yeni katalog için birkaç GB boş alan var.…Dosya sistemi reflink destekliyor (XFS reflink=1 ya da Btrfs) ve iki dizin aynı dosya sisteminde.…
  • Logical replication slot / subscription varsa listelendi: …PostgreSQL 17+ kaynakta pg_upgrade logical slotları taşır; ancak tüm değişiklikler tüketilmiş olmalı…PostgreSQL … kaynakta pg_upgrade logical slotları taşımaz; upgrade sonrası yeniden oluşturulmaları gerekir….
  • Primary'den her standby'a postgres kullanıcısıyla parolasız SSH var ve standby'larda rsync kurulu. Veri dizini düzeni …/<sürüm>/data biçiminde (rsync ortak üst dizini kullanır).
  • Standby'lar streaming durumda; primary'nin pg_hba.conf dosyası replikasyon bağlantısına izin veriyor ve … parolası standby'larda ~postgres/.pgpass içinde.
  • Patroni cluster'ı sağlıklı: … şu anki leader, tüm replica'lar streaming ve gecikme yok, Pending restart yok. Cluster adı …, yapılandırma …, REST API parolaları /etc/patroni/patroni.env içinde (pg-patroni düzeni). DCS'nin (etcd) bir snapshot yedeği alındı. Upgrade süresince cluster tamamen kapalı olacak: HAProxy/VIP üzerinden gelen bağlantılar reddedilir.
  • Patroni sürümü PostgreSQL …'i destekliyor (Patroni'nin release notes'unda yeni ana sürüm desteği). Eski bir Patroni yeni sürümün parametrelerini ve kontrol dosyasını tanımayabilir; gerekiyorsa önce Patroni'yi rolling olarak güncelleyin.
  • Hedef sunucuda PostgreSQL … pg-install ile kuruldu, boş ve çalışıyor; kaynaktaki eklentilerin … sürümleri kurulu. Hedef, kaynağın … portuna erişebiliyor.
  • Taşınacak tablolarda primary key ya da replica identity var (yoksa UPDATE/DELETE kaynakta hata verir). Listelenen tablolara PK ekleyin ya da ALTER TABLE … REPLICA IDENTITY FULL uygulayın.
  • Güncel ve geri yüklenmesi denenmiş bir yedek var… (pgBackRest)…; mümkünse sunucu/disk snapshot'ı da alınacak.… --link yönteminde yeni cluster başlatıldıktan sonra tek geri dönüş yolu budur.…

Rehberin aşamaları

  • Ön kontrol — Patroni cluster'ının durumunu kontrol et · Cluster özelliklerini kaydet · Eklenti RPM/deb'lerini listele · Prepared transaction'ları ve uzun işlemleri kontrol et
  • Yeni cluster'ın hazırlanması — Yeni veri dizinini oluştur · Yeni cluster'ı aynı özelliklerle oluştur (initdb) · Yapılandırmayı yeni cluster'a taşı · Yeni sürümde geçersiz ayar var mı kontrol et · Patroni parametrelerini yeni sürüme göre kontrol et
  • Yedek ve geri dönüş noktası — Yedek al (pgBackRest full) · Yedek al (pg_dumpall + snapshot)
  • Uyumluluk kontrolü (pg_upgrade --check) — pg_upgrade --check
  • Kesinti: eski cluster'ı durdur — Uygulamaları durdur · Kesinti anında son yedek (pgBackRest incr) · Kesinti anında son mantıksal yedek · Eski primary'yi durdur · Replica'larda Patroni'yi durdur · Leader'da Patroni'yi durdur …
  • Upgrade — pg_upgrade'i çalıştır · pg_upgradecluster ile yükselt · conf.d dosyalarını yeni cluster'a taşı · pgBackRest yapılandırmasını yeni cluster'a çevir · patroni.yml'de bin_dir ve data_dir'i yeni sürüme çevir · pgBackRest stanza'sını yeni sürüme yükselt …
  • Yeni cluster'ı başlatma — Yeni cluster'ı başlat · Leader'da Patroni'yi başlat · Standby'ları hemen başlat
  • Upgrade sonrası işlemler — Eklentileri güncelle · İstatistikleri topla · pgBackRest kontrolü ve yeni full yedek
  • Doğrulama — Sürüm, ayarlar ve veritabanları · Patroni cluster'ını doğrula · Logları kontrol et · Uygulama testleri
  • Eski cluster'ı kaldırma — Eski veri dizinini sil · …Replica'lardaki…Standby'lardaki… eski veri dizinini sil · Eski sürümün yazılımını kaldır
  • Kaynak sunucunun hazırlanması — wal_level = logical · Kaynağı yeniden başlat · Replikasyon kullanıcısını oluştur · pg_hba.conf'a hedefi ekle · pg_hba'yı yeniden yükle · Publication oluştur
  • Hedefte şema ve abonelik — Kaynak parolalarını .pgpass'a yaz · Rolleri (globals) kopyala · Şemayı kopyala · Subscription oluştur · İlk kopyanın bitmesini bekle · Gecikmeyi kontrol et
  • Son geçiş (cutover) — Kaynakta yazmayı durdur · Son değişikliklerin aktarıldığını doğrula · Sequence değerlerini aktar · Subscription'ı kaldır · İstatistikleri topla · Uygulamaları hedefe yönlendir …
  • Geri dönüş — Yeni cluster'ı durdur · Replica'larda Patroni'yi durdur · Leader'da Patroni'yi durdur · pg_control'ü geri al (--link, yeni cluster başlatılmadı) · …Yedekten geri dön (--link, yeni cluster başlatıldı)…Mantıksal yedekten geri dön (--link, yeni cluster başlatıldı)… · Recovery'yi Patroni'siz tamamla …
Ortamına göre adım adım planı aç →