Ana içeriğe atla Navigasyona atla Alt bilgiye atla
Sınırlı süre: Design Partner Programı — BUSINESS planı ömür boyu

Otomatik Başlatma ve Kurtarma

Otomatik başlatmanın nasıl çalıştığı, önyükleme sonrası duran depoları kurtaran periyodik uzlaştırıcı ve kurtarma durumunun nasıl inceleneceği.

Otomatik Başlatma ve Kurtarma

Bu sayfa, depoların önyükleme sırasında nasıl otomatik olarak bağlandığını ve başlatıldığını, ayrıca periyodik uzlaştırıcının sunucu çalışırken duran bir depoyu nasıl geri getirdiğini açıklar.

Bir depo için otomatik başlatmayı etkinleştirme veya devre dışı bırakma hakkında bilgi için bkz. Servisler: Önyükleme Sırasında Otomatik Başlatma.

Otomatik Başlatma Nasıl Çalışır

Bir depo için otomatik başlatmayı etkinleştirdiğinizde, Rediacc 256 baytlık rastgele bir LUKS anahtar dosyası oluşturur ve bunu şifreli birimdeki LUKS slot 1’e ekler. Anahtar dosyası şu konumda saklanır:

{datastore}/.credentials/keys/{guid}.key

Bu, makinenin parola sorulmadan depoyu bağlamasına olanak tanır. LUKS slot 0 (parolanız) değiştirilmez.

Önyükleme sırasında, rediacc-autostart.service adlı tek seferlik bir systemd servisi otomatik başlatmanın etkin olduğu depoların listesini okur, her birini anahtar dosyasını kullanarak bağlar, depo başına Docker daemon’ını başlatır ve Rediaccfile up() kancasını çalıştırır. Kapatma sırasında servis down() kancasını çalıştırır, Docker’ı durdurur ve LUKS birimlerini kapatır.

Güvenlik notu: Anahtar dosyası, parola olmadan depoya root düzeyinde erişim sağlar. Sunucuya root erişimi olan herhangi biri otomatik başlatmanın etkin olduğu depoları bağlayabilir. Hassas depolarda otomatik başlatmayı etkinleştirmeden önce bunu kendi tehdit modelinize göre değerlendirin.

Kurtarma Açığı

Önyükleme otomatik başlatması her önyükleme için tam olarak bir kez çalışır. Sonrasında sürekli çalışan yönlendirici watchdog yalnızca çalışan bir Docker daemon’una sahip, zaten çalışan bir depodaki konteynerleri yeniden başlatır. Bir LUKS birimini yeniden bağlayamaz veya durmuş bir ağ başına Docker daemon’unu yeniden başlatamaz.

Bu, bir deponun LUKS birimi sunucu önyüklendikten sonra ayrılırsa veya Docker daemon’u durursa, ne önyükleme servisinin ne de watchdog’un onu kurtaramayacağı anlamına gelir. Uzlaştırıcı var olmadan önce, bu durumdaki bir depo bir operatör müdahale edene kadar kapalı kalırdı.

Periyodik Uzlaştırıcı

rediacc-autostart-reconcile.timer systemd zamanlayıcısı yaklaşık her 3 dakikada bir tetiklenir ve renet repository reconcile komutunu çalıştırır. Otomatik başlatmanın etkin olduğu her depo için uzlaştırıcı üç şeyi kontrol eder:

  1. LUKS birimi bağlı mı?
  2. Ağ başına Docker daemon’u çalışıyor mu?
  3. Deponun servisleri ayakta mı?

Herhangi bir kontrol başarısız olursa, uzlaştırıcı depoyu anahtar dosyasını kullanarak kurtarır: birimi bağlar, Docker daemon’unu başlatır ve up() kancasını çalıştırır. Parola gerekmez.

Sağlıklı olan, şu anda soğuk yedekleme tarafından kullanılan veya geri çekilme penceresinde olan depolar atlanır.

Geri Çekilme ve Kalıcı Başarısızlık İşaretçileri

Kurtarılmayı başaramayan bir depo, her döngüde hemen yeniden denemez. Uzlaştırıcı üstel geri çekilme kullanır:

Başarısızlık sayısıSonraki denemeden önceki bekleme
11 dakika
22 dakika
35 dakika
415 dakika
5+30 dakika, ardından 60 dakika

5 ardışık başarısızlıktan sonra, uzlaştırıcı şu konumda kalıcı bir işaretçi dosyası yazar:

/var/lib/rediacc/reconcile/failed/{guid}

Bu dosya, günlük rotasyonundan sağ çıkar. Varlığı, deponun operatör müdahalesi gerektirdiği anlamına gelir. Uzlaştırıcı başarısızlığı error seviyesinde kaydeder ve işaretçi silinene kadar o depo için otomatik kurtarma girişimlerini durdurur.

Kalıcı kurtarma başarısızlığının yaygın nedenleri:

  • Güvenilmez veya süresi dolmuş depo lisansı: lisans kontrolü up() işlevinden önce çalışır.
  • Eksik anahtar dosyası: {datastore}/.credentials/keys/{guid}.key konumundaki anahtar dosyası silinmişse, uzlaştırıcı parola olmadan birimi bağlayamaz.
  • Bozuk Rediaccfile: sözdizimi hatası veya her zaman sıfır dışı kodla çıkan bir up() kancası.

Yönlendirici Watchdog ile İlişki

Uzlaştırıcı ve yönlendirici watchdog farklı başarısızlık düzeylerini ele alır ve birbirini tamamlamak üzere tasarlanmıştır:

KatmanNe ile ilgilenir
Yönlendirici watchdogÇalışan, bağlı ve aktif Docker daemon’una sahip bir depodaki konteyner düzeyinde yeniden başlatmalar
Uzlaştırıcı (rediacc-autostart-reconcile.timer)Depo düzeyinde kurtarma: LUKS’u yeniden bağlama, Docker daemon’unu yeniden başlatma, up() kancasını yeniden çalıştırma

Sağlıklı bir depodaki tek bir konteyner çökerse, watchdog bununla ilgilenir. Tüm depo daemon’u durursa, uzlaştırıcı bununla ilgilenir.

Kurtarma Durumunu İnceleme

Zamanlayıcı ve servis durumu

systemctl status rediacc-autostart-reconcile.timer
systemctl list-timers rediacc-autostart-reconcile.timer

Uzlaştırıcı günlükleri

journalctl -u rediacc-autostart-reconcile.service
journalctl -u rediacc-autostart-reconcile.service --since "1 hour ago"

Kalıcı başarısızlık işaretçileri

Kalıcı başarısızlık işaretçisi olan depoları listeleyin:

ls /var/lib/rediacc/reconcile/failed/

Her dosya adı bir depo GUID’idir. GUID’leri depo adlarıyla eşleştirmek için rdc config repository list komutunu kullanın.

Temel sorunu çözdükten sonra işaretçiyi temizlemek için dosyayı silin:

rm /var/lib/rediacc/reconcile/failed/{guid}

Uzlaştırıcı, bir sonraki zamanlayıcı döngüsünde kurtarmayı yeniden deneyecektir.

İlgili Sayfalar