ڪبرنيٽس ڏانهن RabbitMQ جي بيحد لڏپلاڻ

ڪبرنيٽس ڏانهن RabbitMQ جي بيحد لڏپلاڻ

RabbitMQ ھڪڙو پيغام بروکر آھي جيڪو Erlang ۾ لکيل آھي جيڪو توھان کي اجازت ڏئي ٿو ھڪڙي ناڪامي ڪلستر کي منظم ڪرڻ جي مڪمل ڊيٽا جي نقل سان ڪيترن ئي نوڊس ۾، جتي ھر نوڊ خدمت ڪري سگھي ٿو درخواستون پڙھڻ ۽ لکڻ. پيداوار جي عمل ۾ ڪيترن ئي ڪبرنيٽس ڪلسٽرن سان گڏ، اسان RabbitMQ تنصيب جي هڪ وڏي تعداد کي سپورٽ ڪريون ٿا ۽ ڊيٽا کي هڪ ڪلستر کان ٻئي ڪلستر تائين بغير وقت جي منتقل ڪرڻ جي ضرورت کي منهن ڏيڻو پيو.

اسان کي گهٽ ۾ گهٽ ٻن ڪيسن ۾ هن آپريشن جي ضرورت آهي:

  1. RabbitMQ ڪلستر مان ڊيٽا کي منتقل ڪرڻ جيڪو ڪبرنيٽس ۾ موجود نه آهي هڪ نئين - اڳ ۾ ئي ”ڪبرنيٽائزڊ“ (يعني K8s پوڊز ۾ آپريٽنگ) - ڪلستر.
  2. ڪبرنيٽس جي اندر RabbitMQ جي لڏپلاڻ هڪ نالي جي جاءِ کان ٻئي ڏانهن (مثال طور، جيڪڏهن سرڪٽس نالن جي جڳهن کان الڳ ٿيل آهن، ته پوءِ انفراسٽرڪچر کي هڪ سرڪٽ کان ٻئي ڏانهن منتقل ڪرڻ).

مضمون ۾ تجويز ڪيل ترڪيب حالتن تي مرکوز آهي (پر انهن تائين محدود ناهي) جنهن ۾ هڪ پراڻو RabbitMQ ڪلستر آهي (مثال طور، 3 نوڊس جو)، يا ته اڳ ۾ ئي K8s ۾ يا ڪجهه پراڻن سرورن تي واقع آهي. Kubernetes تي ميزباني ڪيل هڪ ايپليڪيشن (اڳ ۾ ئي موجود آهي يا مستقبل ۾) ان سان گڏ ڪم ڪري ٿي:

ڪبرنيٽس ڏانهن RabbitMQ جي بيحد لڏپلاڻ

... ۽ اسان ان کي ڪبرنيٽس ۾ نئين پيداوار ڏانهن لڏڻ جي ڪم سان منهن ڏئي رهيا آهيون.

پهريون، لڏپلاڻ جو عام طريقو بيان ڪيو ويندو، ۽ ان کان پوء ان جي عمل جي فني تفصيل بيان ڪيو ويندو.

لڏپلاڻ وارو الگورتھم

پهرين، ابتدائي، اسٽيج ڪنهن به عمل کان پهريان اهو چيڪ ڪرڻ آهي ته اعلي دستيابي موڊ کي پراڻي RabbitMQ تنصيب ۾ فعال ڪيو ويو آهي (HA). سبب واضح آهي - اسان ڪنهن به ڊيٽا کي وڃائڻ نٿا چاهيون. ھن چيڪ کي انجام ڏيڻ لاءِ، توھان RabbitMQ منتظم پينل ڏانھن وڃو ۽ Admin → Policies ٽئب ۾ پڪ ڪريو ته قيمت مقرر ٿيل آھي ha-mode: all:

ڪبرنيٽس ڏانهن RabbitMQ جي بيحد لڏپلاڻ

ايندڙ قدم Kubernetes پوڊس ۾ هڪ نئين RabbitMQ ڪلستر کي وڌائڻ آهي (اسان جي صورت ۾، مثال طور، 3 نوڊس تي مشتمل آهي، پر انهن جو تعداد مختلف ٿي سگهي ٿو).

ان کان پوء، اسان پراڻي ۽ نئين RabbitMQ ڪلستر کي ضم ڪريون ٿا، هڪ واحد ڪلستر (6 نوڊس جو):

ڪبرنيٽس ڏانهن RabbitMQ جي بيحد لڏپلاڻ

پراڻي ۽ نئين RabbitMQ ڪلستر جي وچ ۾ ڊيٽا هم وقت سازي جو عمل شروع ڪيو ويو آهي. هڪ دفعو سڀ ڊيٽا ڪلستر ۾ سڀني نوڊس جي وچ ۾ هم وقت سازي ڪئي وئي آهي، اسان نئين ڪلستر کي استعمال ڪرڻ لاء ايپليڪيشن کي تبديل ڪري سگهون ٿا:

ڪبرنيٽس ڏانهن RabbitMQ جي بيحد لڏپلاڻ

انهن عملن کان پوء، اهو RabbitMQ ڪلستر کان پراڻي نوڊس کي هٽائڻ لاء ڪافي آهي، ۽ ان کي مڪمل سمجهي سگهجي ٿو:

ڪبرنيٽس ڏانهن RabbitMQ جي بيحد لڏپلاڻ

اسان هن اسڪيم کي پيداوار ۾ ڪيترائي ڀيرا استعمال ڪيو آهي. بهرحال، اسان جي پنهنجي سهولت لاءِ، اسان ان کي هڪ خاص نظام ۾ لاڳو ڪيو آهي جيڪو معياري RMQ ترتيبن کي ڪيترن ئي ڪبرنيٽس ڪلسٽرن ۾ ورهائي ٿو. (انهن لاء جيڪي تجسس آهن: اسان بابت ڳالهائي رهيا آهيون اضافو آپريٽرجنهن بابت اسان تازو ئي ٻڌايو). هيٺ اسين انفرادي هدايتون پيش ڪنداسين ته ڪو به ماڻهو پنهنجي تنصيب تي لاڳو ڪري سگهي ٿو عمل ۾ تجويز ڪيل حل جي ڪوشش ڪرڻ لاء.

اچو ته عملي طور تي ڪوشش ڪريون

گه

تفصيل بلڪل سادو آهن:

  1. Kubernetes ڪلستر (minikube به ڪم ڪندو)؛
  2. RabbitMQ ڪلسٽر (ننگي ڌاتو تي ترتيب ڏئي سگهجي ٿو، ۽ سرڪاري هيلم چارٽ مان ڪبرنيٽس ۾ باقاعده ڪلستر وانگر ٺاهيو ويو آهي).

هيٺ ڏنل مثال لاءِ، مون RMQ کي ڪبرنيٽس تائين پهچايو ۽ ان کي سڏيو rmq-old.

اسٽينڊ تياري

1. هيلم چارٽ ڊائون لوڊ ڪريو ۽ ان ۾ ٿوري ترميم ڪريو:

helm fetch --untar stable/rabbitmq-ha

سهولت لاءِ، اسان هڪ پاس ورڊ مقرر ڪيو، ErlangCookie ۽ سياست ڪرڻ ha-allته جيئن ڊفالٽ طور قطارون RMQ ڪلستر جي سڀني نوڊس جي وچ ۾ هم وقت ٿين:

rabbitmqPassword: guest
rabbitmqErlangCookie: mae9joopaol7aiVu3eechei2waiGa2we
definitions:
policies: |-
  {
    "name": "ha-all",
    "pattern": ".*",
    "vhost": "/",
    "definition": {
      "ha-mode": "all",
      "ha-sync-mode": "automatic",
      "ha-sync-batch-size": 81920
    }
  }

2. چارٽ انسٽال ڪريو:

helm install . --name rmq-old --namespace rmq-old

3. RabbitMQ منتظم پينل ڏانھن وڃو، ھڪڙي نئين قطار ٺاھيو ۽ ڪيترائي پيغام شامل ڪريو. انهن جي ضرورت پوندي ته جيئن لڏپلاڻ کان پوءِ اسان پڪ ڪري سگهون ته سمورو ڊيٽا محفوظ آهي ۽ اسان ڪجهه به نه وڃايو آهي:

ڪبرنيٽس ڏانهن RabbitMQ جي بيحد لڏپلاڻ

ٽيسٽ بينچ تيار آهي: اسان وٽ "پراڻي" RabbitMQ ڊيٽا سان گڏ آهي جنهن کي منتقل ڪرڻ جي ضرورت آهي.

RabbitMQ ڪلستر لڏپلاڻ

1. پهرين، اچو ته نئين RabbitMQ کي ترتيب ڏيو دوست نالي جي جڳھ سان ساڳيو ErlangCookie ۽ استعمال ڪندڙ لاء پاسورڊ. هن کي ڪرڻ لاء، اسان مٿي بيان ڪيل عملن کي انجام ڏينداسين، هيٺ ڏنل RMQ کي نصب ڪرڻ لاء حتمي حڪم تبديل ڪندي:

helm install . --name rmq-new --namespace rmq-new

2. هاڻي توهان کي نئين ڪلستر کي پراڻي سان ملائڻ جي ضرورت آهي. هن کي ڪرڻ لاء، هر پوڊ ڏانهن وڃو نئين RabbitMQ ۽ حڪم جاري ڪريو:

export OLD_RMQ=rabbit@rmq-old-rabbitmq-ha-0.rmq-old-rabbitmq-ha-discovery.rmq-old.svc.cluster.local && 
  rabbitmqctl stop_app && 
  rabbitmqctl join_cluster $OLD_RMQ && 
  rabbitmqctl start_app

متغير ۾ OLD_RMQ نوڊس مان هڪ جو پتو ملي ٿو پراڻو RMQ ڪلستر.

اهي حڪم موجوده نوڊ کي روڪيندا نئين RMQ ڪلستر، ان کي پراڻي ڪلستر سان ڳنڍيو ۽ ان کي ٻيهر شروع ڪريو.

3. 6 نوڊس جو RMQ ڪلستر تيار آھي:

ڪبرنيٽس ڏانهن RabbitMQ جي بيحد لڏپلاڻ

توھان کي انتظار ڪرڻو پوندو جيستائين پيغام سڀني نوڊس جي وچ ۾ هم وقت ساز ٿين. اهو اندازو لڳائڻ ڏکيو ناهي ته پيغام جي هم وقت سازي جو وقت هارڊويئر جي گنجائش تي منحصر آهي جنهن تي ڪلستر لڳايو ويو آهي ۽ پيغامن جي تعداد تي. بيان ڪيل منظر ۾، انهن مان صرف 10 آهن، تنهنڪري ڊيٽا کي فوري طور تي هم وقت سازي ڪئي وئي، پر پيغامن جي ڪافي وڏي تعداد سان، هم وقت سازي ڪلاڪن تائين ٿي سگهي ٿي.

تنهن ڪري، هم وقت سازي جي حالت:

ڪبرنيٽس ڏانهن RabbitMQ جي بيحد لڏپلاڻ

اهو آهي +5 مطلب ته پيغام اڳ ۾ ئي آهن وڌيڪ 5 نوڊس تي (سواء جيڪي فيلڊ ۾ اشارو ڪيو ويو آهي Node). اهڙيء طرح، synchronization ڪامياب ٿي ويو.

4. باقي اهو آهي ته ايپليڪيشن ۾ موجود RMQ ايڊريس کي نئين ڪلستر ۾ تبديل ڪرڻ (هتي مخصوص عملن جو دارومدار ان ٽيڪنالاجي اسٽيڪ تي آهي جيڪو توهان استعمال ڪري رهيا آهيو ۽ ايپليڪيشن جون ٻيون خاصيتون) جنهن کان پوءِ توهان پراڻي کي الوداع چئي سگهو ٿا.

آخري آپريشن لاءِ (يعني اڳ ۾ ئي после ايپليڪيشن کي نئين ڪلستر ۾ تبديل ڪندي) هر نوڊ ڏانهن وڃو پراڻو ڪلستر ڪريو ۽ حڪمن تي عمل ڪريو:

rabbitmqctl stop_app
rabbitmqctl reset

پراڻي نوڊس جي باري ۾ ڪلستر "وساريو ويو": توھان پراڻي RMQ کي حذف ڪري سگھو ٿا، جنھن تي ھلڻ مڪمل ٿي ويندي.

ويچاري: جيڪڏھن توھان RMQ استعمال ڪريو سرٽيفڪيٽن سان، پوءِ بنيادي طور ڪجھ به تبديل نه ٿيندو - ھلندڙ عمل بلڪل ساڳيو ئي ڪيو ويندو.

پهچڻ

بيان ڪيل اسڪيم تقريبن سڀني ڪيسن لاءِ موزون آهي جڏهن اسان کي RabbitMQ منتقل ڪرڻ يا صرف نئين ڪلستر ڏانهن منتقل ڪرڻ جي ضرورت آهي.

اسان جي حالت ۾، مشڪلاتون صرف هڪ ڀيرو پيدا ٿيون، جڏهن RMQ کي ڪيترن ئي هنڌن تان پهچايو ويو، ۽ اسان کي اهو موقعو نه مليو ته RMQ ايڊريس کي هر جڳهه تي تبديل ڪري سگهون. ان کان پوء اسان هڪ نئين RMQ کي ساڳئي نالي واري جاء تي ساڳئي ليبل سان شروع ڪيو ته جيئن اهو موجوده خدمتن ۽ داخل ٿيڻ جي تحت اچي، ۽ پوڊ کي لانچ ڪرڻ وقت اسان ليبلز کي هٿ سان هٿ ڪيو، انهن کي شروع ۾ هٽائي ڇڏيو ته جيئن درخواستن تي نه اچي. خالي RMQ، ۽ پيغامن جي هم وقت سازي کان پوءِ انھن کي واپس شامل ڪيو.

اسان ساڳي حڪمت عملي استعمال ڪئي جڏهن RabbitMQ کي نئين نسخي ۾ تبديل ٿيل ترتيب سان اپڊيٽ ڪيو - هر شيء هڪ ڪلاڪ وانگر ڪم ڪيو.

پي ايس

هن مواد جي منطقي تسلسل جي طور تي، اسان مونگو ڊي بي بابت آرٽيڪل تيار ڪري رهيا آهيون (هڪ هارڊويئر سرور کان ڪبرنيٽس ڏانهن لڏپلاڻ) ۽ MySQL (ڪيئن اسان هن ڊي بي ايم ايس کي ڪبرنيٽس اندر تيار ڪندا آهيون). اهي ايندڙ مهينن ۾ شايع ڪيا ويندا.

پي پي ايس

اسان جي بلاگ تي پڻ پڙهو:

جو ذريعو: www.habr.com

تبصرو شامل ڪريو