RabbitMQ ھڪڙو پيغام بروکر آھي جيڪو Erlang ۾ لکيل آھي جيڪو توھان کي اجازت ڏئي ٿو ھڪڙي ناڪامي ڪلستر کي منظم ڪرڻ جي مڪمل ڊيٽا جي نقل سان ڪيترن ئي نوڊس ۾، جتي ھر نوڊ خدمت ڪري سگھي ٿو درخواستون پڙھڻ ۽ لکڻ. پيداوار جي عمل ۾ ڪيترن ئي ڪبرنيٽس ڪلسٽرن سان گڏ، اسان RabbitMQ تنصيب جي هڪ وڏي تعداد کي سپورٽ ڪريون ٿا ۽ ڊيٽا کي هڪ ڪلستر کان ٻئي ڪلستر تائين بغير وقت جي منتقل ڪرڻ جي ضرورت کي منهن ڏيڻو پيو.
اسان کي گهٽ ۾ گهٽ ٻن ڪيسن ۾ هن آپريشن جي ضرورت آهي:
RabbitMQ ڪلستر مان ڊيٽا کي منتقل ڪرڻ جيڪو ڪبرنيٽس ۾ موجود نه آهي هڪ نئين - اڳ ۾ ئي ”ڪبرنيٽائزڊ“ (يعني K8s پوڊز ۾ آپريٽنگ) - ڪلستر.
ڪبرنيٽس جي اندر RabbitMQ جي لڏپلاڻ هڪ نالي جي جاءِ کان ٻئي ڏانهن (مثال طور، جيڪڏهن سرڪٽس نالن جي جڳهن کان الڳ ٿيل آهن، ته پوءِ انفراسٽرڪچر کي هڪ سرڪٽ کان ٻئي ڏانهن منتقل ڪرڻ).
مضمون ۾ تجويز ڪيل ترڪيب حالتن تي مرکوز آهي (پر انهن تائين محدود ناهي) جنهن ۾ هڪ پراڻو RabbitMQ ڪلستر آهي (مثال طور، 3 نوڊس جو)، يا ته اڳ ۾ ئي K8s ۾ يا ڪجهه پراڻن سرورن تي واقع آهي. Kubernetes تي ميزباني ڪيل هڪ ايپليڪيشن (اڳ ۾ ئي موجود آهي يا مستقبل ۾) ان سان گڏ ڪم ڪري ٿي:
... ۽ اسان ان کي ڪبرنيٽس ۾ نئين پيداوار ڏانهن لڏڻ جي ڪم سان منهن ڏئي رهيا آهيون.
پهريون، لڏپلاڻ جو عام طريقو بيان ڪيو ويندو، ۽ ان کان پوء ان جي عمل جي فني تفصيل بيان ڪيو ويندو.
لڏپلاڻ وارو الگورتھم
پهرين، ابتدائي، اسٽيج ڪنهن به عمل کان پهريان اهو چيڪ ڪرڻ آهي ته اعلي دستيابي موڊ کي پراڻي RabbitMQ تنصيب ۾ فعال ڪيو ويو آهي (HA). سبب واضح آهي - اسان ڪنهن به ڊيٽا کي وڃائڻ نٿا چاهيون. ھن چيڪ کي انجام ڏيڻ لاءِ، توھان RabbitMQ منتظم پينل ڏانھن وڃو ۽ Admin → Policies ٽئب ۾ پڪ ڪريو ته قيمت مقرر ٿيل آھي ha-mode: all:
ايندڙ قدم Kubernetes پوڊس ۾ هڪ نئين RabbitMQ ڪلستر کي وڌائڻ آهي (اسان جي صورت ۾، مثال طور، 3 نوڊس تي مشتمل آهي، پر انهن جو تعداد مختلف ٿي سگهي ٿو).
ان کان پوء، اسان پراڻي ۽ نئين RabbitMQ ڪلستر کي ضم ڪريون ٿا، هڪ واحد ڪلستر (6 نوڊس جو):
پراڻي ۽ نئين RabbitMQ ڪلستر جي وچ ۾ ڊيٽا هم وقت سازي جو عمل شروع ڪيو ويو آهي. هڪ دفعو سڀ ڊيٽا ڪلستر ۾ سڀني نوڊس جي وچ ۾ هم وقت سازي ڪئي وئي آهي، اسان نئين ڪلستر کي استعمال ڪرڻ لاء ايپليڪيشن کي تبديل ڪري سگهون ٿا:
انهن عملن کان پوء، اهو RabbitMQ ڪلستر کان پراڻي نوڊس کي هٽائڻ لاء ڪافي آهي، ۽ ان کي مڪمل سمجهي سگهجي ٿو:
اسان هن اسڪيم کي پيداوار ۾ ڪيترائي ڀيرا استعمال ڪيو آهي. بهرحال، اسان جي پنهنجي سهولت لاءِ، اسان ان کي هڪ خاص نظام ۾ لاڳو ڪيو آهي جيڪو معياري RMQ ترتيبن کي ڪيترن ئي ڪبرنيٽس ڪلسٽرن ۾ ورهائي ٿو. (انهن لاء جيڪي تجسس آهن: اسان بابت ڳالهائي رهيا آهيون اضافو آپريٽرجنهن بابت اسان تازو ئي ٻڌايو). هيٺ اسين انفرادي هدايتون پيش ڪنداسين ته ڪو به ماڻهو پنهنجي تنصيب تي لاڳو ڪري سگهي ٿو عمل ۾ تجويز ڪيل حل جي ڪوشش ڪرڻ لاء.
3. RabbitMQ منتظم پينل ڏانھن وڃو، ھڪڙي نئين قطار ٺاھيو ۽ ڪيترائي پيغام شامل ڪريو. انهن جي ضرورت پوندي ته جيئن لڏپلاڻ کان پوءِ اسان پڪ ڪري سگهون ته سمورو ڊيٽا محفوظ آهي ۽ اسان ڪجهه به نه وڃايو آهي:
ٽيسٽ بينچ تيار آهي: اسان وٽ "پراڻي" RabbitMQ ڊيٽا سان گڏ آهي جنهن کي منتقل ڪرڻ جي ضرورت آهي.
RabbitMQ ڪلستر لڏپلاڻ
1. پهرين، اچو ته نئين RabbitMQ کي ترتيب ڏيو دوست نالي جي جڳھ سان ساڳيوErlangCookie ۽ استعمال ڪندڙ لاء پاسورڊ. هن کي ڪرڻ لاء، اسان مٿي بيان ڪيل عملن کي انجام ڏينداسين، هيٺ ڏنل RMQ کي نصب ڪرڻ لاء حتمي حڪم تبديل ڪندي:
helm install . --name rmq-new --namespace rmq-new
2. هاڻي توهان کي نئين ڪلستر کي پراڻي سان ملائڻ جي ضرورت آهي. هن کي ڪرڻ لاء، هر پوڊ ڏانهن وڃو نئين RabbitMQ ۽ حڪم جاري ڪريو:
اهي حڪم موجوده نوڊ کي روڪيندا نئين RMQ ڪلستر، ان کي پراڻي ڪلستر سان ڳنڍيو ۽ ان کي ٻيهر شروع ڪريو.
3. 6 نوڊس جو RMQ ڪلستر تيار آھي:
توھان کي انتظار ڪرڻو پوندو جيستائين پيغام سڀني نوڊس جي وچ ۾ هم وقت ساز ٿين. اهو اندازو لڳائڻ ڏکيو ناهي ته پيغام جي هم وقت سازي جو وقت هارڊويئر جي گنجائش تي منحصر آهي جنهن تي ڪلستر لڳايو ويو آهي ۽ پيغامن جي تعداد تي. بيان ڪيل منظر ۾، انهن مان صرف 10 آهن، تنهنڪري ڊيٽا کي فوري طور تي هم وقت سازي ڪئي وئي، پر پيغامن جي ڪافي وڏي تعداد سان، هم وقت سازي ڪلاڪن تائين ٿي سگهي ٿي.
4. باقي اهو آهي ته ايپليڪيشن ۾ موجود RMQ ايڊريس کي نئين ڪلستر ۾ تبديل ڪرڻ (هتي مخصوص عملن جو دارومدار ان ٽيڪنالاجي اسٽيڪ تي آهي جيڪو توهان استعمال ڪري رهيا آهيو ۽ ايپليڪيشن جون ٻيون خاصيتون) جنهن کان پوءِ توهان پراڻي کي الوداع چئي سگهو ٿا.
آخري آپريشن لاءِ (يعني اڳ ۾ ئي после ايپليڪيشن کي نئين ڪلستر ۾ تبديل ڪندي) هر نوڊ ڏانهن وڃو پراڻو ڪلستر ڪريو ۽ حڪمن تي عمل ڪريو:
rabbitmqctl stop_app
rabbitmqctl reset
پراڻي نوڊس جي باري ۾ ڪلستر "وساريو ويو": توھان پراڻي RMQ کي حذف ڪري سگھو ٿا، جنھن تي ھلڻ مڪمل ٿي ويندي.
ويچاري: جيڪڏھن توھان RMQ استعمال ڪريو سرٽيفڪيٽن سان، پوءِ بنيادي طور ڪجھ به تبديل نه ٿيندو - ھلندڙ عمل بلڪل ساڳيو ئي ڪيو ويندو.
پهچڻ
بيان ڪيل اسڪيم تقريبن سڀني ڪيسن لاءِ موزون آهي جڏهن اسان کي RabbitMQ منتقل ڪرڻ يا صرف نئين ڪلستر ڏانهن منتقل ڪرڻ جي ضرورت آهي.
اسان جي حالت ۾، مشڪلاتون صرف هڪ ڀيرو پيدا ٿيون، جڏهن RMQ کي ڪيترن ئي هنڌن تان پهچايو ويو، ۽ اسان کي اهو موقعو نه مليو ته RMQ ايڊريس کي هر جڳهه تي تبديل ڪري سگهون. ان کان پوء اسان هڪ نئين RMQ کي ساڳئي نالي واري جاء تي ساڳئي ليبل سان شروع ڪيو ته جيئن اهو موجوده خدمتن ۽ داخل ٿيڻ جي تحت اچي، ۽ پوڊ کي لانچ ڪرڻ وقت اسان ليبلز کي هٿ سان هٿ ڪيو، انهن کي شروع ۾ هٽائي ڇڏيو ته جيئن درخواستن تي نه اچي. خالي RMQ، ۽ پيغامن جي هم وقت سازي کان پوءِ انھن کي واپس شامل ڪيو.
اسان ساڳي حڪمت عملي استعمال ڪئي جڏهن RabbitMQ کي نئين نسخي ۾ تبديل ٿيل ترتيب سان اپڊيٽ ڪيو - هر شيء هڪ ڪلاڪ وانگر ڪم ڪيو.
پي ايس
هن مواد جي منطقي تسلسل جي طور تي، اسان مونگو ڊي بي بابت آرٽيڪل تيار ڪري رهيا آهيون (هڪ هارڊويئر سرور کان ڪبرنيٽس ڏانهن لڏپلاڻ) ۽ MySQL (ڪيئن اسان هن ڊي بي ايم ايس کي ڪبرنيٽس اندر تيار ڪندا آهيون). اهي ايندڙ مهينن ۾ شايع ڪيا ويندا.