Canlı Taşıma
Sunucular değiştirilir: donanım eskir, sağlayıcılar değişir, bölgeler taşınır. rdc repo migrate, çalışan bir depoyu tek komutla başka bir makineye taşır; --checkpoint ile süreç belleği de yolculuğa katılır. Demo uygulama pulse, RAM’de bir sayaç tutar; taşımadan sonra sıfırdan başlamak yerine saymaya devam eder.
Öğreticiyi izleyin
Nasıl taşınır?
Birinci aşama, uygulama çalışmaya devam ederken büyük bölümü kopyalar. İkinci aşama, canlı süreçleri checkpoint’ler (CRIU, rediacc.checkpoint=true etiketli container’lar için), son deltayı ve süreç durumunu karşıya taşır, ardından yeni makinede her şeyi devam ettirir. Kesinti deltaya eşittir, veriye değil.
Adım 1: Kanıt, RAM’de bir sayaç
rdc term connect --machine <machine-name> --repository pulse --command 'docker logs heartbeat_app --tail 5' Uygulama, bellekte bir sayaç tutar ve her beş saniyede bir nabız kaydeder. Sayaç yalnızca RAM'de yaşar: bir süreç yeniden başlatması onu bir'e sıfırlar.
memory counter=6 ve artıyor, her beş saniyede bir atış. Sayaç yalnızca süreç belleğinde yaşar. Süreç yeniden başlasaydı, birden başlardı.
Adım 2: Taşıyın, canlı
rdc repo migrate --name pulse --from <machine-name> --to <target-machine> --checkpoint --skip-dns Checkpoint ile taşıma: birinci aşama, kaynak çevrimiçi kalırken 2 GB'lık yükü aktarır, ardından kısa bir geçiş çalışan süreçleri checkpoint'ler ve son delta'yı karşıya taşır. Çıktı, her aşamayı ve gerçek kesinti süresini basar.
Çıktı taşımayı anlatır: birinci aşama kaynak çevrimiçiyken 2 GB’lık büyük bölümü aktarır, ardından geçiş satırı gerçek DOWNTIME’ı yazdırır: iki gigabaytlık bir depo için birkaç on megabayt ve yaklaşık yirmi saniye.
Adım 3: Yeni yuvayı doğrulayın
rdc repo list --machine <target-machine> Hedef makinedeki repository'leri listeleyin: pulse mount edilmiş, Docker çalışıyor ve container'ları ayakta.
Hedefte pulse bağlı, Docker çalışıyor, container’lar ayakta.
Adım 4: Kaynak durdu
rdc repo list --machine <machine-name> Kaynakta repository durdurulmuş ve unmount edilmiş: Docker yok, sıfır container. Image, gelecekteki delta transferleri için temel olarak tutulur.
Kaynak depoyu hâlâ listeliyor, ama açıkça: bağlı değil, Docker yok, sıfır container. Orada artık hiçbir şey çalışmıyor. Görüntü kasıtlı olarak bir sonraki delta aktarımı için temel olarak saklanır; bu sayede gelecekteki bir geri gönderim ucuz olur.
Adım 5: Sayaç saymaya devam etti
rdc term connect --machine <target-machine> --repository pulse --command 'docker logs heartbeat_app --tail 5' Yeni makinedeki loglar, sayacın checkpoint'in onu dondurduğu yerden devam ettiğini, bir'e sıfırlanmadığını gösteriyor. Süreç belleği yolculuğu tamamladı.
memory counter=17, sonra 18, 19, 20… Checkpoint’in dondurduğu yerden tam olarak devam etti, bire sıfırlanmadı. Süreç belleği de yolculuğa katıldı; uygulama makine değiştirdiğinin farkına bile varmadı.
--checkpointolmadanmigratehâlâ diski ve container’ları taşır; hedefte uçuşta devam etmek yerine sıfırdan başlarlar.
Sonraki: Delta Aktarımı.