PostgreSQL veritabanında pg_rewind özelliğini kullanarak standby ile primary veritabanı arasındaki veri farkını kapatabilirsiniz. Pg_rewind özellikle büyük veritabanlarında hayat kurtaracak bir özelliktir. Veri ne kadar büyürse standby veritabanı ilklendirmesi o kadar uzun sürmeye başlar. Sadece aradaki farkı verileri işleyerek süreyi kısaltmak için pg_rewind kullanabilirsiniz.

Pg_rewind ilk olarak PostgreSQL 9.5 sürümüyle birlikte çıktı. En çok tercih edilen kullanım şekli failover uygulandığında eski primary veritabanında çalışıtırılarak yeni primary veritabanıyla aradaki farkı kapatmaktır.
pg_rewind, hedef sunucunun postgresql.conf’ta wal_log_hints seçeneğinin etkinleştirilmesini veya veritabanı initdb ile başlatıldığında data checksums‘ın etkinleştirilmesini gerektirir. Ayrıca yapılandırma dosyaları konusunda dikkatli olmalısınız. postgresql.conf, pg_hba.conf ve postgresql.auto.conf dosyaları, promote edilmiş standby veritabanından kopyalanır. pg_hba.conf erişim listesini, port bilgilerini ve primary_conninfo parametrelerini yapılandırmalısınız.
Son olarak, eski primary veritabanında postgresql servisini başlatmadan önce eski primary veritabanının data klasöründe standby.signal dosyasını oluşturmalısınız.

Örnek Kullanım
Failover uyguladıktan sonra bazı verileri test tablonuza ekleyebilirsiniz. Ardından pg_rewind ile girilen bu test verilerinin eski primary veritabanına aktarılmasını sağlayabilirsiniz.
Örnek Test Ortamı
Primary Veritabanı : 192.168.9.128 – 5432
Standby Veritabanı : 192.168.9.129 – 5433
pg_rewind Adımları
1 – Eski Primary Veritabanı Servisi Durdurulur
systemctl stop postgresql-pri.service
2- Eski Primary Veritabanında pg_rewind Çalıştırılır
Kaynak : Promote Edilen Standby Veritabanı
Hedef : Eski Primary Veritabanı
su – postgres
pg_rewind –target-pgdata=/pgdata/12/data –source-server=”host=192.168.9.129 port=5433 user=postgres”
pg_rewind: servers diverged at WAL location 0/E0000D8 on timeline 1
pg_rewind: rewinding from last common checkpoint at 0/E000028 on timeline 1
pg_rewind: Done!
Eğer WAL kayıtlarını bulamadım diye bir hata alırsanız manuel olarak promote edilen standby veritabanından eski primary veritabanının pg_wal dizinine kopyalayıp taşıyabilir ya da -c parametresini kullanarak otomatik kopyalanmasını sağlayabilirsiniz. Ayrıca bu hata ile karşılaşmak istemiyorsanız postgresql.conf içerisindeki restore_command parametresini kullanabilirsiniz.
3- standby.signal Dosyası Oluşturulur
touch standby.signal
4- postgresql.auto.conf Dosyası Eski Primary Veritabanında Düzenlenir
Host ve port bilgileri değiştirilir. Bu bilgiler promote edilen standby veritabanı bilgileridir.
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = ‘user=repuser password=yourpass host=192.168.9.129 port=5433 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any’
5- postgresql.conf Dosyasındaki Port Eski Primary Veritabanında Düzenlenir
port = 5432
Eğer kullanılıyorsa archive_command ve restore_command parametreleri de düzenlenir.
6- Eski Primary Veritabanı Servisi Başlatılır
systemctl start postgresql-pri.service
Test amaçlı girilen veriler kontrol edilir.
















Bir yorum yaz