Migrasyon san pwoblèm nan RabbitMQ nan Kubernetes

Migrasyon san pwoblèm nan RabbitMQ nan Kubernetes

RabbitMQ se yon koutye mesaj ekri nan Erlang ki pèmèt ou òganize yon gwoup failover ak replikasyon done konplè atravè plizyè nœuds, kote chak nœuds kapab fè sèvis pou demann lekti ak ekri. Lè nou gen anpil grap Kubernetes nan operasyon pwodiksyon, nou sipòte yon gwo kantite enstalasyon RabbitMQ epi nou te fè fas ak nesesite pou imigre done ki sòti nan yon gwoup nan yon lòt san D '.

Nou te bezwen operasyon sa a nan omwen de ka:

  1. Transfere done ki sòti nan yon gwoup RabbitMQ ki pa sitiye nan Kubernetes nan yon nouvo - ki deja "kubernetized" (sa vle di opere nan gous K8s) - gwoup.
  2. Migrasyon RabbitMQ nan Kubernetes soti nan yon espas non nan yon lòt (pa egzanp, si sikui yo delimite pa espas non, Lè sa a, transfere enfrastrikti soti nan yon sikwi a yon lòt).

Se resèt la pwopoze nan atik la konsantre sou sitiyasyon (men se pa ditou limite a sa sèlman) kote gen yon ansyen gwoup RabbitMQ (pa egzanp, nan 3 nœuds), ki chita swa deja nan K8s oswa sou kèk sèvè fin vye granmoun. Yon aplikasyon ki akomode sou Kubernetes (deja la oswa nan lavni) travay avèk li:

Migrasyon san pwoblèm nan RabbitMQ nan Kubernetes

... epi nou ap fè fas ak travay la nan imigre li nan nouvo pwodiksyon an nan Kubernetes.

Premyèman, yo pral dekri apwòch jeneral nan migrasyon an tèt li, epi apre sa yo pral dekri detay teknik aplikasyon li yo.

Algorithm migrasyon

Premye etap la, preliminè, anvan nenpòt aksyon se tcheke si mòd disponiblite segondè pèmèt nan ansyen enstalasyon RabbitMQ la (HA). Rezon ki fè la se evidan - nou pa vle pèdi okenn done. Pou fè chèk sa a, ou ka ale nan panèl admin RabbitMQ ak nan Admin → Règleman tab la asire w ke valè a tabli. ha-mode: all:

Migrasyon san pwoblèm nan RabbitMQ nan Kubernetes

Pwochen etap la se ogmante yon nouvo gwoup RabbitMQ nan gous Kubernetes (nan ka nou an, pou egzanp, ki gen ladan 3 nœuds, men nimewo yo ka diferan).

Apre sa, nou rantre ansyen ak nouvo gwoup RabbitMQ yo, pou nou jwenn yon sèl gwoup (nan 6 nœuds):

Migrasyon san pwoblèm nan RabbitMQ nan Kubernetes

Pwosesis senkronizasyon done ant ansyen ak nouvo gwoup RabbitMQ yo kòmanse. Yon fwa tout done yo senkronize ant tout nœuds nan gwoup la, nou ka chanje aplikasyon an pou itilize nouvo gwoup la:

Migrasyon san pwoblèm nan RabbitMQ nan Kubernetes

Apre operasyon sa yo, li ase yo retire nœuds yo fin vye granmoun nan gwoup la RabbitMQ, epi mouvman an ka konsidere kòm konplè:

Migrasyon san pwoblèm nan RabbitMQ nan Kubernetes

Nou te itilize konplo sa a anpil fwa nan pwodiksyon an. Sepandan, pou pwòp konvenyans nou, nou aplike li nan yon sistèm espesyalize ki distribye konfigirasyon RMQ estanda atravè plizyè gwoup Kubernetes. (pou moun ki kirye: nou ap pale de addon-operatèsou ki nou jis dènyèman te di). Anba a nou pral prezante enstriksyon endividyèl ke nenpòt moun ka aplike sou enstalasyon yo eseye solisyon yo pwopoze a an aksyon.

Ann eseye li nan pratik

Kondisyon pou

Detay yo trè senp:

  1. Kubernetes gwoup (minikube ap travay tou);
  2. RabbitMQ gwoup (ka deplwaye sou metal fè, epi fè tankou yon grap regilye nan Kubernetes nan tablo ofisyèl Helm la).

Pou egzanp ki anba a, mwen te deplwaye RMQ nan Kubernetes epi mwen te rele li rmq-old.

Kanpe preparasyon

1. Telechaje tablo Helm la epi modifye li yon ti kras:

helm fetch --untar stable/rabbitmq-ha

Pou konvenyans, nou mete yon modpas, ErlangCookie epi fè politik ha-allse konsa ke pa default ke moun kap kriye yo senkronize ant tout nœuds nan gwoup la 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. Enstale tablo a:

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

3. Ale nan panèl admin RabbitMQ, kreye yon nouvo keu epi ajoute plizyè mesaj. Yo pral bezwen pou ke apre migrasyon nou ka asire w ke tout done yo konsève epi nou pa pèdi anyen:

Migrasyon san pwoblèm nan RabbitMQ nan Kubernetes

Ban tès la pare: nou gen "ansyen" RabbitMQ ak done ki bezwen transfere.

Migrasyon yon gwoup RabbitMQ

1. Premyèman, ann deplwaye nouvo RabbitMQ nan zanmi espas non ak menm ErlangCookie ak modpas pou itilizatè a. Pou fè sa, nou pral fè operasyon ki dekri pi wo a, chanje lòd final la pou enstale RMQ nan sa ki annapre yo:

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

2. Koulye a, ou bezwen rantre nouvo gwoup la ak ansyen an. Pou fè sa, ale nan chak gous yo nouvo RabbitMQ epi egzekite kòmandman yo:

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

Nan yon varyab OLD_RMQ yo jwenn adrès youn nan nœuds yo fin vye granmoun RMQ gwoup.

Kòmandman sa yo pral sispann ne aktyèl la nouvo Gwoup RMQ, tache li nan ansyen gwoup la epi lanse li ankò.

3. RMQ gwoup 6 nœuds pare:

Migrasyon san pwoblèm nan RabbitMQ nan Kubernetes

Ou dwe tann pandan mesaj yo senkronize ant tout nœuds. Li pa difisil pou devine ke tan an senkronizasyon mesaj depann sou kapasite nan pyès ki nan konpitè sou ki gwoup la deplwaye ak sou kantite mesaj. Nan senaryo ki dekri a, gen sèlman 10 nan yo, kidonk done yo te senkronize imedyatman, men ak yon kantite ase gwo mesaj, senkronizasyon ka dire pou èdtan.

Se konsa, estati a senkronizasyon:

Migrasyon san pwoblèm nan RabbitMQ nan Kubernetes

Isit la +5 vle di mesaj yo deja antre plis sou 5 nœuds (eksepte pou sa ki endike nan jaden an Node). Kidonk, senkronizasyon an te reyisi.

4. Tout sa ki rete se chanje adrès RMQ nan aplikasyon an nan nouvo gwoup la (aksyon espesifik isit la depann de pil teknoloji w ap itilize a ak lòt espesifik aplikasyon an), apre sa ou ka di orevwa nan ansyen an.

Pou dènye operasyon an (sa vle di deja apre chanje aplikasyon an nan yon nouvo gwoup) ale nan chak ne fin vye granmoun grap epi egzekite kòmandman yo:

rabbitmqctl stop_app
rabbitmqctl reset

Gwoup la "bliye" sou nœuds yo fin vye granmoun: ou ka efase fin vye granmoun RMQ a, nan ki pwen mouvman an pral fini.

Note: Si ou itilize RMQ ak sètifika, Lè sa a, pa gen anyen fondamantalman chanje - pwosesis la k ap deplase yo pral fèt egzakteman menm jan an.

Jwenn

Konplo ki dekri a apwopriye pou prèske tout ka lè nou bezwen imigre RabbitMQ oswa tou senpleman deplase nan yon nouvo gwoup.

Nan ka nou an, difikilte yo te parèt yon sèl fwa, lè yo te jwenn aksè nan RMQ soti nan anpil kote, epi nou pa t gen opòtinite pou chanje adrès RMQ la nan yon nouvo tout kote. Lè sa a, nou te lanse yon nouvo RMQ nan menm espas non ak menm etikèt yo pou li ta tonbe anba sèvis ki deja egziste ak Ingresses, epi lè lanse gous la nou manipile etikèt yo alamen, retire yo nan kòmansman an pou demann yo pa ta tonbe sou la. vid RMQ, epi ajoute yo tounen apre mesaj yo senkronize.

Nou itilize menm estrateji a lè nou mete ajou RabbitMQ nan yon nouvo vèsyon ak yon konfigirasyon chanje - tout bagay te travay tankou yon revèy.

PS

Kòm yon kontinyasyon lojik nan materyèl sa a, nou ap prepare atik sou MongoDB (migrasyon soti nan yon sèvè pyès ki nan konpitè Kubernetes) ak MySQL (ki jan nou prepare DBMS sa a andedan Kubernetes). Yo pral pibliye nan mwa kap vini yo.

P

Li tou sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè