wal_keep_segments, archive_command, replcation slots

bazen standby geride kalır ve eski WAL dosyasyalarına erişmek gerekebilir. default olarak postgresql WAL dosyalarını döngüsel kullanır ve ilk WAL dosyasına yeniden gelince eskiler ezilmiş olur. standby geride kadığında lazım olabilecek WAL dosyalarına erişmenin 3 yolu var.

birincisi, wal_keep_segments; bu parametreye set edilen değer kadar WAL dosyası silinmiyor, bu parametrede set edilen değere ulaşınca WAL dosyaları yine döngüsel olarak ezilmeye başlanıyor. bu parametrenin kötü yanı da burada, standby’ın ne kadar geriye düşebileceğini bilemediğimiz için yine aradığımız WAL dosyasını bulamama riskimiz var.

ikinicisi archive_mode ve archive_command parametrelerini set ederek primary’nin bir WAL dosyasını döngüsel olarak ezmeden önce mutlaka buraya kopyalamasını sağlar. bu yöntemde standby aradığı WAL dosyasına erişmek konusunda artık garanti edilmiş olur. bu yöntemin zayıf yanı ise bu doyaları koyacağımız path’in diski dodurma riskinin olması, standby tarafında apply edilmiş WAL dosyalarının bir script yardımıyla kontrol edilip, scheduled olarak bu scriptin kontrol yapıp daha sonra apply edilenleri silmesi gibi bir cron joba ihtiyaç duyulması. ayrıca standby’ın arşivdeki WAL dosyalarına erişebilmesi için production db’nin paylaşımlı (prod tarafında yazma yetkili, standby tarafında okuma yetkili) bir alana ihtiyacı vadır. bu da yönetimi daha karmaşık ve zor yapar.

üçüncü yöntem ise 9.4 ile getirilen replication slot; bu yöntemde production artık standby’ın durumunu kontrol edebiliyor ve standby WAL dosyalarına ihtiyaç duyduğu sürece WAL dosyalarını pg_xlg/pg_wal dizininde tutuyor ve döngüsel olarak ezmiyor. bu yöntem manuel adım sayısının az olmasından ve postgres tarfından yönetilmesinden dolayı en başarılısı diyebiliriz.

Leave a comment