الهجرة المباشرة
الخوادم تُستبدَل: الأجهزة تشيخ، والمزودون يتغيرون، والمناطق تتنقل. rdc repo migrate ينقل مستودعًا جاريًا إلى جهاز آخر بأمر واحد، ومع --checkpoint تُرافق ذاكرة العمليات الانتقال أيضًا. التطبيق التجريبي pulse يحتفظ بعداد في ذاكرة العشوائية؛ بعد الانتقال يواصل العد بدلًا من البدء من الصفر.
شاهد الدرس التعليمي
كيف يُنقَل
المرحلة الأولى تنسخ الجزء الأكبر بينما التطبيق يعمل. المرحلة الثانية تُوقِف العمليات الجارية (CRIU، للحاويات المُصنَّفة rediacc.checkpoint=true)، تنقل الفرق الأخير مع حالة العمليات، وتُستأنف كل شيء على الجهاز الجديد. وقت التوقف هو الفرق، لا حجم البيانات.
الخطوة 1: الدليل، عداد في ذاكرة العشوائية
rdc term connect --machine <machine-name> --repository pulse --command 'docker logs heartbeat_app --tail 5' يحتفظ التطبيق بعدّاد في الذاكرة ويسجّل نبضة كل خمس ثوانٍ. يعيش العدّاد في RAM فقط، وإعادة تشغيل العملية ستعيد ضبطه إلى واحد.
memory counter=6 ويتصاعد، نبضة كل خمس ثوانٍ. العداد يعيش في ذاكرة العملية فقط. لو أُعيد تشغيل العملية، لبدأ من جديد عند واحد.
الخطوة 2: الهجرة مباشرةً
rdc repo migrate --name pulse --from <machine-name> --to <target-machine> --checkpoint --skip-dns النقل مع نقطة تفتيش: تنقل المرحلة الأولى حجم 2 GB الأساسي بينما يظل المصدر متصلاً، ثم تُحجز نقطة تفتيش سريعة للعمليات الجارية وتُنقل الفارق الأخير. يطبع الإخراج كل مرحلة ووقت التوقف الفعلي.
المخرجات تُصوّر الانتقال: المرحلة الأولى تنقل الجيجابايتين الأساسيتين بينما المصدر لا يزال متصلًا، ثم يطبع سطر التحويل DOWNTIME الفعلي: بضعة عشرات من الميجابايتات ونحو عشرين ثانية، لمستودع بجيجابايتين.
الخطوة 3: التحقق من المنزل الجديد
rdc repo list --machine <target-machine> أدرج المستودعات على الجهاز الهدف: pulse مثبّت، Docker يعمل، وحاوياته تعمل.
على الجهاز الهدف، pulse مُحمَّل وDocker يعمل والحاويات تشتغل.
الخطوة 4: المصدر متوقف
rdc repo list --machine <machine-name> على المصدر، المستودع متوقف وغير مثبّت: لا Docker، صفر حاويات. تُحتفظ بالصورة كأساس لعمليات نقل الفارق المستقبلية.
المصدر ما زال يُدرج المستودع، لكن الحقيقة واضحة: غير مُحمَّل، بلا Docker، صفر حاويات. لا شيء يعمل هناك بعد الآن. الصورة محفوظة عن قصد لتكون الأساس لنقل الفرق التالي، فالدفعة المستقبلية ستكون رخيصة.
الخطوة 5: العداد واصل العد
rdc term connect --machine <target-machine> --repository pulse --command 'docker logs heartbeat_app --tail 5' تُظهر السجلات على الجهاز الجديد استمرار العدّاد من حيث جمّدته نقطة التفتيش، دون إعادة ضبطه إلى واحد. ذاكرة العملية قطعت الرحلة.
memory counter=17، ثم 18، 19، 20… التقط الخيط بالضبط من حيث جمّده نقطة التحقق بدلًا من إعادة الضبط إلى واحد. هذه ذاكرة العمليات تُرافق الانتقال؛ التطبيق لم يُلاحظ أنه غيّر جهازه.
بدون
--checkpoint، تُنقل الهجرة القرص والحاويات على أي حال؛ غير أن الحاويات تُعاد تشغيلها من جديد على الجهاز الهدف بدلًا من استئناف العمل في المنتصف.
التالي: نقل الفروق.