Беспрекорна миграција РаббитМК-а на Кубернетес

Беспрекорна миграција РаббитМК-а на Кубернетес

РаббитМК је посредник порука написан на Ерлангу који вам омогућава да организујете кластер за превазилажење грешке са пуном репликацијом података на више чворова, где сваки чвор може да сервисира захтеве за читање и писање. Пошто имамо много Кубернетес кластера у производњи, подржавамо велики број РаббитМК инсталација и били смо суочени са потребом да пренесемо податке из једног кластера у други без застоја.

Ова операција нам је била потребна у најмање два случаја:

  1. Преношење података из РаббитМК кластера који се не налази у Кубернетес-у у нови – већ „кубернетизован“ (тј. који ради у К8с подовима) – кластер.
  2. Миграција РаббитМК-а унутар Кубернетес-а из једног именског простора у други (на пример, ако су кола ограничена просторима имена, онда за пренос инфраструктуре из једног кола у друго).

Рецепт предложен у чланку је фокусиран на ситуације (али уопште није ограничен на њих) у којима постоји стари РаббитМК кластер (на пример, од 3 чвора), који се налази или већ у К8с или на неким старим серверима. Апликација хостована на Кубернетес-у (већ тамо или у будућности) ради са њом:

Беспрекорна миграција РаббитМК-а на Кубернетес

... и пред нама је задатак да га мигрирамо у нову продукцију у Кубернетесу.

Прво ће бити описан општи приступ самој миграцији, а затим ће бити описани технички детаљи њене имплементације.

Алгоритам миграције

Прва, прелиминарна фаза пре било какве акције је да се провери да ли је режим високе доступности омогућен у старој РаббитМК инсталацији (HA). Разлог је очигледан - не желимо да изгубимо податке. Да бисте извршили ову проверу, можете отићи на РаббитМК админ панел и на картици Админ → Полициес проверите да ли је вредност подешена ha-mode: all:

Беспрекорна миграција РаббитМК-а на Кубернетес

Следећи корак је подизање новог РаббитМК кластера у Кубернетес подовима (у нашем случају, на пример, који се састоји од 3 чвора, али њихов број може бити другачији).

Након овога, спајамо стари и нови РаббитМК кластер, добијајући један кластер (од 6 чворова):

Беспрекорна миграција РаббитМК-а на Кубернетес

Покреће се процес синхронизације података између старог и новог РаббитМК кластера. Када се сви подаци синхронизују између свих чворова у кластеру, можемо пребацити апликацију да користи нови кластер:

Беспрекорна миграција РаббитМК-а на Кубернетес

Након ових операција, довољно је уклонити старе чворове из РаббитМК кластера, а потез се може сматрати завршеним:

Беспрекорна миграција РаббитМК-а на Кубернетес

Ову шему смо много пута користили у производњи. Међутим, ради наше удобности, имплементирали смо га у оквиру специјализованог система који дистрибуира стандардне РМК конфигурације у више Кубернетес кластера (за оне који су радознали: говоримо о аддон операторо чему ми тек недавно речено). У наставку ћемо представити појединачна упутства која свако може применити на својим инсталацијама како би испробао предложено решење на делу.

Хајде да пробамо у пракси

Захтеви

Детаљи су веома једноставни:

  1. Кубернетес кластер (миникубе ће такође радити);
  2. РаббитМК кластер (може се поставити на голи метал и направити као обичан кластер у Кубернетесу са званичног Хелм графикона).

За пример испод, поставио сам РМК у Кубернетес и позвао га rmq-old.

Припрема штанда

1. Преузмите Хелм графикон и мало га уредите:

helm fetch --untar stable/rabbitmq-ha

Ради погодности, постављамо лозинку, ErlangCookie и правити политику ha-allтако да су подразумевано редови синхронизовани између свих чворова РМК кластера:

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. Идите на РаббитМК админ панел, креирајте нови ред и додајте неколико порука. Они ће бити потребни како бисмо након миграције били сигурни да су сви подаци сачувани и да ништа нисмо изгубили:

Беспрекорна миграција РаббитМК-а на Кубернетес

Тестна плоча је спремна: имамо „стари“ РаббитМК са подацима које треба пренети.

Миграција РаббитМК кластера

1. Прво, хајде да применимо нови РаббитМК пријатељу именски простор са исти ErlangCookie и лозинку за корисника. Да бисмо то урадили, извршићемо горе описане операције, мењајући последњу команду за инсталирање РМК-а на следеће:

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

2. Сада морате спојити нови кластер са старим. Да бисте то урадили, идите на сваку од махуна нови РаббитМК и извршите команде:

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 пронађена је адреса једног од чворова стара РМК кластер.

Ове команде ће зауставити тренутни чвор нови РМК кластер, прикључите га на стари кластер и поново га покрените.

3. РМК кластер од 6 чворова је спреман:

Беспрекорна миграција РаббитМК-а на Кубернетес

Морате сачекати док се поруке синхронизују између свих чворова. Није тешко претпоставити да време синхронизације порука зависи од капацитета хардвера на коме је кластер распоређен и од броја порука. У описаном сценарију има их само 10, тако да су подаци синхронизовани тренутно, али са довољно великим бројем порука, синхронизација може трајати сатима.

Дакле, статус синхронизације:

Беспрекорна миграција РаббитМК-а на Кубернетес

Овде +5 значи да су поруке већ унутра више на 5 чворова (осим онога што је назначено у пољу Node). Дакле, синхронизација је успела.

4. Остаје само да пребаците РМК адресу у апликацији на нови кластер (конкретне радње овде зависе од технолошког стека који користите и других специфичности апликације), након чега се можете опростити од старе.

За последњу операцију (тј. већ после пребацивање апликације у нови кластер) идите на сваки чвор стара кластер и извршите команде:

rabbitmqctl stop_app
rabbitmqctl reset

Кластер је „заборавио“ на старе чворове: можете да избришете стари РМК, у ком тренутку ће прелазак бити завршен.

Приметити: Ако користите РМК са сертификатима, ништа се суштински не мења - процес селидбе ће се одвијати потпуно исто.

Налази

Описана шема је погодна за скоро све случајеве када треба да мигрирамо РаббитМК или једноставно пређемо на нови кластер.

У нашем случају, тешкоће су се појавиле само једном, када се РМК приступало са много места, а ми нисмо свуда имали прилику да променимо РМК адресу у нову. Затим смо покренули нови РМК у истом именском простору са истим ознакама како би потпадао под постојеће сервисе и улазе, а приликом покретања под-а ручно смо манипулисали ознакама, уклањајући их на почетку како захтеви не би падали на испразните РМК и вратите их након што се поруке синхронизују.

Користили смо исту стратегију када смо ажурирали РаббитМК на нову верзију са промењеном конфигурацијом - све је функционисало као сат.

ПС

Као логичан наставак овог материјала, припремамо чланке о МонгоДБ-у (прелазак са хардверског сервера на Кубернетес) и МиСКЛ-у (како припремамо овај ДБМС унутар Кубернетес-а). Они ће бити објављени у наредним месецима.

Ппс

Прочитајте и на нашем блогу:

Извор: ввв.хабр.цом

Додај коментар