Kompleksne RabbitMQ migratsioon Kubernetesesse

Kompleksne RabbitMQ migratsioon Kubernetesesse

RabbitMQ on Erlangi kirjutatud sĂ”numibroker, mis vĂ”imaldab organiseerida talitlushĂ€ireteta klastrit tĂ€ieliku andmete replikatsiooniga mitmele sĂ”lmele, kus iga sĂ”lm suudab teenindada lugemis- ja kirjutamissoove. Olles tootes mitmeid Kubernetes klastri, toetame suurt hulka RabbitMQ paigaldisi ja seisime silmitsi vajadusega migreerida andmed ĂŒhest klastrist teise ilma seiskumiseta.

See operatsioon oli vajalik meile vÀhemalt kahe juhtumi puhul:

  1. Andmete ĂŒleviimine RabbitMQ klastrist, mis ei asu Kuberneteses, uude - juba „kuberneeritud“ (st toimiv K8s pod'ides) - klastrisse.
  2. RabbitMQ migratsioon Kuberneteses ĂŒhe nimede ruumist teise (nĂ€iteks, kui piirid on jagatud nimede ruumide kaudu, siis infrastruktuuri ĂŒleviimiseks ĂŒhest piirist teise).

Artiklis pakutud retsept on suunatud olukordadele (aga mitte ainult neile), kus on vana RabbitMQ klaster (nÀiteks koosneb 3 sÔlmest), mis asub kas K8s-is vÔi mÔnel vanemal serveril. Selle kallal töötab rakendus, mis on paigutatud Kubernetesesse (kas juba seal vÔi perspektiivis):

Kompleksne RabbitMQ migratsioon Kubernetesesse


 ja meie ees on ĂŒlesanne migreerida see uude produktsiooni Kubernetesesse.

Esiteks kirjeldatakse ĂŒldist lĂ€henemist migreerimisele, seejĂ€rel tehnilisi ĂŒksikasju selle rakendamisest.

Migreerimise algoritm

Esimene, eelnev etapp enne igasuguseid tegevusi - kontrollimine, et vanas RabbitMQ paigalduses on aktiveeritud kĂ”rge saadavuse reĆŸiim (HA). PĂ”hjus on ilmne - me ei soovi kaotada andmeid. Selle kontrollimiseks saab siseneda RabbitMQ administraatori paneeli ja vahekaardil Admin → Policies veenduda, et vÀÀrtus on seatud ha-mode: all:

Kompleksne RabbitMQ migratsioon Kubernetesesse

JĂ€rgmine samm - tĂ”stame ĂŒles uue RabbitMQ klastris pod'ides Kuberneteses (nĂ€iteks koosnedes 3 sĂ”lmest, kuid neid vĂ”ib olla ka teisi).

PĂ€rast seda ĂŒhendame vana ja uue RabbitMQ klastrid, saades ĂŒhe klastrisse (6 sĂ”lme):

Kompleksne RabbitMQ migratsioon Kubernetesesse

Algatatakse andmete sĂŒnkroonimise protsess vana ja uue RabbitMQ klastrite vahel. PĂ€rast seda, kui kĂ”ik andmed sĂŒnkroniseeritakse nii, et kĂ”ik sĂ”lmed klastris, saame rakenduse suunata kasutama uut klastrit:

Kompleksne RabbitMQ migratsioon Kubernetesesse

PÀrast neid toiminguid piisab, kui vÔtta RabbitMQ klastri vanad sÔlmed vÀlja ja kolimine vÔib lugeda lÔpetatuks:

Kompleksne RabbitMQ migratsioon Kubernetesesse

Seda me oleme korduvalt kasutanud meie tootmises. Kuid enda mugavuse huvides rakendasime selle spetsialiseeritud sĂŒsteemi raames, mis levitab tĂŒĂŒpilisi RMQ konfiguratsioone paljudele Kubernetes klastritele. (neile, kellel on huvi: rÀÀgime addon-operator, millest me hiljuti rÀÀkisime.)Allpool on esitatud eraldi juhised, mida igaĂŒks saab rakendada oma paigaldustes, et proovida pakutavat lahendust praktikas.

Proovime praktikas

NÔuded

NÔuded on vÀga lihtsad:

  1. Kubernetes klaster (sobib ka minikube);
  2. RabbitMQ klaster (vÔib olla paigaldatud bare metal'i peale vÔi loodud tavaliseks klastri Kubernetes'is ametlikust Helm-keskkonnast).

Allpool kirjeldatud nÀite jaoks paigaldasin RMQ Kubernetes'is ja nimetasime selle rmq-old.

Stendi ettevalmistamine

1. Laadime alla Helm-chart'i ja redigeerime seda veidi:

helm fetch --untar stable/rabbitmq-ha

Mugavuse huvides mÀÀrame parooli, ErlangCookie ja loome poliitika ha-all, et vaikimisi jĂ€rjekorrad sĂŒnkroniseeritakse kĂ”igi RMQ klastri sĂ”lmede vahel:

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. Paigaldame chart'i:

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

3. Siseneme RabbitMQ haldussĂŒsteemi, loome uue jĂ€rjekorra ja lisame paar sĂ”numit. Need on vajalikud, et pĂ€rast migratsiooni saaksime veenduda, et kĂ”ik andmed on sĂ€ilinud ja me ei ole midagi kaotanud:

Kompleksne RabbitMQ migratsioon Kubernetesesse

Teststend on valmis: meil on «vana» RabbitMQ andmetega, mis tuleb ĂŒle kanda.

RabbitMQ klastrite migratsioon

1. Esiteks paigaldame uue RabbitMQ teises nimetuses sama ja parooliga kasutajale. Selleks teeme ĂŒlaltoodud toimingud, muutes RMQ paigaldamise lĂ”ppkĂ€sku jĂ€rgmisele: ErlangCookie helm install . --name rmq-new --namespace rmq-new

2. NĂŒĂŒd tuleb ĂŒhendada uus klaster vanaga. Selleks siseneme igasse pod'i

uue RabbitMQ ja tÀidame kÀsud: 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

Mu variables on ĂŒhe vana RMQ klastris oleva sĂ”lme aadress. Need kĂ€sud peatavad praeguse sĂ”lme RMQ klastri, ĂŒhendavad selle vanasse klastrisse ja kĂ€ivitavad uuesti.

3. RMQ klaster, kus on 6 sÔlme, on valmis: RabbitMQ ja tÀidame kÀsud: RMQ klaster, liidetakse vanale klasterile ja kÀivitatakse uuesti.

3. RMQ klaster koosneb 6 sÔlmest ja on valmis:

Kompleksne RabbitMQ migratsioon Kubernetesesse

Peate ootama, kuni sĂ”numid sĂŒnkroonitakse kĂ”igi sĂ”lmede vahel. Ei ole raske arvata, et sĂ”numite sĂŒnkroonimise aeg sĂ”ltub klastrit kĂ€itavast riistvarast ja sĂ”numite arvust. Kirjeldatud stsenaariumis on neid ainult 10, seega andmed sĂŒnkrooniti hetkega, kuid piisavalt suures sĂ”numite arvus vĂ”ib sĂŒnkroonimine kesta tunde.

Nii et, sĂŒnkroonimise staatus:

Kompleksne RabbitMQ migratsioon Kubernetesesse

Siin +5 tĂ€hendab, et sĂ”numid on juba veel 5 sĂ”lmes (lisaks sellele, mis on mĂ€rgitud vĂ€ljale Node). Nii et, sĂŒnkroonimine lĂ€ks edukalt lĂ€bi.

4. JÀÀb vaid rakenduses RMQ aadress vahetada uuele klastrile (konkreetsed tegevused sĂ”ltuvad teie kasutatavast tehnoloogiapaagist ja muudest rakenduse eripĂ€radest), pĂ€rast mida saab vanaga hĂŒvasti jĂ€tta.

Viimase toimingu jaoks (st pĂ€rast rakenduse mĂ”nel uuele klastrile ĂŒleviimine) siseneme iga sĂ”lme Need kĂ€sud peatavad praeguse sĂ”lme klastris ja tĂ€idame kĂ€sud:

rabbitmqctl stop_app
rabbitmqctl reset

Klastril on "unustanud" vanad sÔlmed: vana RMQ-deleting ja kolimine on lÔpetatud.

MĂ€rkus: Kui kasutate RMQ-d sertifikaatidega, siis pĂ”himĂ”tteliselt ei muutu midagi — kolimisprotsess toimub tĂ€pselt samamoodi.

JĂ€reldused

Kirjeldatud skeem sobib praktiliselt kĂ”ikides olukordades, kui peame RabbitMQ-d ĂŒleviima vĂ”i lihtsalt uuele klastrile kolima.

Meie puhul tekkisid raskused vaid ĂŒks kord, kui RMQ-d kasutati paljusid kohti, ja meil ei olnud vĂ”imalust igal pool RMQ aadressi uuele vahetada. Siis kĂ€ivitasime uue RMQ sama nimekirjaga samas nimes, nii et see vastaks juba olemasolevatele teenustele ja Ingress'idele, ja kĂ€ivitasime pod'i kĂ€sitsi mĂ€rkide manipuleerimisega, eemaldades need alguses, et tĂŒhjad RMQ-le ei laekuks pĂ€ringud, ja lisades need pĂ€rast sĂ”numite sĂŒnkroonimist tagasi.

Sarnast strateegiat kasutasime RabbitMQ versiooniuuendamiseks koos muudetud konfiguratsiooniga — kĂ”ik töötas nagu kell.

P.S.

Selle teema loogilise jÀtkuna valmistame ette artikleid MongoDB (migratsioon rauaserverist Kubernetesesse) ja MySQL (kuidas me seda andmebaasi Kuberneteses valmistame). Need avaldatakse lÀhikuudel.

P.P.S.

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster