Муҳоҷирати бефосилаи RabbitMQ ба Kubernetes

Муҳоҷирати бефосилаи RabbitMQ ба Kubernetes

RabbitMQ як брокери паёмест, ки бо забони Erlang навишта шудааст, ки ба шумо имкон медиҳад, ки кластери бебозгаштро бо такрори пурраи додаҳо дар саросари гиреҳҳо ташкил кунед, ки дар он ҳар як гиреҳ метавонад дархостҳои хондан ва навиштанро хидмат расонад. Бо доштани кластерҳои зиёди Kubernetes дар фаъолияти истеҳсолӣ, мо шумораи зиёди насбкуниҳои RabbitMQ-ро дастгирӣ мекунем ва ба зарурати интиқоли маълумот аз як кластер ба кластер бе таъхир дучор шудем.

Мо ба ин амалиёт ҳадди аққал дар ду ҳолат лозим будем:

  1. Интиқоли маълумот аз кластери RabbitMQ, ки дар Кубернетес ҷойгир нест, ба кластери нав - аллакай "кубернетизатсияшуда" (яъне дар pods K8s кор мекунад) - кластери.
  2. Муҳоҷирати RabbitMQ дар дохили Kubernetes аз як фазои ном ба фазои дигар (масалан, агар схемаҳо бо фазои номҳо ҷудо карда шаванд, пас барои интиқоли инфрасохтор аз як схема ба дигараш).

Дорухате, ки дар мақола пешниҳод шудааст, ба ҳолатҳое нигаронида шудааст (вале бо онҳо маҳдуд нест), ки дар онҳо кластери кӯҳнаи RabbitMQ мавҷуд аст (масалан, аз 3 гиреҳ), ки аллакай дар K8s ё дар баъзе серверҳои кӯҳна ҷойгир аст. Барномае, ки дар Kubernetes ҷойгир шудааст (аллакай дар он ҷо ё дар оянда) бо он кор мекунад:

Муҳоҷирати бефосилаи RabbitMQ ба Kubernetes

... ва мо вазифадорем, ки онро ба истеҳсолоти нав дар Кубернетес интиқол диҳем.

Аввалан, равиши умумии худи мухочират ва баъд аз он тафсилоти техникии амалисозии он тавсиф карда мешавад.

Алгоритми муҳоҷират

Марҳилаи аввал, пешакии пеш аз ҳама гуна амал ин тафтиш кардани он аст, ки режими дастрасии баланд дар насби кӯҳнаи RabbitMQ (HA). Сабаб маълум аст - мо намехоҳем ягон маълумотро аз даст диҳем. Барои анҷом додани ин санҷиш, шумо метавонед ба панели маъмурии RabbitMQ гузаред ва дар ҷадвали Admin → Сиёсатҳо боварӣ ҳосил кунед, ки арзиш муқаррар карда шудааст ha-mode: all:

Муҳоҷирати бефосилаи RabbitMQ ба Kubernetes

Қадами навбатӣ ин аст, ки кластери нави RabbitMQ дар қуттиҳои Kubernetes (дар ҳолати мо, масалан, аз 3 гиреҳ иборат аст, аммо шумораи онҳо метавонад гуногун бошад).

Пас аз ин, мо кластерҳои кӯҳна ва нави RabbitMQ-ро муттаҳид карда, кластери ягона ба даст меорем (аз 6 гиреҳ):

Муҳоҷирати бефосилаи RabbitMQ ба Kubernetes

Раванди ҳамоҳангсозии додаҳо байни кластерҳои кӯҳна ва нави RabbitMQ оғоз мешавад. Пас аз он ки ҳамаи маълумотҳо байни ҳамаи гиреҳҳои кластер ҳамоҳанг карда мешаванд, мо метавонем барномаро барои истифодаи кластери нав иваз кунем:

Муҳоҷирати бефосилаи RabbitMQ ба Kubernetes

Пас аз ин амалҳо, хориҷ кардани гиреҳҳои кӯҳна аз кластери RabbitMQ кифоя аст ва ҳаракатро пурра ҳисоб кардан мумкин аст:

Муҳоҷирати бефосилаи RabbitMQ ба Kubernetes

Мо ин схемаро борхо дар истехсолот истифода бурдем. Аммо, барои роҳати худ, мо онро дар доираи як системаи махсусгардонидашуда амалӣ кардем, ки конфигуратсияҳои стандартии RMQ-ро дар якчанд кластерҳои Kubernetes паҳн мекунад. (барои онхое, ки кунчкованд: сухан дар бораи addon-operatorки дар бораи он мо ба наздикй гуфтам). Дар зер мо дастурҳои инфиродӣ пешниҳод менамоем, ки ҳар кас метавонад дар насби худ истифода барад, то ҳалли пешниҳодшударо дар амал санҷад.

Биёед инро дар амал кӯшиш кунем

талаботи

Тафсилот хеле оддӣ аст:

  1. Кластери Kubernetes (minikube низ кор хоҳад кард);
  2. Кластери RabbitMQ (метавонад дар металли урён ҷойгир карда шавад ва ба мисли кластери муқаррарӣ дар Кубернетес аз диаграммаи расмии Helm сохта шавад).

Барои мисоли дар поён овардашуда, ман RMQ-ро ба Kubernetes ҷойгир кардам ва онро даъват кардам rmq-old.

Тайёр кардани стенд

1. Диаграммаи Helm-ро зеркашӣ кунед ва онро каме таҳрир кунед:

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 ба Kubernetes

Дастгоҳи санҷишӣ омода аст: мо 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. Кластери RMQ аз 6 гиреҳ омода аст:

Муҳоҷирати бефосилаи RabbitMQ ба Kubernetes

Шумо бояд интизор шавед, ки паёмҳо байни ҳамаи гиреҳҳо ҳамоҳанг карда шаванд. Тахмин кардан душвор нест, ки вақти ҳамоҳангсозии паёмҳо аз иқтидори сахтафзоре, ки кластер ҷойгир карда шудааст ва аз шумораи паёмҳо вобаста аст. Дар сенарияи тавсифшуда, танҳо 10-тои онҳо вуҷуд доранд, бинобар ин, маълумот фавран ҳамоҳанг карда шуд, аммо бо шумораи кофии зиёди паёмҳо, ҳамоҳангсозӣ метавонад соатҳо давом кунад.

Ҳамин тавр, ҳолати ҳамоҳангсозӣ:

Муҳоҷирати бефосилаи RabbitMQ ба Kubernetes

Ин аст, +5 маънои онро дорад, ки паёмҳо аллакай ворид шудаанд бештар дар 5 гиреҳ (ба истиснои он чизе, ки дар майдон нишон дода шудааст Node). Ҳамин тариқ, синхронизатсия муваффақ шуд.

4. Танҳо иваз кардани суроғаи RMQ дар барнома ба кластери нав боқӣ мемонад (амалҳои мушаххас дар ин ҷо аз стеки технологӣ ва дигар хусусиятҳои барнома вобастаанд), ки пас аз он шумо метавонед бо суроғаи кӯҳна видоъ кунед.

Барои амалиёти охирин (яъне аллакай после гузариш ба кластери нав) ба ҳар як гиреҳ гузаред сола кластер кунед ва фармонҳоро иҷро кунед:

rabbitmqctl stop_app
rabbitmqctl reset

Кластер гиреҳҳои кӯҳнаро "фаромӯш кардааст": шумо метавонед RMQ-и кӯҳнаро нест кунед, ки дар он лаҳза ҳаракат ба анҷом мерасад.

эрод гирифтан: Агар шумо RMQ-ро бо сертификатҳо истифода баред, пас ҳеҷ чиз ба таври куллӣ тағир намеёбад - раванди интиқол маҳз ҳамон тавре сурат мегирад.

натиҷаҳои

Нақшаи тавсифшуда барои қариб ҳама ҳолатҳо мувофиқ аст, ки ба мо лозим аст, ки RabbitMQ-ро интиқол диҳем ё танҳо ба кластери нав гузарем.

Дар ҳолати мо, мушкилот танҳо як маротиба ба миён омад, вақте ки ба RMQ аз бисёр ҷойҳо дастрасӣ пайдо карданд ва мо имкон надоштем, ки суроғаи RMQ-ро дар ҳама ҷо ба суроғаи нав иваз кунем. Сипас мо RMQ-и навро дар ҳамон фазои номҳо бо ҳамон тамғакоғазҳо оғоз кардем, то он зери хидматҳои мавҷуда ва воридшавӣ қарор гирад ва ҳангоми ба кор андохтани подк, мо тамғакоғазҳоро дастӣ идора карда, онҳоро дар аввал хориҷ кардем, то дархостҳо ба RMQ-ро холӣ кунед ва онҳоро пас аз ҳамоҳангсозии паёмҳо дубора илова кунед.

Мо ҳамон стратегияро ҳангоми навсозии RabbitMQ ба версияи нав бо конфигуратсияи тағирёфта истифода мебарем - ҳама чиз мисли соат кор мекард.

PS

Ҳамчун идомаи мантиқии ин мавод, мо дар бораи MongoDB (муҳоҷират аз сервери сахтафзор ба Kubernetes) ва MySQL (чи гуна мо ин DBMS-ро дар дохили Kubernetes омода мекунем) мақолаҳо омода карда истодаем. Онҳо дар моҳҳои наздик нашр хоҳанд шуд.

PPS

Инчунин дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ