"PostgreSQL harika bir veritabanı... ama kesinti yaşandığında? Patroni burada devreye giriyor."
PostgreSQL, tek başına son derece güvenilir ve performanslı bir veritabanıdır. Ancak işler büyüdüğünde, yani veritabanını dağıtık bir sistem içinde birden fazla sunucuda yüksek erişilebilir şekilde kullanmak istediğinizde, birtakım zorluklar ortaya çıkar:
İşte bu gibi durumlarda Patroni hayat kurtarıyor.
Patroni, PostgreSQL için otomatik failover, leader election (lider seçimi), health check ve cluster yönetimi sağlayan bir HA (High Availability) yöneticisidir. Aslında Patroni, PostgreSQL'e HA kazandıran akıllı bir düzenleyici (orchestrator)'dir. Basit bir anlatımla Patroni:
Bu yazıda HAProxy veya PgBouncer gibi ara katmanlardan bahsetmeyeceğiz. Onlara özel yazılar yakında yayınlanacak, takipte kalın!
CAP teoremi der ki: Üç şeyden sadece ikisini seçebilirsin:
1. Consistency (Tutarlılık)
2. Availability (Erişilebilirlik)
3. Partition Tolerance (Bölünebilirlik toleransı)
Dağıtık sistemlerde ağ bölünmeleri (partition) kaçınılmaz olduğuna göre, geriye tutarlılık (Consistency) ile erişilebilirlik (Availability) arasında bir seçim yapmak kalıyor. Patroni, "Consistency + Partition Tolerance" tarafını seçer. Neden?
Patroni, bir liderin kim olduğunu ve cluster'ın genel sağlık durumunu merkezi olarak tutmak için bir KV Store'a ihtiyaç duyar. Bu genellikle:
Bu sistemler:
Patroni, lider seçimini Etcd üzerinden gerçekleştirir. Süreç şuna benzer:
1. Her PostgreSQL örneği, bağlı olduğu Patroni botu aracılığıyla Etcd'de belirli bir anahtarın süresi dolmuş olup olmadığını kontrol eder.
2. Eğer liderlik anahtarı boştaysa, bot bu anahtarı belirli bir süreliğine almak için Etcd'ye başvurur.
3. Etcd, arka planda RAFT protokolü kullanarak yalnızca bir örneğin bu anahtarı almasına izin verir. Böylece yarış durumları engellenmiş olur.
4. Anahtarı ilk alan örnek, sistemin lideri olarak kabul edilir ve Patroni botu bu PostgreSQL örneğini primary (lider) olacak şekilde yapılandırır.
5. Diğer örnekler, bu liderliği fark eder ve kendilerini otomatik olarak replica (yedek) moduna alır.
Bu sayede lider, merkezi bir kontrol noktası olmadan dağıtık biçimde ve tutarlı şekilde seçilir.
Basit bir örnek için 3 PostgreSQL + Patroni konteyneri ve 3 etcd konteyneri kullanabiliriz:
Öncelikle geliştirici github reposundan proje dosyasını temin ediniz. Proje dosyasındaki Dockerfile'ı build ederek örnekte kullanacağımız patroni docker image'ını oluşturunuz.
Konuya dair örnek (Yazar tarafından oluşturulmuştur)
Patroni, PostgreSQL'i HA yapıya taşımak için oldukça etkili ve esnek bir çözümdür.
Bir sonraki yazımızda, Patroni cluster'ına HAProxy ile yönlendirme yapmayı ve PgBouncer ile bağlantı havuzu oluşturmayı anlatacağız. Kaçırmayın!
Takipte Kalın, Verileriniz Ayakta Kalsın!
“Etcd Documentation.” etcd.io. Erişim tarihi: 10 Mayıs 2025. https://etcd.io/docs/.
“Consul Documentation.” HashiCorp. Erişim tarihi: 10 Mayıs 2025. https://developer.hashicorp.com/consul/docs.
“PostgreSQL Documentation: Streaming Replication.” PostgreSQL Global Development Group. Erişim tarihi: 10 Mayıs 2025. https://www.postgresql.org/docs/current/warm-standby.html.
“Patroni Documentation.” Read the Docs. Erişim tarihi: 10 Mayıs 2025. https://patroni.readthedocs.io/.
“Raft Consensus Algorithm Explained.” The Secret Lives of Data. Erişim tarihi: 10 Mayıs 2025. https://thesecretlivesofdata.com/raft/.
“Patroni Repository.” GitHub. Erişim tarihi: 10 Mayıs 2025. https://github.com/patroni/patroni.
Giriş: Dağıtık Sistemlerde PostgreSQL'in Derdi
Patroni Nedir, Ne Yapar?
CAP Teoremi ve Patroni
Etcd ve Consul: Patroni'nin Dayandığı Taşlar
Lider Seçimi Nasıl Gerçekleşirir?
Kısıtlamalar ve Sınırlar
Docker ile Patroni Kurulumu (Minimal Örnek)
Kapanış ve Son Sözler
Bu madde yapay zeka desteği ile üretilmiştir.