Replika Sağlığına Göre Bekletme (Replication Gating)
İzlenen replikalardan herhangi biri geride kaldığında, durduğunda veya erişilemez olduğunda silme işlemlerini bekletin ve replikalar düzeldiğinde aynı çalıştırmayla devam edin.
Kaynakta yapılan silme işlemleri replikalara da aktarılır. Replika izleme (replica monitoring) etkinleştirildiğinde GoArchive, kurtarma sürecindekiler dahil her silme parçasından önce ve bir purge yığını kök kayıtlarını günlüğe yazmadan önce yapılandırılmış tüm replikaları kontrol eder. Replikalardan herhangi biri sağlıksız olduğu sürece görevi bekletir. Tüm replikalar yeniden sağlıklı duruma geldiğinde aynı çalıştırma devam eder: Bekletme bir hata değil, bir duraklatmadır.
replication:
enabled: true
seconds_behind_source_within: 10
check_interval: 5
servers:
- host: replica-1.internal
user: monitor
password: change_me
Tüm seçenekler Veritabanı Bağlantıları
bölümünde açıklanmıştır. İzlenen her hesabın kendi sunucusunda REPLICATION CLIENT yetkisine sahip olması gerekir.
Salt kopyalama (copy-only) görevleri hiçbir zaman silme yapmadığı için bekletilmez. Bir copy-only görevini yavaşlatmak için sleep_seconds ayarını kullanın veya görevi gözetçi dosyası
ile duraklatın.
Replika Ne Zaman Sağlıksız Sayılır?
Bir replika şu durumlarda sağlıksız kabul edilir:
- Erişilemiyorsa;
- Replikasyon yapılandırılmamışsa veya çalışmıyorsa;
seconds_behind_source_withinsaniyesinden daha fazla geride kalmışsa;- Yetki hatası dahil herhangi bir nedenle durumu okunamıyorsa.
REPLICATION CLIENTyetkisi bulunmayan bir hesap atlanmaz, görevi bekletir.
Varsayılan olarak tüm replikasyon kanalları (channels) dikkate alınır; channels ayarı bunu sunucu bazında daraltır.
Bekletme Sırasında Ne Görürsünüz?
Her kontrolde, sağlıksız her sunucu için nedeniyle birlikte bir WARN satırı yazılır. İkinci kontrolden itibaren bu satır, o ana kadarki bekletme süresini de gösterir:
replication hold: server replica1.internal:3306 unhealthy (channel <default>: lag=42s tolerance=10s); job held, retrying in 5s
- Sağlıklı sunucular için herhangi bir satır yazılmaz.
- Düzelen bir sunucu için bir
INFOsatırı yazılır; en son düzelen sunucu ise toplam bekletme süresini içeren bir satır daha yazar. --progressve bir günlük dosyası birlikte kullanıldığında, bekletme ve düzelme satırlarıstderrçıktısına da yazılır.- Bir sunucu sağlıksız durumdayken nedeni değişirse, bekletme süresi birikmeye devam eder.
Bekletme sırasında kaynakta açık oturum tutulmaz; bu nedenle bekletme, replikaların ihtiyaç duyduğu süre boyunca devam edebilir. İlk SIGTERM veya SIGINT sinyali, replikaları beklemeden bekletmeyi sona erdirir ve bir WARN satırı daha yazar:
replication hold ended by a stop request; job held 2h14m5s
Kontrol Sonuçlarının Önbelleğe Alınması ve Tespit Gecikmesi
Başarılı bir kontrol sonucu cache_ttl saniye boyunca (varsayılan 15) önbellekte tutulur. Böylece hızlı bir döngü, her silme parçasından önce sağlıklı replikaları sorgulamaz. Başarısız sonuçlar hiçbir zaman önbelleğe alınmaz. Başarılı bir kontrolden sonraki cache_ttl saniye boyunca, yeni sağlıksız hale gelen bir replika fark edilmez. Her seferinde kontrol yapılması için cache_ttl: 0 olarak ayarlayın.
Silme Hızını Replikalara Göre Ayarlama
Bekletme bir güvenlik ağıdır; hız ayarlama (pacing) ise replikaların en baştan geride kalmasını önler. Replikalardaki gecikmenin nedeni silme hacmiyse batch_delete_size değerini düşürün ve delete_sleep_seconds ayarını tanımlayın (Yığın İşleme
).
