Skip to main content

PostgreSQL ve Autofailover


Bir veritabanının düzenli olarak yedeğinin alınması ve sağlıklı replikasyonun mevcut olması kadar olabilecek herhangi felaket senaryosunda veritabanının devamlılığı da oldukça önemlidir. Gelen taleplerin primary veritabanına ulaşılamama durumunda (sunucunun kapanması veya Postgres servisinin kapanması gibi) okuma ve daha da önemlisi yazma işlemlerinin standby node'lar üzerindeki veritabanından devam etmesi yani read-only olan bir node'un writable olması bir veritabanı yöneticisinin yapması gereken öncelikli işlerden biridir. Bahsettiğim bu yapı Autofailover yapısının mevcut olmasıyla mümkündür.

PostgreSQL veritabanıyla bir Autofailover yapısının kurulmasının birden fazla yolu vardır. Temel olarak Autofailover için aşağıdaki araçlar kullanılabilir.

  • Patroni (By Zalando) 
  • Repmgr (Replication Manager) 
  • PAF (PostgreSQL Automatic Failover) 
  • Pg_auto_failover (By Citus) 
Yukarıda belirtilen araçların her birini Autofailover yapısını PostgreSQL üzerine entegre etmek için ücretsiz olarak kullanabilirsiniz. Ücretli olarak ClusterControl’da yaygın olarak kullanılmakta. Lisans ücretinin fazla olması kullanıcıları open source ve ücretsiz kaynaklara yöneltmekte.

Autofailover dediğimiz yapı High Available(HA) yapısının oluşturan parçalardan biridir ve eğer HA yapısına tamamen geçmek istiyorsanız Autofailover yapısının kurulması için yukarıdaki araçlar tek başına yeterli olmayacaktır. Primary veritabanının herhangi bir felaket senaryosunda kapanması ve Standby sunucusunun Primary olarak hayatına devam etmesi uygulama tarafından gelen talepleri tek başına karşılamaya yetmez. Bunun sebebi ise uygulamadan gelen yazma taleplerinin Primary sunucunun IP’sini kullanarak gitmeye çalışmasından kaynaklıdır.

Failover durumu söz konusu olduğunda yazma işlemi artık Standby veritabanının read-only moddan çıkmasıyla sonuçlanır ve yazma işlemleri eski Standby (yeni Primary) üzerinden devam etmektedir. Dolayısıyla uygulamanın veritabanına ulaşacağı IP’nin sunucuların IP’leri yerine Virtual IP olmalıdır. Bunun için birden fazla araç kullanılır. PostgreSQL ile hem load balancer yapısının kurgulanması hem de Virtual IP kullanımı için yaygın olarak HAProxy aracı kullanılabilir. Veritabanına ulaşacak olan process’ler bir adet Virtual IP ile Primary veritabanına ulaştığını düşünelim. Failover senaryosunun gerçekleşmesiyle Standby sunucu yeni Primary olarak hayatına devam ederken HA Proxy ile tanımlanmış Virtual IP’nin üzerinden sanki hala eski Primary sunucuya erişiyormuş gibi talepleri yeni Primary (eski Standby) sunucu üzerinden karşılamaya devam edecektir.

Aslında hazırladığım yazı oldukça uzun ve tl;tr olmaması adına konuları daha küçük yazılara böldüm.

Henüz PAF ve pg_auto_failover araçlarını Autofailover yapısı için denemedim. Diğer iki araç için size iki ayrı blog yazısı hazırladım. Replication Manager (Repmgr) ile Autofailover kurmak için yazıyı en kısa zamanda ekleyeceğim.

Patroni ile Autofailover kurulumu yazı serisine aşağıdan ulaşabilirsiniz.

PostgreSQL ve Autofailover
PostgreSQL'de Autofailover ve Patroni 1 (Giriş)
PostgreSQL'de Autofailover ve Patroni 2 (Kurulum, Konfigürasyon ve Yönetim)
PostgreSQL'de Autofailover ve Patroni 3 (Mevcut PostgreSQL Cluster'inin Patroni'ye Geçirilmesi)

Comments

Popular posts from this blog

PGConf Europe 2018 Güncesi 1

Merhaba, Diğer tüm veritabanları arasında en popüler açık kaynak kodlu veritabanı olan PostgreSQL, tüm yıl boyunca farklı ülkelerde bir çok konferansa sahiplik yapmaktadır. En bilinenleri PGDay ve PGConf'dur. Ayrıca her yıl 2 Şubatta Brüksel’de yapılan FOSDEM etkinliğinde de PostgreSQL konuşmalarının yapıldığı bir oturum mutlaka olmaktadır. PostgreSQL etkinlik detaylarına bu linkten ulaşabilirsiniz. Bu yıl ki PGConf Europe konferansı Lizbon'da yapıldı. Konferansla ilgili izlenimlerimi, yaptığım neredeyse 6 günlük yolculuğun en başından tüm detaylarıyla birlikte paylaşmak istiyorum. Yolculuğumuz sevgili Seda ile birlikte Atatürk Havalimanı’ndan sabah 07:30’da Lizbon’a direk uçuşla başladı.  Hava şahaneydi ve uçuşumuz konforlu geçti. Koltuğumuz cam kenarı ve uçağın kanadının hemen yanındaydı (benim favori koltuklarım 24, 25, 26, 27 ve 28. sıradakiler) ve biz 27. sıradaydık. Bol bol resim çektik bulutların üstündeyken ve uçak kanatlı olanlardan.  Lizbon’a vardığımı...

PostgreSQL High Availability - Patroni 2

Patroni kurulumuyla ilgili oldukça fazla kaynak bulunmakta fakat kurulum ve yönetimini beraber barındıran kaynağa denk gelmedim. Bu yazıda hem Patroni kurulumu hem de kurulum sonrası yönetimiyle alakalı detaylara ulaşabilirsiniz. PostgreSQL cluster'larının yönetimi için kullanılan Patroni ile ilgili temel bilgilerin yer aldığı Autofailover üzerine hazırladığım yazı serisine aşağıdaki linklerden erişebilirsiniz. PostgreSQL ve Autofailover PostgreSQL'de Autofailover ve Patroni 1 (Giriş) PostgreSQL'de Autofailover ve Patroni 2 (Kurulum, Konfigürasyon ve Yönetim) PostgreSQL'de Autofailover ve Patroni 3 (Mevcut PostgreSQL Cluster'inin Patroni'ye Geçirilmesi) Patroni, PostgreSQL veritabanlarının kurulumundan ve konfigürasyonundan sorumludur. Yani Patroni'yi kurduğumuz sunucular aynı zamanda Patroni ile kurulmuş PostgreSQL'leri barındıracak. Üç node'lu PostgreSQL ve üç node'lu ETCD cluster'larını oluşturacağım. Kuruluma önce üç no...

PostgreSQL High Availability - Patroni 1

Patroni, PostgreSQL HA (High Availability) Cluster yapısının kurulması ve yönetimi için kullanılan open source bir araçtır. Patroni, PostgreSQL Cluster’inin kurulumu (bootstrap), replikasyonunun kurulumu, PostgreSQL otomatik failover yapılması amacıyla kullanılır. Python ile yazılmıştır. Bir önceki yazıda PostgreSQL'de Autofailover araçlarının ne olduğu ve neden Autofailover'a gereksinim duyulduğu konusunda yazı paylaşmıştım. Yazıya buradan ulaşabilirsiniz. Patroni Kurulumu İçin Gereksinimler nedir? Patroni’nin tek başına kurulumu autofailover yapısını yapılandırmak için yeterli değildir. Patroni ile Autofailover yapısının kurulması için DCS (Distributed Configuration Store) araçlarından birine ihtiyaç vardır. Bunlardan bazıları; ETCD, Consul, ZooKeeper, Kubernetes. PostgreSQL üzerinde Autofailover araçlarından Patroni entegre edecekseniz DCS araçlarından birini kullanmanız gerekecek. DCS dediğimiz şey aslında Service Discovery araçlarından biri olduğundan bu iki tan...