إجراء إعادة التشغيل المتدرّج (Rolling Restart)
هناك مبدأ أساسي واحد: يجب أن تبقى الأغلبية حية دائمًا. مع 3 عُقد، يمكنك إنزال عقدة واحدة فقط في كل مرة؛ ومع 5 عُقد، حتى عقدتين.
- أعد تشغيل الأتباع (العُقد غير القائدة) أولًا، واحدة تلو الأخرى — يواصل القائد الخدمة طوال ذلك. تأكد من أن كل عقدة أُعيد تشغيلها قد لحقت عبر تكرار سجل القرين أو اللقطة قبل الانتقال إلى التالية.
- أخيرًا، أنزل القائد. تكتشف العُقد المتبقية انقطاع النبضة وتنتخب قائدًا جديدًا خلال 0.5-1 ثانية. تصل طلبات العملاء خلال تلك النافذة بـ
E no_leader، لكن العملاء الرسميين يعيدون المحاولة بشفافية، فلا يرى التطبيق سوى تأخير قصير. - أعد تشغيل القائد القديم — ينضم كتابع ويلحق بالركب (لا يستعيد القيادة تلقائيًا).
تبقى حالة القفل محفوظة طوال الوقت ما دامت الأغلبية حية — فحتى الأقفال الممنوحة أو المحررة أثناء إعادة التشغيل تمر بالتثبيت، فلا يضيع شيء.
التدفق (على أساس 3 عُقد)
القائد
التابع 1
التابع 2
① إعادة تشغيل التابع 1 — يواصل القائد الخدمة
يلحق عبر تكرار السجل/اللقطة
② بعد التأكد من اللحاق، إعادة تشغيل التابع 2
يلحق عبر تكرار السجل
③ إعادة تشغيل القائد أخيرًا
Vote ← يُنتخب قائد جديد خلال 0.5-1 ثانية
ينضم القائد القديم كتابع ويلحق بالركب
استدعاء إجماع (RPC) عبر Raft
خلال النافذة القصيرة التي يكون فيها القائد معطلًا، قد يستلم العملاء E no_leader، لكن العملاء الرسميين يعيدون المحاولة بشفافية، فلا يبدو للتطبيق سوى تأخير قصير.