Seamless RabbitMQ sa Kubernetes nga paglalin

Seamless RabbitMQ sa Kubernetes nga paglalin

Ang RabbitMQ usa ka message broker nga gisulat sa Erlang nga nagtugot kanimo sa pag-organisar sa usa ka failover cluster nga adunay bug-os nga pagkopya sa datos sa daghang mga node, diin ang matag node mahimong magserbisyo sa pagbasa ug pagsulat sa mga hangyo. Pagbaton ug daghang Kubernetes clusters sa production operation, among gisuportahan ang daghang gidaghanon sa RabbitMQ installations ug nag-atubang sa panginahanglan sa pagbalhin sa data gikan sa usa ka cluster ngadto sa lain nga walay downtime.

Kinahanglan namon kini nga operasyon sa labing menos duha ka mga kaso:

  1. Pagbalhin sa datos gikan sa RabbitMQ cluster nga wala mahimutang sa Kubernetes ngadto sa bag-o - na "kubernetized" (ie naglihok sa K8s pods) - cluster.
  2. Paglalin sa RabbitMQ sulod sa Kubernetes gikan sa usa ka namespace ngadto sa lain (pananglitan, kung ang mga sirkito gilimitahan sa mga namespaces, unya sa pagbalhin sa imprastraktura gikan sa usa ka sirkito ngadto sa lain).

Ang resipe nga gisugyot sa artikulo naka-focus sa mga sitwasyon (apan dili limitado sa kanila) diin adunay usa ka karaang RabbitMQ cluster (pananglitan, sa 3 nodes), nga nahimutang na sa K8s o sa pipila ka daan nga mga server. Usa ka aplikasyon nga gi-host sa Kubernetes (naa na o sa umaabot) nagtrabaho kauban niini:

Seamless RabbitMQ sa Kubernetes nga paglalin

... ug nag-atubang kami sa tahas sa pagbalhin niini sa bag-ong produksiyon sa Kubernetes.

Una, ang kinatibuk-ang pamaagi sa paglalin mismo ihulagway, ug pagkahuman ang teknikal nga mga detalye sa pagpatuman niini ihulagway.

Algoritmo sa paglalin

Ang una, preliminary, yugto sa wala pa ang bisan unsang aksyon mao ang pagsusi nga ang high availability mode gipalihok sa daan nga pag-instalar sa RabbitMQ (HA). Ang hinungdan klaro - dili namon gusto nga mawala ang bisan unsang datos. Aron mahimo kini nga pagsusi, mahimo kang moadto sa RabbitMQ admin panel ug sa Admin β†’ Policies tab siguruha nga ang kantidad gitakda ha-mode: all:

Seamless RabbitMQ sa Kubernetes nga paglalin

Ang sunod nga lakang mao ang pagpataas sa usa ka bag-ong RabbitMQ cluster sa Kubernetes pods (sa among kaso, pananglitan, naglangkob sa 3 nodes, apan ang ilang gidaghanon mahimong lahi).

Human niini, gihiusa namo ang daan ug bag-ong RabbitMQ clusters, nga makakuha og usa ka cluster (sa 6 ka node):

Seamless RabbitMQ sa Kubernetes nga paglalin

Ang proseso sa pag-synchronize sa datos tali sa daan ug bag-ong RabbitMQ clusters gisugdan. Kung ang tanan nga datos ma-synchronize tali sa tanan nga mga node sa cluster, mahimo namong ibalhin ang aplikasyon aron magamit ang bag-ong cluster:

Seamless RabbitMQ sa Kubernetes nga paglalin

Pagkahuman niini nga mga operasyon, igo na nga tangtangon ang daan nga mga node gikan sa cluster sa RabbitMQ, ug ang paglihok mahimong makonsiderar nga kompleto:

Seamless RabbitMQ sa Kubernetes nga paglalin

Gigamit namon kini nga laraw sa daghang mga higayon sa produksiyon. Bisan pa, alang sa among kaugalingon nga kasayon, among gipatuman kini sulod sa usa ka espesyal nga sistema nga nag-apod-apod sa mga standard nga RMQ nga mga pag-configure sa daghang mga kumpol sa Kubernetes. (para sa mga interesado: among gihisgutan addon-operatormahitungod sa diin kita bag-o lang gisulti). Sa ubos among ipresentar ang tagsa-tagsa nga mga instruksyon nga mahimong magamit ni bisan kinsa sa ilang mga instalasyon aron sulayan ang gisugyot nga solusyon sa aksyon.

Atong sulayan kini sa praktis

mga kinahanglanon

Ang mga detalye yano ra kaayo:

  1. Kubernetes cluster (magtrabaho usab ang minikube);
  2. RabbitMQ cluster (mahimong i-deploy sa hubo nga metal, ug himoon sama sa regular nga cluster sa Kubernetes gikan sa opisyal nga Helm chart).

Alang sa panig-ingnan sa ubos, akong gi-deploy ang RMQ sa Kubernetes ug gitawag kini rmq-old.

Pag-andam sa pagbarug

1. I-download ang Helm chart ug usba kini og gamay:

helm fetch --untar stable/rabbitmq-ha

Alang sa kasayon, nagbutang kami usa ka password, ErlangCookie ug paghimo sa politika ha-allaron sa default ang mga pila gi-synchronize tali sa tanan nga mga node sa RMQ cluster:

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. I-install ang tsart:

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

3. Adto sa RabbitMQ admin panel, paghimo og bag-ong pila ug pagdugang og daghang mga mensahe. Kinahanglanon sila aron pagkahuman sa paglalin masiguro namon nga ang tanan nga datos napreserbar ug wala kami nawala bisan unsa:

Seamless RabbitMQ sa Kubernetes nga paglalin

Andam na ang test bench: kami adunay "daan" nga RabbitMQ nga adunay mga datos nga kinahanglan ibalhin.

Pagbalhin sa RabbitMQ cluster

1. Una, atong i-deploy ang bag-ong RabbitMQ sa higala namespace nga adunay parehas ra ErlangCookie ug password alang sa user. Aron mahimo kini, buhaton namon ang mga operasyon nga gihulagway sa ibabaw, nga gibag-o ang katapusan nga mando alang sa pag-install sa RMQ sa mosunod:

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

2. Karon kinahanglan nimo nga iusa ang bag-ong cluster sa daan. Aron mahimo kini, adto sa matag usa sa mga pods bag-o nga RabbitMQ ug ipatuman ang mga sugo:

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

Sa usa ka variable OLD_RMQ ang adres sa usa sa mga node makita tigulang na RMQ cluster.

Kini nga mga sugo mohunong sa kasamtangan nga node bag-o nga RMQ cluster, ilakip kini sa daan nga cluster ug ilunsad kini pag-usab.

3. Andam na ang RMQ cluster sa 6 ka node:

Seamless RabbitMQ sa Kubernetes nga paglalin

Kinahanglan ka maghulat samtang ang mga mensahe gi-synchronize tali sa tanan nga mga node. Dili lisud ang pagtag-an nga ang oras sa pag-synchronize sa mensahe nagdepende sa kapasidad sa hardware diin ang cluster gibutang ug sa gidaghanon sa mga mensahe. Sa gihulagway nga senaryo, adunay 10 ra niini, mao nga ang datos gi-synchronize dayon, apan sa igo nga gidaghanon sa mga mensahe, ang pag-synchronize mahimong molungtad sa daghang oras.

Busa, ang kahimtang sa pag-synchronize:

Seamless RabbitMQ sa Kubernetes nga paglalin

kini mao ang +5 nagpasabot nga naa na ang mga mensahe pa sa 5 nodes (gawas sa gipakita sa field Node). Sa ingon, malampuson ang pag-synchronize.

4. Ang nahabilin mao ang pagbalhin sa RMQ nga adres sa aplikasyon sa bag-ong cluster (ang piho nga mga aksyon dinhi nagdepende sa stack sa teknolohiya nga imong gigamit ug uban pang mga espesipiko sa aplikasyon), pagkahuman mahimo ka nga magpaalam sa daan.

Alang sa katapusang operasyon (ie human sa pagbalhin sa aplikasyon ngadto sa bag-ong cluster) adto sa matag node tigulang na cluster ug ipatuman ang mga sugo:

rabbitmqctl stop_app
rabbitmqctl reset

Ang cluster "nakalimtan" bahin sa mga daan nga node: mahimo nimong papason ang daan nga RMQ, kung diin mahuman ang paglihok.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Kung gigamit nimo ang RMQ nga adunay mga sertipiko, nan wala’y sukaranan nga pagbag-o - ang proseso sa paglihok himuon nga parehas.

kaplag

Ang gihulagway nga laraw angay alang sa hapit tanan nga mga kaso kung kinahanglan naton nga ibalhin ang RabbitMQ o yano nga mobalhin sa usa ka bag-ong cluster.

Sa among kaso, ang mga kalisud mitungha lamang kausa, sa dihang ang RMQ na-access gikan sa daghang mga dapit, ug wala kami'y oportunidad nga usbon ang RMQ address ngadto sa bag-o bisan asa. Dayon naglunsad kami og bag-ong RMQ sa samang namespace nga adunay parehas nga mga label aron kini mahulog ubos sa kasamtangan nga mga serbisyo ug Ingresses, ug sa paglansad sa pod among gimaniobra ang mga label pinaagi sa kamot, gikuha kini sa sinugdanan aron ang mga hangyo dili mahulog sa walay sulod nga RMQ, ug idugang kini pagbalik human ma-synchronize ang mga mensahe.

Gigamit namon ang parehas nga estratehiya kung gi-update ang RabbitMQ sa usa ka bag-ong bersyon nga adunay nabag-o nga pagsumpo - ang tanan nagtrabaho sama sa usa ka orasan.

PS

Isip usa ka lohikal nga pagpadayon niini nga materyal, nag-andam kami og mga artikulo mahitungod sa MongoDB (paglalin gikan sa hardware server ngadto sa Kubernetes) ug MySQL (kung giunsa namo pag-andam kini nga DBMS sulod sa Kubernetes). I-publish kini sa umaabot nga mga bulan.

PPS

Basaha usab sa among blog:

Source: www.habr.com

Idugang sa usa ka comment