Switchover, Primary ve Standby sunucularımızın rollerini değiştirmesi işlemidir. Switchover işlemi primary sunucusuna bakım gereksiniminden dolayı olabileceği gibi veritabanınızın çalıştığı sunucuyu en az kesinti ile değiştirmek için de kullanılabilir.
PostgreSQL, primary’deki bir arızayı tanımlamak ve standby veritabanı sunucusunu bilgilendirmek için gerekli olan sistem yazılımını sağlamaz. Farklı yüksek erişilebilirlik çözümleri bu işlemleri sizin için otomatik yapabileceği gibi bu işlemi elle de gerçekleştirebilirsiniz. Birçok yük devretme sistemi, ikisi arasındaki bağlantıyı ve primary sunucunun kullanılabilirliğini sürekli olarak doğrulamak için bir tür heartbeat mekanizması kullanır veya gereksiz yük devretme durumlarını önlemek için üçüncü bir sistem (witness server olarak da adlandırılır) kullanmak da mümkündür, ancak yeterli özen ve titiz testlerle kurulmadıkça yapıyı karmaşıklaştırmak kaş yapayım derken göz çıkarma gibi bir şey olur. (Sonunda bir deyimi tam yerinde kullanabildim 🙂 )
Standby’ı yeni primary olarak tanıtmanın iki yolu vardır. Switchover, değişimin planlı bir şekilde gerçekleşmesidir. Biz bu yazımızda switchover işlemini manuel yapacağız; Kabaca aşağıdaki adımların işletilmesi ile rol değiştirme işlemi gerçekleştirilebilir.
- Veritabanına yeni veri gelmesini engelemmek için tüm client bağlantıları kesilir.
- WAL kayıtlarının standby lara aktarılması beklenip, onaylanır.
- Primary sucunu temiz bir şekilde kapatılır.
- Standby sunucu kontrol edilerek primary haline getirilir.
- Eski primary sunucusu uygun yapılandırma ile Stanby olarak açılır.
Adımlar doğru bir şekilde gerçekleştirilmediği taktirde eski Primary sunucusu yeni Primary’e Standby olarak bağlanamayacaktır. Bu durumda replikasyonu yeniden başlatabilmek için yedekten dönmemiz gerekebilir yada aradaki farkı bulup işlemek için pg_rewind aracından yararlanabiliriz.
pg_rewind : pg_rewind, 9.5 sürümünden beri bir PostgreSQL aracıdır. Özellikle pg_rewind büyük veritabanları için avantaj sağlar. Veritabanlarını pg_basebackup kullanmadan senkronize edebilirsiniz. pg_rewind, eski primary veritabanının pgdata klasörünü tarar ve standby sunucusuna geçiş sırasında değiştirilen veri bloklarını tanımlar, ardından yalnızca ilişki dosyalarından değiştirilen blokları kopyalar; diğer tüm dosyalar, yükseltilmiş standby sunucudaki yapılandırma dosyaları dahil tam olarak kopyalanır. Ve eski primary veritabanı, değiştirilen blokların uygulanmasıyla senkronize olur. pg_rewind, hedef sunucunun postgresql.conf içinde wal_log_hints seçeneğinin etkinleştirilmesini veya veritabanı initdb ile başlatıldığında checksums etkinleştirilmesini gerektirir. full_page_writes da açık olarak ayarlanmalıdır, ancak varsayılan olarak etkindir. (continue reading…)