Migrazzjoni bla xkiel ta' RabbitMQ għal Kubernetes

Migrazzjoni bla xkiel ta' RabbitMQ għal Kubernetes

RabbitMQ huwa sensar ta 'messaġġi miktub f'Erlang li jippermettilek torganizza cluster ta' failover b'replikazzjoni sħiħa tad-dejta f'nodi multipli, fejn kull nodu jista 'jservi talbiet ta' qari u tikteb. Wara li ħafna raggruppamenti ta 'Kubernetes f'operazzjoni ta' produzzjoni, aħna nappoġġjaw numru kbir ta 'installazzjonijiet RabbitMQ u ffaċċjaw il-ħtieġa li jemigraw id-dejta minn raggruppament għal ieħor mingħajr ħin ta' waqfien.

Kellna din l-operazzjoni f’mill-inqas żewġ każijiet:

  1. It-trasferiment tad-dejta minn raggruppament RabbitMQ li ma jinsabx f'Kubernetes għal raggruppament ġdid - diġà "kubernetizzat" (jiġifieri li jopera f'miżwed K8s).
  2. Migrazzjoni ta 'RabbitMQ fi ħdan Kubernetes minn namespace għal ieħor (per eżempju, jekk iċ-ċirkwiti huma delimitati minn namespaces, imbagħad biex tittrasferixxi infrastruttura minn ċirkwit għal ieħor).

Ir-riċetta proposta fl-artikolu hija ffukata fuq sitwazzjonijiet (iżda m'hijiex limitata għalihom) li fihom hemm cluster RabbitMQ antik (per eżempju, ta 'nodi 3), li jinsab jew diġà f'K8s jew fuq xi servers qodma. Applikazzjoni ospitata fuq Kubernetes (diġà hemm jew fil-futur) taħdem magħha:

Migrazzjoni bla xkiel ta' RabbitMQ għal Kubernetes

... u qed iħabbtu wiċċna mal-kompitu li ngħadduha għall-produzzjoni l-ġdida f'Kubernetes.

L-ewwel, se jiġi deskritt l-approċċ ġenerali għall-migrazzjoni nnifisha, u wara se jiġu deskritti d-dettalji tekniċi tal-implimentazzjoni tagħha.

Algoritmu tal-migrazzjoni

L-ewwel stadju preliminari qabel kwalunkwe azzjoni huwa li tivverifika li l-mod ta’ disponibbiltà għolja huwa attivat fl-installazzjoni l-antika ta’ RabbitMQ (HA). Ir-raġuni hija ovvja - ma rridu nitilfu l-ebda data. Biex twettaq din il-verifika, tista 'tmur fil-pannell tal-amministrazzjoni RabbitMQ u fit-tab Amministratur → Politiki kun żgur li l-valur huwa stabbilit ha-mode: all:

Migrazzjoni bla xkiel ta' RabbitMQ għal Kubernetes

Il-pass li jmiss huwa li tqajjem cluster RabbitMQ ġdid fil-miżwed Kubernetes (fil-każ tagħna, pereżempju, li jikkonsisti f'nodi 3, iżda n-numru tagħhom jista 'jkun differenti).

Wara dan, aħna ngħaqqdu l-clusters RabbitMQ qodma u ġodda, u niksbu cluster wieħed (ta' 6 nodi):

Migrazzjoni bla xkiel ta' RabbitMQ għal Kubernetes

Jinbeda l-proċess tas-sinkronizzazzjoni tad-dejta bejn ir-raggruppamenti RabbitMQ qodma u ġodda. Ladarba d-dejta kollha tkun sinkronizzata bejn in-nodi kollha fil-cluster, nistgħu naqilbu l-applikazzjoni biex nużaw il-cluster il-ġdid:

Migrazzjoni bla xkiel ta' RabbitMQ għal Kubernetes

Wara dawn l-operazzjonijiet, huwa biżżejjed li jitneħħew in-nodi qodma mill-cluster RabbitMQ, u l-mossa tista 'titqies kompluta:

Migrazzjoni bla xkiel ta' RabbitMQ għal Kubernetes

Użajna din l-iskema ħafna drabi fil-produzzjoni. Madankollu, għall-konvenjenza tagħna stess, implimentajnaha f'sistema speċjalizzata li tqassam konfigurazzjonijiet standard RMQ f'diversi clusters ta' Kubernetes. (għal min hu kurjuż: qed nitkellmu addon-operaturdwaru aħna biss reċentement qal). Hawn taħt se nippreżentaw struzzjonijiet individwali li kulħadd jista' japplika fuq l-installazzjonijiet tiegħu biex jipprova s-soluzzjoni proposta fl-azzjoni.

Ejja nippruvawha fil-prattika

Rekwiżiti

Id-dettalji huma sempliċi ħafna:

  1. Kubernetes cluster (minikube se jaħdem ukoll);
  2. RabbitMQ cluster (jista 'jiġi skjerat fuq metall vojt, u magħmul bħal cluster regolari f'Kubernetes mit-tabella uffiċjali ta' Helm).

Għall-eżempju hawn taħt, skjerajt RMQ għal Kubernetes u sejħitlu rmq-old.

Preparazzjoni stand

1. Niżżel it-tabella ta' Helm u editjaha ftit:

helm fetch --untar stable/rabbitmq-ha

Għall-konvenjenza, aħna waqqafna password, ErlangCookie u tagħmel il-politika ha-allsabiex b'mod awtomatiku l-kjuwijiet ikunu sinkronizzati bejn in-nodi kollha tal-cluster 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. Installa ċ-ċart:

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

3. Mur fil-pannell tal-amministrazzjoni RabbitMQ, oħloq kju ġdid u żid diversi messaġġi. Se jkunu meħtieġa sabiex wara l-migrazzjoni nkunu nistgħu niżguraw li d-dejta kollha tiġi ppreservata u ma tlifna xejn:

Migrazzjoni bla xkiel ta' RabbitMQ għal Kubernetes

Il-bank tat-test huwa lest: għandna l-RabbitMQ "antik" b'dejta li teħtieġ li tiġi trasferita.

Migrazzjoni ta' cluster RabbitMQ

1. L-ewwel, ejja niskjeraw il-RabbitMQ il-ġdid fi ħabib namespace bi l-istess ErlangCookie u password għall-utent. Biex tagħmel dan, aħna se nwettqu l-operazzjonijiet deskritti hawn fuq, billi nibdlu l-kmand finali għall-installazzjoni tal-RMQ għal dan li ġej:

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

2. Issa għandek bżonn tgħaqqad il-grupp il-ġdid ma 'l-antik. Biex tagħmel dan, mur għal kull waħda mill-imżiewed ġdid RabbitMQ u wettaq il-kmandi:

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

Fil-varjabbli OLD_RMQ jinstab l-indirizz ta' wieħed min-nodi qadim cluster RMQ.

Dawn il-kmandi jwaqqfu n-node attwali ġdid Cluster RMQ, waħħalha mal-cluster l-antik u erġa niedah.

3. Il-grupp RMQ ta' 6 nodi huwa lest:

Migrazzjoni bla xkiel ta' RabbitMQ għal Kubernetes

Trid tistenna waqt li l-messaġġi jkunu sinkronizzati bejn in-nodi kollha. Mhuwiex diffiċli li wieħed isib li l-ħin tas-sinkronizzazzjoni tal-messaġġ jiddependi fuq il-kapaċità tal-hardware li fuqu jiġi skjerat il-cluster u fuq in-numru ta 'messaġġi. Fix-xenarju deskritt, hemm biss 10 minnhom, għalhekk id-dejta kienet sinkronizzata istantanjament, iżda b'numru kbir biżżejjed ta 'messaġġi, is-sinkronizzazzjoni tista' ddum għal sigħat.

Allura, l-istatus tas-sinkronizzazzjoni:

Migrazzjoni bla xkiel ta' RabbitMQ għal Kubernetes

Hawnhekk +5 tfisser messaġġi diġà qegħdin iktar fuq 5 nodi (ħlief għal dak indikat fil-field Node). Għalhekk, is-sinkronizzazzjoni kienet ta 'suċċess.

4. Jibqa 'huwa li taqleb l-indirizz RMQ fl-applikazzjoni għall-cluster il-ġdid (l-azzjonijiet speċifiċi hawn jiddependu fuq il-munzell tat-teknoloġija li qed tuża u ispeċifiċitajiet oħra tal-applikazzjoni), wara li tista' tgħid addiju għall-qadima.

Għall-aħħar operazzjoni (jiġifieri diġà wara taqleb l-applikazzjoni għal cluster ġdid) mur għal kull node qadim iggruppa u tesegwixxi l-kmandi:

rabbitmqctl stop_app
rabbitmqctl reset

Il-cluster "nesa" dwar in-nodi qodma: tista 'tħassar l-RMQ l-antik, f'liema punt il-mossa titlesta.

Innota: Jekk tuża RMQ maċ-ċertifikati, allura xejn ma jinbidel fundamentalment - il-proċess ta 'ċaqliq se jitwettaq eżattament l-istess.

Sejbiet

L-iskema deskritta hija adattata għal kważi l-każijiet kollha meta għandna bżonn nimigraw RabbitMQ jew sempliċement nimxu għal cluster ġdid.

Fil-każ tagħna, id-diffikultajiet inqalgħu darba biss, meta l-RMQ kien aċċessat minn ħafna postijiet, u ma kellniex l-opportunità li nbiddlu l-indirizz tal-RMQ għal wieħed ġdid kullimkien. Imbagħad nedejna RMQ ġdida fl-istess namespace bl-istess tikketti biex tkun taqa’ taħt is-servizzi u l-Ingresses eżistenti, u meta tnieda l-pod immanipulajna t-tikketti bl-idejn, neħħejnahom fil-bidu biex it-talbiet ma jaqgħux fuq il- vojta RMQ, u żżidhom lura wara li l-messaġġi jkunu sinkronizzati.

Aħna użajna l-istess strateġija meta naġġornaw RabbitMQ għal verżjoni ġdida b'konfigurazzjoni mibdula - kollox ħadem bħal arloġġ.

PS

Bħala kontinwazzjoni loġika ta 'dan il-materjal, qed nippreparaw artikli dwar MongoDB (migrazzjoni minn server hardware għal Kubernetes) u MySQL (kif nippreparaw dan id-DBMS ġewwa Kubernetes). Dawn se jiġu ppubblikati fix-xhur li ġejjin.

PPS

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment