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

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

Otomatik başlatma etkin olan depolar önyükleme sırasında kendiliğinden başlar. Bunlardan biri daha sonra kapanırsa, periyodik uzlaştırıcı onu geri getirir. Hiçbir bildirim. El ile yeniden başlatma yok.

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.

Anahtar dosyası slotu hızlı PBKDF2 KDF’yi kullanır: 256 baytlık rastgele bir anahtar dosyası zaten kendi güvenlik marjınıdır; bu nedenle bellek açısından yoğun bir KDF, ek koruma sağlamadan yalnızca bağlama gecikmesini artırırdı. Bağlamalar bir saniyenin çok altında açılır. Bu optimizasyon öncesinde oluşturulan depolar, bağlama başına birkaç saniyelik Argon2id türetme maliyeti öder; bunları makinede (depo bağlı değilken) renet repository kdf-migrate --name <guid> operatör komutuyla yerinde dönüştürebilirsiniz. Slot 0 Argon2id kullanmaya devam eder; bu, insan parolası için doğru tercih.

Ö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