குபெர்னெட்டஸுக்கு RabbitMQ இன் தடையற்ற இடம்பெயர்வு

குபெர்னெட்டஸுக்கு RabbitMQ இன் தடையற்ற இடம்பெயர்வு

RabbitMQ என்பது எர்லாங்கில் எழுதப்பட்ட ஒரு செய்தி தரகர் ஆகும், இது பல முனைகளில் முழு தரவு நகலெடுப்புடன் ஒரு தோல்வி கிளஸ்டரை ஒழுங்கமைக்க உங்களை அனுமதிக்கிறது, அங்கு ஒவ்வொரு முனையும் கோரிக்கைகளைப் படிக்கவும் எழுதவும் சேவை செய்ய முடியும். உற்பத்தி செயல்பாட்டில் பல குபெர்னெட்ஸ் கிளஸ்டர்கள் இருப்பதால், நாங்கள் அதிக எண்ணிக்கையிலான RabbitMQ நிறுவல்களை ஆதரிக்கிறோம், மேலும் வேலையில்லா நேரம் இல்லாமல் தரவை ஒரு கிளஸ்டரிலிருந்து மற்றொரு கிளஸ்டருக்கு மாற்ற வேண்டிய அவசியத்தை எதிர்கொள்கிறோம்.

குறைந்தபட்சம் இரண்டு நிகழ்வுகளில் இந்த அறுவை சிகிச்சை தேவைப்பட்டது:

  1. Kubernetes இல் இல்லாத RabbitMQ க்ளஸ்டரிலிருந்து ஒரு புதிய - ஏற்கனவே "குபெர்னெடைஸ் செய்யப்பட்ட" (அதாவது K8s காய்களில் இயங்குகிறது) - க்ளஸ்டருக்கு தரவை மாற்றுதல்.
  2. குபெர்னெட்ஸில் உள்ள RabbitMQ இன் பெயர்வெளியில் இருந்து மற்றொரு இடத்திற்கு இடம்பெயர்தல் (உதாரணமாக, சுற்றுகள் பெயர்வெளிகளால் பிரிக்கப்பட்டால், உள்கட்டமைப்பை ஒரு சுற்று இருந்து மற்றொரு சுற்றுக்கு மாற்ற).

கட்டுரையில் முன்மொழியப்பட்ட செய்முறையானது, ஏற்கனவே K3 களில் அல்லது சில பழைய சேவையகங்களில் உள்ள பழைய RabbitMQ கிளஸ்டர் (உதாரணமாக, 8 முனைகள்) உள்ள சூழ்நிலைகளில் கவனம் செலுத்துகிறது (ஆனால் அவற்றுடன் மட்டும் அல்ல). Kubernetes இல் ஹோஸ்ட் செய்யப்பட்ட ஒரு பயன்பாடு (ஏற்கனவே அல்லது எதிர்காலத்தில்) அதனுடன் வேலை செய்கிறது:

குபெர்னெட்டஸுக்கு RabbitMQ இன் தடையற்ற இடம்பெயர்வு

... மேலும் அதை குபெர்னெட்டஸில் உள்ள புதிய உற்பத்திக்கு மாற்றும் பணியை நாங்கள் எதிர்கொள்கிறோம்.

முதலில், இடம்பெயர்வுக்கான பொதுவான அணுகுமுறை விவரிக்கப்படும், அதன் பிறகு அதன் செயல்பாட்டின் தொழில்நுட்ப விவரங்கள் விவரிக்கப்படும்.

இடம்பெயர்வு அல்காரிதம்

பழைய RabbitMQ நிறுவலில் (HA) காரணம் வெளிப்படையானது - நாங்கள் எந்த தரவையும் இழக்க விரும்பவில்லை. இந்தச் சரிபார்ப்பை மேற்கொள்ள, நீங்கள் RabbitMQ நிர்வாகப் பலகத்திற்குச் சென்று, நிர்வாகி → கொள்கைகள் தாவலில் மதிப்பு அமைக்கப்பட்டிருப்பதை உறுதிசெய்யவும். ha-mode: all:

குபெர்னெட்டஸுக்கு RabbitMQ இன் தடையற்ற இடம்பெயர்வு

அடுத்த கட்டமாக, குபெர்னெட்டஸ் காய்களில் புதிய RabbitMQ கிளஸ்டரை உயர்த்துவது (எங்கள் விஷயத்தில், எடுத்துக்காட்டாக, 3 முனைகளைக் கொண்டது, ஆனால் அவற்றின் எண்ணிக்கை வேறுபட்டிருக்கலாம்).

இதற்குப் பிறகு, பழைய மற்றும் புதிய RabbitMQ கிளஸ்டர்களை ஒன்றிணைத்து, ஒரு கிளஸ்டரைப் பெறுகிறோம் (6 முனைகளில்):

குபெர்னெட்டஸுக்கு RabbitMQ இன் தடையற்ற இடம்பெயர்வு

பழைய மற்றும் புதிய RabbitMQ கிளஸ்டர்களுக்கு இடையே தரவு ஒத்திசைவு செயல்முறை தொடங்கப்பட்டது. க்ளஸ்டரில் உள்ள அனைத்து முனைகளுக்கும் இடையில் எல்லா தரவும் ஒத்திசைக்கப்பட்டவுடன், புதிய கிளஸ்டரைப் பயன்படுத்த பயன்பாட்டை மாற்றலாம்:

குபெர்னெட்டஸுக்கு RabbitMQ இன் தடையற்ற இடம்பெயர்வு

இந்த செயல்பாடுகளுக்குப் பிறகு, RabbitMQ கிளஸ்டரிலிருந்து பழைய முனைகளை அகற்றுவது போதுமானது, மேலும் நகர்வு முழுமையானதாகக் கருதலாம்:

குபெர்னெட்டஸுக்கு RabbitMQ இன் தடையற்ற இடம்பெயர்வு

இந்த திட்டத்தை நாங்கள் உற்பத்தியில் பல முறை பயன்படுத்தியுள்ளோம். எவ்வாறாயினும், எங்கள் சொந்த வசதிக்காக, பல குபெர்னெட்ஸ் கிளஸ்டர்களில் நிலையான RMQ உள்ளமைவுகளை விநியோகிக்கும் ஒரு சிறப்பு அமைப்பில் நாங்கள் அதை செயல்படுத்தினோம். (ஆர்வமுள்ளவர்களுக்கு: நாங்கள் பேசுகிறோம் addon-operatorநாம் பற்றி சமீபத்தில் சொன்னது). முன்மொழியப்பட்ட தீர்வைச் செயலில் முயற்சி செய்ய எவரும் தங்கள் நிறுவல்களில் விண்ணப்பிக்கக்கூடிய தனிப்பட்ட வழிமுறைகளை கீழே வழங்குவோம்.

அதை நடைமுறையில் முயற்சிப்போம்

தேவைகள்

விவரங்கள் மிகவும் எளிமையானவை:

  1. குபெர்னெட்ஸ் கிளஸ்டர் (மினிகுபேயும் வேலை செய்யும்);
  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) எனவே, ஒத்திசைவு வெற்றிகரமாக இருந்தது.

4. பயன்பாட்டில் உள்ள RMQ முகவரியை புதிய கிளஸ்டருக்கு மாற்றுவது மட்டுமே எஞ்சியுள்ளது (இங்கே உள்ள குறிப்பிட்ட செயல்கள் நீங்கள் பயன்படுத்தும் தொழில்நுட்ப அடுக்கு மற்றும் பிற பயன்பாட்டு விவரங்களைப் பொறுத்தது), அதன் பிறகு நீங்கள் பழையதற்கு விடைபெறலாம்.

கடைசி செயல்பாட்டிற்கு (அதாவது ஏற்கனவே после பயன்பாட்டை ஒரு புதிய கிளஸ்டருக்கு மாற்றுதல்) ஒவ்வொரு முனைக்கும் செல்லவும் பழைய கட்டளைகளை கிளஸ்டர் செய்து இயக்கவும்:

rabbitmqctl stop_app
rabbitmqctl reset

கிளஸ்டர் பழைய முனைகளைப் பற்றி "மறந்துவிட்டது": நீங்கள் பழைய RMQ ஐ நீக்கலாம், அந்த நேரத்தில் நகர்வு நிறைவடையும்.

கருத்து: நீங்கள் சான்றிதழ்களுடன் RMQ ஐப் பயன்படுத்தினால், அடிப்படையில் எதுவும் மாறாது - நகரும் செயல்முறை சரியாகவே மேற்கொள்ளப்படும்.

கண்டுபிடிப்புகள்

RabbitMQ ஐ நகர்த்த அல்லது புதிய கிளஸ்டருக்கு செல்ல வேண்டியிருக்கும் போது விவரிக்கப்பட்ட திட்டம் கிட்டத்தட்ட எல்லா நிகழ்வுகளுக்கும் ஏற்றது.

எங்கள் விஷயத்தில், RMQ பல இடங்களிலிருந்து அணுகப்பட்டபோது, ​​ஒருமுறை மட்டுமே சிரமங்கள் எழுந்தன, மேலும் RMQ முகவரியை எல்லா இடங்களிலும் புதியதாக மாற்ற எங்களுக்கு வாய்ப்பு இல்லை. பின்னர் அதே லேபிள்களுடன் அதே பெயர்வெளியில் புதிய RMQ ஐத் தொடங்கினோம், அதனால் அது ஏற்கனவே உள்ள சேவைகள் மற்றும் நுழைவுகளின் கீழ் வரும், மேலும் பாட் தொடங்கும் போது லேபிள்களை கையால் கையாண்டோம், தொடக்கத்தில் கோரிக்கைகள் வராமல் இருக்க அவற்றை அகற்றினோம். RMQ காலியாகி, செய்திகள் ஒத்திசைக்கப்பட்ட பிறகு அவற்றை மீண்டும் சேர்க்கிறது.

மாற்றப்பட்ட உள்ளமைவுடன் புதிய பதிப்பிற்கு RabbitMQ ஐப் புதுப்பிக்கும்போது அதே உத்தியைப் பயன்படுத்தினோம் - எல்லாமே ஒரு கடிகாரத்தைப் போல வேலை செய்தன.

சோசலிஸ்ட் கட்சி

இந்த பொருளின் தர்க்கரீதியான தொடர்ச்சியாக, MongoDB (வன்பொருள் சேவையகத்திலிருந்து Kubernetes க்கு இடம்பெயர்தல்) மற்றும் MySQL (குபெர்னெட்டஸில் இந்த DBMS ஐ எவ்வாறு தயார் செய்கிறோம்) பற்றிய கட்டுரைகளை நாங்கள் தயார் செய்கிறோம். அவை வரும் மாதங்களில் வெளியிடப்படும்.

பிபிஎஸ்

எங்கள் வலைப்பதிவிலும் படிக்கவும்:

ஆதாரம்: www.habr.com

கருத்தைச் சேர்