DBAtlas · Veritabanı operasyon atlası

Patroni + etcd + HAProxy ile otomatik failover cluster'ı

PostgreSQLSeviye: İleriSüre: 2–3 saat

Otomatik failover'lı PostgreSQL cluster'ını kurar ve işletir: her node'da PostgreSQL'i Patroni yönetir, leader seçimi 3 (ya da 5) üyeli etcd'de yapılır, uygulamalar HAProxy'nin yazma (5000) ve okuma (5001) portlarına, isteğe bağlı keepalived VIP'i üzerinden bağlanır. Kurulumun yanında kurulu cluster için işletim senaryoları vardır: sağlık kontrolü, switchover, eski leader'ı geri katma, reinit, node ekleme/çıkarma, edit-config, pause, Patroni yükseltme, tam kapatma/açma, etcd üye değişimi ve etcd çoğunluğu kaybı. pg-install rehberi Patroni node'larında kullanılmaz (initdb'yi Patroni kendisi yapar); Patroni'siz, failover'ı elle yapılan HA için pg-streaming rehberini kullanın.

Yapı: 3 PostgreSQL + etcd node'u (ortak ya da ayrı) + HAProxy (+ VIP)

Senaryolar

  • Kurulum: yeni Patroni cluster'ı — Sıfırdan etcd + Patroni + HAProxy (+ VIP) cluster'ı kurulur. Sunucularda PostgreSQL cluster'ı olmamalı: initdb'yi Patroni yapar (pg-install uygulanmaz).
  • İşletim runbook'u: switchover, failover testi, bakım modu, parametre değişikliği — Yeni kurulmuş cluster'da temel işlemleri sırayla dener: durum, switchover, failover testi (lider durdurulur, kısa yazma kesintisi), bakım modu, parametre değişikliği. Bakım penceresinde uygulayın.
  • Cluster sağlıklı mı? (sağlık kontrolü) — Salt okunur: roller, gecikme, timeline, REST API, etcd sağlığı, slotlar, bekleyen restart ve bakım modu.
  • Planlı switchover (leader'ı başka node'a al) — Bakım öncesi leader rolü kontrollü olarak bir replica'ya geçer; birkaç saniyelik yazma kesintisi, veri kaybı yok.
  • Failover oldu, eski leader geri katılmıyor (pg_rewind / reinit) — Çöken eski leader açılınca replica olarak katılmalı; pg_rewind başarısızsa veri dizini leader'dan yeniden kurulur.
  • Bir replica'yı sıfırdan yeniden kur (reinit) — Replica bozuk, çok geride ya da WAL'ı kaybetti: veri dizini silinir ve leader'dan (ya da yedekten) yeniden kurulur. Leader etkilenmez.
  • Cluster'a yeni node ekle — Yeni node'u formdaki listenin sonuna ekleyin: yazılım kurulur, mevcut node'larda pg_hba ve HAProxy güncellenir, replica olarak katılır.
  • Cluster'dan node çıkar — Replica olan bir node kalıcı olarak çıkarılır: Patroni durdurulur, DCS kaydı ve slot temizlenir, HAProxy'den kaldırılır.
  • PostgreSQL ya da Patroni ayarını değiştir (edit-config) — Ayar DCS'ye yazılır, tüm node'lara uygulanır; restart gerektiren ayarlarda restart --pending (önce replica'lar).
  • Bakım için otomatik failover'ı durdur (pause / resume) — Pause'da Patroni PostgreSQL'e dokunmaz ve failover yapmaz; ağ/etcd bakımı ya da elle müdahale için. İş bitince resume.
  • Patroni yazılımını yükselt (rolling) — Cluster pause'a alınır, node node Patroni güncellenip yeniden başlatılır; PostgreSQL kapanmaz, failover olmaz.
  • Tüm cluster'ı durdur / başlat (doğru sıra) — Planlı tam kapatma (depolama, veri merkezi bakımı): önce replica'lar, sonra leader, en son etcd; açılış tersi sırada.
  • etcd üyesini değiştir ya da ekle (etcdctl member) — Bozulan etcd üyesi çıkarılıp yeni sunucu eklenir (ya da üye sayısı artırılır); Patroni'nin etcd listesi güncellenir.
  • etcd çoğunluğu kayboldu: leader salt okunur oldu — etcd quorum'u yoksa Patroni leader'ı salt okunur yapar, failover da olmaz. etcd geri getirilir ya da tek üyeden yeniden kurulur.

Başlamadan önce

  • PostgreSQL node'larında çalışan ya da önceden oluşturulmuş bir PostgreSQL cluster'ı yok ve … boş (Patroni cluster'ı kendisi oluşturur). pg-install rehberi bu sunucularda uygulanmadı.
  • Tüm sunucular aynı işletim sistemi sürümünde ve güncel; saatler NTP ile eşit (etcd ve Patroni saat kaymasına duyarlıdır).
  • PostgreSQL node'larında RAM … GB; … ayrı disk/LV üzerinde ve tüm node'larda aynı boyutta.
  • etcd verisi (/var/lib/etcd) düşük gecikmeli diskte (SSD). Yavaş disk lider seçimlerini bozar; yoğun I/O'lu PostgreSQL verisiyle aynı diskte olmaması önerilir.
  • Dikkat: etcd node sayısı … (çift). Çift sayı arıza toleransını artırmaz; 3 ya da 5 kullanın.
  • Sunucular birbirine şu portlardan erişebiliyor: PostgreSQL …, Patroni REST 8008, etcd 2379/2380, HAProxy 5000/5001/7000…, VRRP (IP protokol 112)…. Aradaki ağ cihazlarında da bu kurallar açık.
  • Sunucular PGDG repo'suna (download.postgresql.org…, apt.postgresql.org…) ve etcd için github.com'a HTTPS ile çıkabiliyor ya da kurum içi mirror tanımlı.
  • VIP … boş (hiçbir sunucuda kullanılmıyor) ve ağ (sanallaştırma/bulut) VRRP'ye ve aynı IP'nin sunucular arasında taşınmasına izin veriyor. Bulut ortamlarında çoğunlukla izin verilmez; yerine bulut load balancer'ı kullanın.
  • Dikkat: VIP için tek HAProxy sunucusu var; sunucu düşerse VIP taşınacak yer olmaz.
  • Tüm sunucularda root ya da sudo yetkisi; bakım penceresi ve geri dönüş planı hazır.
  • …: diğer node'larla aynı işletim sistemi ve PostgreSQL ana sürümü kurulabilir durumda, … için diğer node'lar kadar disk, saat NTP ile eşit; diğer node'lara …, 8008 ve etcd 2379 erişimi açık.
  • … (…): düşük gecikmeli disk (SSD), saat NTP ile eşit, diğer etcd üyelerine 2379/2380 ve PostgreSQL node'larından 2379 erişimi açık; github.com'a erişim ya da etcd arşivi /tmp'de.

Rehberin aşamaları

  • Hazırlık (tüm sunucular) — Sunucu adlarını /etc/hosts'a ekle · Saat eşitlemesini (chrony) etkinleştir · Çekirdek ayarları ve THP · Firewall kuralları (PostgreSQL node'ları) · Firewall kuralları (etcd sunucuları) · Firewall kuralları (HAProxy sunucuları)
  • etcd cluster'ı — etcd yazılımını kur · etcd yazılımını kur · etcd yapılandırması: … · etcd systemd servisini oluştur · etcd systemd servisini oluştur · etcd'yi başlat (tüm etcd node'larında aynı anda) …
  • PostgreSQL ve Patroni yazılımı — PGDG repo'sunu ekle · PGDG repo'sunu ekle · PostgreSQL ve Patroni'yi kur · Bağımsız PostgreSQL servisini kapat ve dizinleri hazırla
  • Patroni yapılandırması — Parolaları ortam dosyasına yaz · Patroni servisine ortam dosyasını bağla · patroni.yml: … · Yapılandırmayı doğrula
  • Cluster'ı başlat — İlk node'da Patroni'yi başlat · Diğer node'larda Patroni'yi başlat: … · Cluster durumunu kontrol et
  • HAProxy — HAProxy'yi kur · HAProxy'yi kur · haproxy.cfg yaz · haproxy.cfg yaz · HAProxy'yi doğrula ve başlat · HAProxy'yi doğrula ve başlat
  • keepalived ile VIP — keepalived'i kur · keepalived'i kur · keepalived yapılandırması: … · keepalived'i başlat · keepalived'i başlat
  • Uygulama kullanıcısı ve bağlantı testi — Uygulama kullanıcısı ve veritabanı · Uygulama kullanıcısına parola ver · REST API health check uçlarını kontrol et · HAProxy üzerinden bağlantıyı dene · Uygulama bağlantı dizesi
  • Kurulum sonrası — etcd snapshot yedeğini al · etcd snapshot yedeğini al · Yedeklemeyi kur (zorunlu) · İzlemeyi bağla
  • Cluster durumu — Üyeler, roller ve gecikme
  • Planlı switchover — Switchover yap
  • Failover testi (lideri durdur) — Lider node'da Patroni'yi durdur · Yeni lideri izle · Eski lideri geri başlat
  • Bakım modu (pause) — Cluster'ı bakım moduna al · Bakımı yap · Bakım modundan çık
  • Parametre değişikliği — Parametreyi tüm cluster'da değiştir · Bekleyen yeniden başlatmaları uygula
  • Sağlık kontrolü (salt okunur) — Üyeler, roller, timeline ve gecikme · Son lider değişimleri (history) · REST API sağlık uçları · etcd sağlığı · Replikasyon gecikmesi, slotlar ve bekleyen restart (leader'da) · Yapılandırma ve bakım modu
  • Planlı switchover — Switchover öncesi kontrol · Switchover yap · Yeni leader'ı ve eski leader'ın geri katılmasını doğrula
  • Bakım modu (pause / resume) — Pause öncesi kontrol · Cluster'ı bakım moduna al (pause) · Bakımı yap · Bakım modundan çık (resume)
  • Patroni yükseltme: hazırlık — Mevcut ve hedef Patroni sürümü · Yapılandırmayı yedekle ve doğrula · Cluster'ı bakım moduna al (pause)
  • Patroni yükseltme: bitiş — Bakım modundan çık (resume)
  • Cluster'ı durdur (replica → leader → etcd) — Durum ve rolleri kaydet · Uygulamaları durdur · Replica'larda Patroni'yi durdur · Leader'da Patroni'yi durdur · etcd'yi durdur
  • Cluster'ı başlat (etcd → son leader → replica'lar) — etcd'yi başlat (tüm etcd üyelerinde aynı anda) · etcd sağlığını doğrula · Önce son leader'da Patroni'yi başlat · Replica'larda Patroni'yi başlat · Cluster'ı doğrula ve uygulamaları aç
  • Teşhis: etcd çoğunluğu kaybı — Belirtileri doğrula: leader yok, PostgreSQL salt okunur · etcd üyelerinin durumunu gör
  • Yol A: etcd üyelerini geri getir — Yol A: etcd servislerini başlat · Patroni'nin toparlandığını doğrula
  • Doğrulama ve önlem — etcd ve Patroni'yi doğrula, failsafe'i değerlendir
Ortamına göre adım adım planı aç →