Ka neʻe ʻana o RabbitMQ i nā Kubernetes

Ka neʻe ʻana o RabbitMQ i nā Kubernetes

ʻO RabbitMQ kahi mea kūʻai leka i kākau ʻia ma Erlang e hiki ai iā ʻoe ke hoʻonohonoho i kahi hui failover me ka hoʻopiʻi ʻana i ka ʻikepili piha ma waena o nā node he nui, kahi e lawelawe ai kēlā me kēia node i nā noi heluhelu a kākau. No ka nui o nā pūʻulu Kubernetes i ka hana hana, kākoʻo mākou i kahi helu nui o nā hoʻonohonoho RabbitMQ a ke alo nei mākou i ka pono e neʻe i ka ʻikepili mai kahi pūʻulu a i kekahi me ka ʻole o ka manawa hoʻomaha.

Pono mākou i kēia hana i ʻelua mau hihia:

  1. Ka hoʻololi ʻana i ka ʻikepili mai kahi pūʻulu RabbitMQ ʻaʻole i loaʻa ma Kubernetes i kahi hou - ua "kubernetized" mua (ʻo ia hoʻi ka hana ʻana ma nā K8s pods) - cluster.
  2. ʻO ka neʻe ʻana o RabbitMQ i loko o nā Kubernetes mai kahi inoa inoa a i kekahi (no ka laʻana, inā hoʻokaʻawale ʻia nā kaʻapuni e nā inoa, a laila e hoʻololi i nā ʻōnaehana mai kahi kaapuni i kekahi).

ʻO ka mea ʻai i manaʻo ʻia i loko o ka ʻatikala e pili ana i nā kūlana (akā ʻaʻole i kaupalena ʻia iā lākou) aia kahi pūʻulu RabbitMQ kahiko (no ka laʻana, he 3 nodes), aia ma K8 a i ʻole ma kekahi mau kikowaena kahiko. ʻO kahi noi i mālama ʻia ma Kubernetes (ma laila a i ʻole e hiki mai ana) e hana pū me ia:

Ka neʻe ʻana o RabbitMQ i nā Kubernetes

... a ke alo nei mākou i ka hana o ka neʻe ʻana i ka hana hou ma Kubernetes.

ʻO ka mea mua, e wehewehe ʻia ke ala maʻamau i ka neʻe ʻana, a ma hope o ia e wehewehe ʻia nā kikoʻī loea o kāna hoʻokō.

Alimigration algorithm

ʻO ka hana mua, mua, ma mua o ka hana ʻana, ʻo ia ka nānā ʻana i hiki ke hoʻohana ʻia ke ʻano kiʻekiʻe loa i ka hoʻonohonoho RabbitMQ kahiko (HA). Ua maopopo ke kumu - ʻaʻole makemake mākou e nalowale i kekahi ʻikepili. No ka hoʻokō ʻana i kēia loiloi, hiki iā ʻoe ke hele i ka RabbitMQ admin panel a ma ka Admin → Policies tab e hōʻoia i ka hoʻonohonoho ʻana o ka waiwai. ha-mode: all:

Ka neʻe ʻana o RabbitMQ i nā Kubernetes

ʻO ka hana aʻe e hoʻāla i kahi hui RabbitMQ hou i nā pods Kubernetes (i kā mākou hihia, no ka laʻana, he 3 nodes, akā ʻokoʻa paha kā lākou helu).

Ma hope o kēia, hoʻohui mākou i nā pūʻulu RabbitMQ kahiko a me ka hou, e loaʻa i kahi pūʻulu hoʻokahi (ʻo 6 nodes):

Ka neʻe ʻana o RabbitMQ i nā Kubernetes

Hoʻomaka ʻia ke kaʻina hana o ka ʻikepili ma waena o nā pūʻulu RabbitMQ kahiko a hou. Ke hoʻonohonoho ʻia nā ʻikepili āpau ma waena o nā node āpau i ka pūʻulu, hiki iā mākou ke hoʻololi i ka noi e hoʻohana i ka pūʻulu hou:

Ka neʻe ʻana o RabbitMQ i nā Kubernetes

Ma hope o kēia mau hana, ua lawa ka wehe ʻana i nā nodes kahiko mai ka pūʻulu RabbitMQ, a hiki ke noʻonoʻo ʻia ka neʻe ʻana.

Ka neʻe ʻana o RabbitMQ i nā Kubernetes

Ua hoʻohana pinepine mākou i kēia papahana i ka hana. Eia nō naʻe, no ko mākou ʻoluʻolu, ua hoʻokō mākou iā ia i loko o kahi ʻōnaehana kūikawā e puʻunaue ana i nā hoʻonohonoho RMQ maʻamau ma nā hui Kubernetes he nui. (no ka poʻe hoihoi: ke kamaʻilio nei mākou mea hoʻohana addone pili ana iā mākou i haiia mai nei). Ma lalo mākou e hōʻike i nā ʻōlelo aʻoaʻo i hiki i kekahi ke hoʻohana i kā lākou hoʻonohonoho e hoʻāʻo i ka hopena i manaʻo ʻia i ka hana.

E ho'āʻo kākou ma ka hoʻomaʻamaʻa

koi

He mea maʻalahi loa nā kikoʻī:

  1. Hui Kubernetes (e hana pū ka minikube);
  2. ʻO ka pūʻulu RabbitMQ (hiki ke kau ʻia ma ka metala ʻole, a hana ʻia e like me ka pūʻulu maʻamau ma Kubernetes mai ka pakuhi Helm kūhelu).

No ka laʻana ma lalo nei, ua kau au iā RMQ i Kubernetes a kāhea aku rmq-old.

Hoʻomākaukau kū

1. Hoʻoiho i ka pakuhi Helm a hoʻoponopono iki:

helm fetch --untar stable/rabbitmq-ha

No ka maʻalahi, hoʻonoho mākou i kahi ʻōlelo huna, ErlangCookie a hana i ka politika ha-allno laila, ma ka paʻamau, ua hoʻonohonoho ʻia nā queues ma waena o nā nodes āpau o ka pūʻulu 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. E hoʻouka i ka pakuhi:

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

3. E hele i ka RabbitMQ admin panel, hana i kahi pila hou a hoʻohui i kekahi mau memo. Pono lākou ma hope o ka neʻe ʻana e hiki iā mākou ke hōʻoia e mālama ʻia nā ʻikepili āpau a ʻaʻole i nalowale kekahi mea:

Ka neʻe ʻana o RabbitMQ i nā Kubernetes

Ua mākaukau ka papa hoʻāʻo: loaʻa iā mākou ka RabbitMQ "kahiko" me nā ʻikepili e pono e hoʻololi.

Ke neʻe nei i kahi pūʻulu RabbitMQ

1. ʻO ka mua, e hoʻokomo i ka RabbitMQ hou i loko hoa papa inoa me like ErlangCookie a me ka ʻōlelo huna no ka mea hoʻohana. No ka hana ʻana i kēia, e hana mākou i nā hana i hōʻike ʻia ma luna, e hoʻololi i ke kauoha hope no ka hoʻokomo ʻana iā RMQ i kēia:

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

2. I kēia manawa pono ʻoe e hoʻohui i ka hui hou me ka mea kahiko. No ka hana ʻana i kēia, e hele i kēlā me kēia pā hou RabbitMQ a hoʻokō i nā kauoha:

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

Ma ka loli OLD_RMQ ʻike ʻia ka helu wahi o kekahi o nā node kahiko Huina RMQ.

Na kēia mau kauoha e hoʻopau i ka node o kēia manawa hou ʻO ka pūʻulu RMQ, e hoʻopili i ka pūʻulu kahiko a hoʻomaka hou.

3. Ua mākaukau ka pūʻulu RMQ o 6 nodes:

Ka neʻe ʻana o RabbitMQ i nā Kubernetes

Pono ʻoe e kali i ka wā e hui pū ʻia ai nā memo ma waena o nā node a pau. ʻAʻole paʻakikī ke koho e pili ana ka manawa hoʻonohonoho memo i ka hiki o ka hāmeʻa kahi i kau ʻia ai ka pūʻulu a me ka helu o nā memo. Ma ka hōʻike i wehewehe ʻia, aia wale nō he 10 o lākou, no laila ua hoʻonohonoho koke ʻia ka ʻikepili, akā me ka nui o nā memo, hiki ke hoʻonohonoho ʻia no nā hola.

No laila, ke kūlana synchronization:

Ka neʻe ʻana o RabbitMQ i nā Kubernetes

he mea +5 ʻo ia hoʻi, ua komo nā memo nui aʻe ma 5 nodes (koe wale no ka mea i hōʻike ʻia ma ke kahua Node). No laila, ua holomua ka hoʻonohonoho ʻana.

4. ʻO nā mea a pau e koe, ʻo ia ke hoʻololi i ka helu RMQ ma ka noi i ka hui hou (ʻo nā hana kikoʻī ma aneʻi e pili ana i ka ʻenehana ʻenehana āu e hoʻohana nei a me nā kikoʻī noiʻi ʻē aʻe), a laila hiki iā ʻoe ke haʻi aku i ka mea kahiko.

No ka hana hope loa (ʻo ia hoʻi mahope ke hoʻololi i ka noi i kahi hui hou) hele i kēlā me kēia node kahiko cluster a hoʻokō i nā kauoha:

rabbitmqctl stop_app
rabbitmqctl reset

Ua "poina" ka puʻupuʻu e pili ana i nā nodes kahiko: hiki iā ʻoe ke holoi i ka RMQ kahiko, ma ia manawa e pau ai ka neʻe.

i hoʻopuka: Inā ʻoe e hoʻohana i ka RMQ me nā palapala hōʻoia, a laila ʻaʻohe mea e loli maoli - e hoʻokō ʻia ke kaʻina neʻe.

haʻina

Ua kūpono ka papahana i wehewehe ʻia no nā hihia āpau ke pono mākou e neʻe iā RabbitMQ a i ʻole e neʻe wale i kahi hui hou.

I ko mākou hihia, hoʻokahi wale nō pilikia, i ka wā i loaʻa ai ka RMQ mai nā wahi he nui, a ʻaʻole i loaʻa iā mākou ka manawa e hoʻololi i ka helu RMQ i kahi hou ma nā wahi āpau. A laila ua hoʻokumu mākou i kahi RMQ hou i ka inoa inoa like me nā lepili like i hāʻule i lalo o nā lawelawe e kū nei a me Ingresses, a i ka hoʻomaka ʻana o ka pod ua hoʻopunipuni mākou i nā lepili ma ka lima, e wehe iā lākou i ka hoʻomaka ʻana i ʻole e hāʻule nā ​​noi ma ka ʻAʻohe RMQ, a hoʻohui iā lākou ma hope o ka hoʻonohonoho ʻana o nā memo.

Ua hoʻohana mākou i ka hoʻolālā like i ka wā e hoʻonui ai iā RabbitMQ i kahi mana hou me kahi hoʻonohonoho hoʻololi - hana nā mea a pau e like me ka uaki.

PS

Ma ke ʻano he hoʻomau kūpono o kēia mea, ke hoʻomākaukau nei mākou i nā ʻatikala e pili ana iā MongoDB (ka neʻe ʻana mai kahi kikowaena lako i Kubernetes) a me MySQL (pehea mākou e hoʻomākaukau ai i kēia DBMS i loko o Kubernetes). E paʻi ʻia lākou i nā mahina e hiki mai ana.

PPS

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka