Ainulaadne RabbitMQ migreerimine Kubernetesesse

Ainulaadne RabbitMQ migreerimine Kubernetesesse

RabbitMQ – Erlang keeles kirjutatud sĂ”numite vahetaja, mis vĂ”imaldab luua usaldusvÀÀrse klastriga, millel on tĂ€ielik andmete replikatsioon mitmel sĂ”lmel, kus iga sĂ”lm suudab teenindada lugemis- ja kirjutamissoove. Tootmiskeskkonnas oleme haldanud mitmeid Kubernetes klastri, mis tĂ€hendab, et toetame suurt hulka RabbitMQ paigaldusi ning oleme silmitsi seisnud vajadusega migratsioonida andmeid ĂŒhest klastrist teise katkestusteta.

See operatsioon oli vajalik meile vÀhemalt kahes olukorras:

  1. Andmete edastamine RabbitMQ klastrist, mis ei asunud Kuberneteses, uude – nĂŒĂŒd juba "kuberiseeritud" (st K8s pod'ides töötav) – klastrisse.
  2. RabbitMQ migratsioon Kuberneteses ĂŒhe nimeduse alt teise (nĂ€iteks kui piirid on jaotatud nimede jĂ€rgi, siis infrastruktuuri edastamiseks ĂŒhest piirist teise).

Artiklis pakutud retsept on suunatud olukordadele (aga mitte ainult nendele), kus on olemas vana RabbitMQ klaster (nÀiteks 3 sÔlmega), mis asub kas juba K8s-is vÔi mingitel vanadel serveritel. Sellega töötatakse rakendusega, mis on paigutatud Kubernetesesse (kas juba seal vÔi tulevikus):

Ainulaadne RabbitMQ migreerimine Kubernetesesse


 ja meie ees on ĂŒlesanne migratsiooni tegemiseks uude production keskkonda Kubernetes'is.

Esmalt kirjeldatakse ĂŒldiselt migratsiooni lĂ€henemist, seejĂ€rel jagatakse tehnilisi detaile selle rakendamise kohta.

Migratsioonialgoritm

Esimene, etapp enne mis tahes toimingute tegemist — kontrollida, et vana RabbitMQ installatsioonis on sisse lĂŒlitatud kĂ”rge kĂ€ttesaadavuse reĆŸiim (HA). PĂ”hjus on ilmne — me ei taha ju andmeid kaotada. Selle kontrollimiseks saab minna RabbitMQ adminpaneelile ja vahekaardil Admin → Policies veenduda, et vÀÀrtus on seadistatud ha-mode: all:

Ainulaadne RabbitMQ migreerimine Kubernetesesse

JĂ€rgmine samm — tĂ”stame ĂŒles uue RabbitMQ klastrite Kubernetes'i pod'id (meie puhul nĂ€iteks koosnedes 3 sĂ”lmest, kuid nende arv vĂ”ib olla ka erinev).

PĂ€rast seda ĂŒhendame vana ja uue RabbitMQ klastri, saades ĂŒhe klastrina (6 sĂ”lmega):

Ainulaadne RabbitMQ migreerimine Kubernetesesse

Algatatakse andmete sĂŒnkroonimise protsess vana ja uue RabbitMQ klastri vahel. PĂ€rast seda, kui kĂ”ik andmed on kĂ”igi sĂ”lmede vahel klastris sĂŒnkroonitud, saame rakenduse suunata uue klastri kasutamisele:

Ainulaadne RabbitMQ migreerimine Kubernetesesse

PÀrast neid toiminguid piisab, kui eemaldada RabbitMQ klastrist vanad sÔlmed, ja migratsioon on lÔpetatud:

Ainulaadne RabbitMQ migreerimine Kubernetesesse

Me oleme seda skeemi korduvalt kasutanud oma tootmises. KĂŒll aga oleme enda mugavuse huvides realiseerinud selle spetsialiseeritud sĂŒsteemi raames, mis jagab tĂŒĂŒpilisi RMQ konfiguratsioone paljude Kubernetes klastrite vahel. (neile, keda huvitab: on juttu addon-operator, millest me just hiljuti rÀÀkisime). Allpool on esitatud eraldi juhised, mida igaĂŒks saab oma installatsioonides rakendada, et proovida ettepanekut praktikas.

Proovime praktikas

NÔuded

Andmed on vÀga lihtsad:

  1. Kubernetes klaster (sobib ka minikube);
  2. RabbitMQ klaster (see vĂ”ib olla ĂŒles seatud nii bare metalil kui ka tavalisena Kubernetesis ametlikust Helm-chart'ist).

Allpool kirjeldatud nÀite jaoks olen ma seadistanud RMQ Kubernetesis ja kutsunud seda rmq-old.

Stendi ettevalmistamine

1. Lae alla Helm-chart ja tee sellest veidi muudatusi:

helm fetch --untar stable/rabbitmq-ha

Mugavuse mĂ”ttes seadistame parooli, ErlangCookie ja teeme poliitika ha-all, et vaikimisi oleksid jĂ€rjekorrad sĂŒnkroonitud kĂ”igi RMQ klastriga seotud 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. Seame diagramm:

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

3. Logi RabbitMQ admin paneeli, loo uus jÀrjekord ja lisa mÔned sÔnumid. Neid on vaja, et pÀrast migreerimist saaksime veenduda, et kÔik andmed on alles ja me midagi ei kaotanud:

Ainulaadne RabbitMQ migreerimine Kubernetesesse

Testkeskkond on valmis: meil on "vana" RabbitMQ andmetega, mis tuleb ĂŒle kanda.

RabbitMQ klastrite migreerimine

1. Alustame uue RabbitMQ kĂ€ivitamisega sĂ”braga nimede ruumis samade ErlangCookie ja kasutaja parooliga. Selleks teeme ĂŒlaltoodud operatsioonid, muutes RMQ installimise lĂ”ppkĂ€sku jĂ€rgmisega:

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

2. NĂŒĂŒd tuleb ĂŒhendada uus klaster vanaga. Selleks logime iga podi uue RabbitMQ sisse ja tĂ€idame jĂ€rgmised kĂ€sklused:

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

Muutujas OLD_RMQ on ĂŒhe vana RMQ klastrite sĂ”lme aadress. Need kĂ€sklused peatavad praeguse

RMQ klastris sÔlme, liidavad selle vana klastriga ja kÀivitavad uuesti. uue 3. RMQ klaster, mis koosneb 6 sÔlmest, on valmis:

3. RMQ klaster kuuest sÔlmest on valmis:

Ainulaadne RabbitMQ migreerimine Kubernetesesse

Peab ootama, kuni sĂ”numid sĂŒnkroniseeritakse kĂ”igi sĂ”lmpunktide vahel. Pole raske arvata, et sĂ”numite sĂŒnkroniseerimise aeg sĂ”ltub riistvara vĂ”imsusest, millel klaster on rajatud, ja sĂ”numite arvust. Kirjeldatud stsenaariumi puhul on neid vaid 10, seega andmed sĂŒnkroniseerusid kohe, kuid piisavalt suurte sĂ”numite arvu korral vĂ”ib sĂŒnkroniseerimine kesta tunde.

Nii et sĂŒnkroniseerimise staatus:

Ainulaadne RabbitMQ migreerimine Kubernetesesse

Siit +5 tĂ€hendab, et sĂ”numid on juba veel 5 sĂ”lmpunktis (vĂ€lja arvatud see, mis on nĂ€idatud vĂ€ljal SĂ”lm). Seega on sĂŒnkroniseerimine Ă”nnestunud.

4. JÀÀb vaid rakenduses RMQ aadress uuele klastrile ĂŒle lĂŒlitada (konkreetsed toimingud sĂ”ltuvad siin teie kasutatavast tehnoloogiamaastikust ja rakenduse muudest eripĂ€radest), pĂ€rast mida saab vanast lahkuda.

Viimase operatsiooni jaoks (st pĂ€rast rakenduse uuele klastrile ĂŒleminek) siseneme iga sĂ”lmpunkti RMQ klastrite sĂ”lme aadress. klastris ja tĂ€idame kĂ€sklused:

rabbitmqctl stop_app
rabbitmqctl reset

Klaster on "unustanud" vanad sÔlmed: vana RMQ vÔib eemaldada, millega kolimine on lÔpetatud.

MĂ€rkus: Kui kasutate RMQ-d koos sertifikaatidega, ei muutu pĂ”himĂ”tteliselt midagi — migratsiooniprotsess toimub tĂ€pselt nii nagu tavaliselt.

JĂ€reldused

Kirjeldatud skeem sobib peaaegu kÔikidele juhtumitele, kus peame RabbitMQ-d migreerima vÔi lihtsalt uude klastrisse liikuma.

Meie juhul tekkis probleeme ainult ĂŒks kord, kui RMQ-le pöörduti paljusid kohti, kuid meil ei olnud vĂ”imalust adresseerida RMQ-d kĂ”ikjal. Sel juhul kĂ€ivitasime uue RMQ sama nimelises ruumis sama etikettidega, et see satuks juba olemasolevate teenuste ja Ingress’ite alla ning pod’i kĂ€sitsi kĂ€ivitamisel manipuleerisime etiketiga, eemaldades need alguses, et tĂŒhja RMQ-le ei satuks pĂ€ringud, ja lisades need tagasi pĂ€rast sĂ”numite sĂŒnkroneerimist.

Sama strateegiat rakendasime RabbitMQ uuendamisel uue versiooniga, millel oli muudetud konfiguratsioon — kĂ”ik toimis nagu kellavĂ€rk.

P.S.

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

P.P.S.

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster