بلا تعطل دوبارہ آغاز (رولنگ) طریقہ کار
بنیادی اصول ایک ہی ہے: اکثریت ہمیشہ زندہ رہنی چاہیے۔ 3 نوڈز کے ساتھ آپ ایک وقت میں صرف 1 نوڈ نیچے لے جا سکتے ہیں؛ 5 نوڈز کے ساتھ، 2 تک۔
- پہلے فالوورز (غیر-قائد نوڈز) کو ایک ایک کر کے دوبارہ شروع کریں — قائد اس دوران سروس دیتا رہتا ہے۔ ہر دوبارہ شروع کیے گئے نوڈ کے پیئر کی لاگ نقل/اسنیپ شاٹ کے ذریعے پکڑنے کی تصدیق کریں پھر اگلے نوڈ پر جائیں۔
- آخر میں، قائد کو نیچے لے جائیں۔ باقی نوڈز ہارٹ بیٹ کا نہ ملنا محسوس کرتے ہیں اور 0.5-1 سیکنڈ میں نیا قائد منتخب کرتے ہیں۔ اس دوران کلائنٹ کی درخواستیں
E no_leaderپاتی ہیں، لیکن سرکاری کلائنٹس شفاف طریقے سے دوبارہ کوشش کرتے ہیں، اس لیے ایپلیکیشن کو صرف مختصر تاخیر نظر آتی ہے۔ - پرانے قائد کو دوبارہ اوپر لائیں — یہ فالوور کے طور پر شامل ہو کر پکڑتا ہے (یہ خودکار طور پر قیادت واپس نہیں لیتا)۔
جب تک اکثریت زندہ رہتی ہے، لاک کی حالت پوری طرح محفوظ رہتی ہے — دوبارہ آغاز کے دوران جاری/اجراء کیے گئے لاکس بھی کمٹ سے گزرتے ہیں، اس لیے کچھ ضائع نہیں ہوتا۔
بہاؤ (3 نوڈز کی بنیاد پر)
قائد
فالوور 1
فالوور 2
① فالوور 1 دوبارہ شروع — قائد سروس دیتا رہتا ہے
لاگ نقل/اسنیپ شاٹ سے پکڑتا ہے
② پکڑنے کی تصدیق کے بعد فالوور 2 دوبارہ شروع
لاگ نقل سے پکڑتا ہے
③ آخر میں قائد کو دوبارہ شروع کریں
Vote → 0.5-1s میں نیا قائد منتخب
پرانا قائد فالوور کے طور پر شامل ہو کر پکڑتا ہے
اتفاق رائے RPC (Raft)
قائد کے نیچے رہنے کے مختصر وقفے کے دوران کلائنٹس کو E no_leader مل سکتا ہے، لیکن سرکاری کلائنٹس شفاف طریقے سے دوبارہ کوشش کرتے ہیں، اس لیے ایپلیکیشن کو یہ صرف ایک مختصر تاخیر کے طور پر نظر آتا ہے۔