Nahtlos Migratioun vu RabbitMQ op Kubernetes

Nahtlos Migratioun vu RabbitMQ op Kubernetes

RabbitMQ ass e Message Broker geschriwwen an Erlang, deen Iech erlaabt e Failover Cluster mat voller Datereplikatioun iwwer verschidde Wirbelen z'organiséieren, wou all Node Lies- a Schreifufroe kann servéieren. Nodeems mir vill Kubernetes Cluster an der Produktiounsoperatioun hunn, ënnerstëtzen mir eng grouss Zuel vu RabbitMQ Installatiounen a ware konfrontéiert mat der Bedierfnes fir Daten vun engem Cluster an en anert ouni Ënnerbriechung ze migréieren.

Mir hunn dës Operatioun an op d'mannst zwee Fäll gebraucht:

  1. Iwwerdroung vun Daten aus engem RabbitMQ Stärekoup deen net zu Kubernetes läit an en neien - scho "kubernetiséiert" (dh operéiert a K8s Pods) - Cluster.
  2. Migratioun vu RabbitMQ bannent Kubernetes vun engem Nummraum an en anert (zum Beispill, wann Circuiten duerch Nummraim ofgrenzt sinn, dann fir Infrastruktur vun engem Circuit an en anert ze transferéieren).

D'Rezept, déi am Artikel proposéiert gëtt, konzentréiert sech op Situatiounen (awer ass guer net op hinnen limitéiert), an deenen et en alen RabbitMQ-Cluster ass (zum Beispill vun 3 Wirbelen), déi entweder schonn an K8s oder op e puer al Serveren läit. Eng Applikatioun déi op Kubernetes gehost gëtt (schon do oder an der Zukunft) schafft domat:

Nahtlos Migratioun vu RabbitMQ op Kubernetes

... a mir stinn mat der Aufgab, et an déi nei Produktioun zu Kubernetes ze migréieren.

Als éischt gëtt d'allgemeng Approche fir d'Migratioun selwer beschriwwen, an duerno ginn d'technesch Detailer vu senger Ëmsetzung beschriwwen.

Migratioun Algorithmus

Déi éischt, virleefeg, Etapp virun all Aktioun ass ze kontrolléieren, datt héich Disponibilitéit Modus an der aler RabbitMQ Installatioun aktivéiert ass (HA). De Grond ass offensichtlech - mir wëllen keng Daten verléieren. Fir dës Scheck auszeféieren, kënnt Dir op d'RabbitMQ Admin Panel goen an an der Admin → Politiken Tab gitt sécher datt de Wäert agestallt ass ha-mode: all:

Nahtlos Migratioun vu RabbitMQ op Kubernetes

De nächste Schrëtt ass en neie RabbitMQ Cluster a Kubernetes Pods z'erhéijen (an eisem Fall, zum Beispill, besteet aus 3 Wirbelen, awer hir Zuel kann anescht sinn).

Duerno fusionéiere mir déi al an nei RabbitMQ Stärekéip, a kréien en eenzege Stärekoup (vu 6 Noden):

Nahtlos Migratioun vu RabbitMQ op Kubernetes

De Prozess vun der Datesynchroniséierung tëscht den alen an neie RabbitMQ Cluster gëtt initiéiert. Wann all Daten tëscht all Noden am Cluster synchroniséiert sinn, kënne mir d'Applikatioun wiesselen fir den neie Cluster ze benotzen:

Nahtlos Migratioun vu RabbitMQ op Kubernetes

No dësen Operatiounen ass et genuch fir déi al Wirbelen aus dem RabbitMQ Cluster ze läschen, an d'Beweegung kann als komplett ugesi ginn:

Nahtlos Migratioun vu RabbitMQ op Kubernetes

Mir hunn dëse Schema vill Mol an der Produktioun benotzt. Wéi och ëmmer, fir eis eegen Kamoudheet, hu mir et an engem spezialiséierte System implementéiert deen Standard RMQ Konfiguratiounen iwwer verschidde Kubernetes Cluster verdeelt (fir déi, déi virwëtzeg sinn: mir schwätzen iwwer addon-Operateuriwwer déi mir just viru kuerzem gesot). Drënner wäerte mir individuell Instruktioune presentéieren, déi jidderee kann op hir Installatiounen applizéieren fir déi proposéiert Léisung an Aktioun ze probéieren.

Loosst eis et an der Praxis probéieren

Ufuerderunge

D'Detailer si ganz einfach:

  1. Kubernetes Cluster (minikube wäert och schaffen);
  2. RabbitMQ Stärekoup (kann op blo Metal agesat ginn, a gemaach wéi e reguläre Stärekoup zu Kubernetes aus der offizieller Helm Chart).

Fir d'Beispill hei ënnen hunn ech RMQ op Kubernetes ofgesat an et genannt rmq-old.

Stand Virbereedung

1. Luet den Helm Chart erof an ännert et e bëssen:

helm fetch --untar stable/rabbitmq-ha

Fir d'Bequemlechkeet setzen mir e Passwuert, ErlangCookie a maachen Politik ha-allsou datt Par défaut d'Schlaangen tëscht all Node vum RMQ Cluster synchroniséiert sinn:

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. Installéiert d'Diagramm:

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

3. Gitt op d'RabbitMQ Admin Panel, erstellt eng nei Schlaang a füügt verschidde Messagen derbäi. Si wäerte gebraucht ginn fir datt mir no der Migratioun sécher sinn datt all d'Donnéeën erhale bleiwen a mir näischt verluer hunn:

Nahtlos Migratioun vu RabbitMQ op Kubernetes

D'Testbänk ass prett: mir hunn den "ale" RabbitMQ mat Daten déi iwwerdroe musse ginn.

Migréiere vun engem RabbitMQ Cluster

1. Als éischt, loosst eis den neie RabbitMQ ofsetzen an Frënd Nummraum mat selwecht ErlangCookie a Passwuert fir de Benotzer. Fir dëst ze maachen, wäerte mir déi uewe beschriwwen Operatiounen ausféieren, de leschte Kommando fir RMQ z'installéieren op déi folgend änneren:

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

2. Elo musst Dir den neie Stärekoup mat dem alen fusionéieren. Fir dëst ze maachen, gitt op jiddereng vun de Pods nei RabbitMQ an ausféieren d'Befehle:

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

An variabelen OLD_RMQ d'Adress vun engem vun de Wirbelen ass fonnt al RMQ Cluster.

Dës Kommandoen stoppen den aktuellen Node nei RMQ Stärekoup, befestegt et un déi al Stärekoup a starten et erëm.

3. RMQ Cluster vu 6 Noden ass prett:

Nahtlos Migratioun vu RabbitMQ op Kubernetes

Dir musst waarden wann Messagen tëscht all Wirbelen synchroniséiert sinn. Et ass net schwéier ze roden datt d'Synchroniséierungszäit vun der Noriicht hänkt vun der Kapazitéit vun der Hardware, op där de Stärekoup ofgesat ass, an vun der Unzuel vun de Messagen. Am beschriwwenen Szenario sinn et nëmmen 10 vun hinnen, sou datt d'Donnéeën direkt synchroniséiert goufen, awer mat enger genuch grousser Zuel vu Messagen kann d'Synchroniséierung fir Stonnen daueren.

Also, de Synchroniséierungsstatus:

Nahtlos Migratioun vu RabbitMQ op Kubernetes

et ass +5 heescht Messagen sinn schonn an méi op 5 Wirbelen (ausser dat wat am Feld uginn ass Node). Sou war d'Synchroniséierung erfollegräich.

4. Alles wat bleift ass d'RMQ Adress an der Applikatioun op den neie Stärekoup ze wiesselen (déi spezifesch Aktiounen hei hänkt vun der Technologiestack of, déi Dir benotzt an aner Applikatiounspezifesch), duerno kënnt Dir Äddi fir déi al.

Fir déi lescht Operatioun (dh scho после d'Applikatioun op en neie Cluster wiesselen) gitt op all Node al Cluster a fuert d'Befehle aus:

rabbitmqctl stop_app
rabbitmqctl reset

De Stärekoup "vergiess" iwwer déi al Wirbelen: Dir kënnt den alen RMQ läschen, op deem Punkt d'Bewegung fäerdeg ass.

Remarque: Wann Dir RMQ mat Zertifikater benotzt, da ännert näischt grondsätzlech - de Beweegungsprozess gëtt genau d'selwecht duerchgefouert.

Conclusiounen

De beschriwwenen Schema ass gëeegent fir bal all Fäll wou mir RabbitMQ mussen migréieren oder einfach an en neie Stärekoup plënneren.

An eisem Fall sinn nëmmen eng Kéier Schwieregkeeten entstanen, wann RMQ vu ville Plazen zougeruff gouf, a mir hunn net d'Méiglechkeet d'RMQ Adress iwwerall op eng nei ze änneren. Duerno hu mir en neien RMQ am selwechte Nummraum mat deene selwechte Etiketten lancéiert fir datt et ënner existéierende Servicer an Ingresses falen, a beim Start vum Pod hu mir d'Etiketten mat der Hand manipuléiert, se am Ufank ewechgeholl fir datt d'Ufroen net op der eidel RMQ, a fügen se zréck nodeems d'Messagen synchroniséiert sinn.

Mir hunn déi selwecht Strategie benotzt wann Dir RabbitMQ op eng nei Versioun aktualiséiert mat enger geännerter Konfiguratioun - alles funktionnéiert wéi eng Auer.

PS

Als logesch Fortsetzung vun dësem Material preparéiere mir Artikelen iwwer MongoDB (Migratioun vun engem Hardware-Server op Kubernetes) a MySQL (wéi mir dës DBMS bannent Kubernetes virbereeden). Si ginn an den nächste Méint publizéiert.

Pps

Liest och op eisem Blog:

Source: will.com

Setzt e Commentaire