Seamless tsiv teb tsaws ntawm RabbitMQ rau Kubernetes

Seamless tsiv teb tsaws ntawm RabbitMQ rau Kubernetes

RabbitMQ yog tus kws tshaj lij xov xwm sau hauv Erlang uas tso cai rau koj los teeb tsa qhov kev ua tsis tiav nrog cov ntaub ntawv tag nrho rov ua dua hla ntau lub pob, qhov twg txhua qhov tuaj yeem pab nyeem thiab sau ntawv thov. Muaj ntau pawg Kubernetes hauv kev ua haujlwm ntau lawm, peb txhawb nqa ntau tus RabbitMQ kev teeb tsa thiab tau ntsib nrog kev xav tau los hloov cov ntaub ntawv los ntawm ib pawg mus rau lwm qhov yam tsis muaj sijhawm poob.

Peb xav tau txoj haujlwm no tsawg kawg yog ob qhov xwm txheej:

  1. Hloov cov ntaub ntawv los ntawm RabbitMQ pawg uas tsis nyob hauv Kubernetes mus rau qhov tshiab - twb "kubernetized" (piv txwv li kev khiav haujlwm hauv K8s pods) - pawg.
  2. Kev tsiv teb tsaws ntawm RabbitMQ nyob rau hauv Kubernetes los ntawm ib lub npe chaw mus rau lwm qhov (piv txwv li, yog tias circuits raug txwv los ntawm namespaces, tom qab ntawd hloov cov txheej txheem ntawm ib lub voj voog mus rau lwm qhov).

Daim ntawv qhia hauv tsab xov xwm yog tsom rau cov xwm txheej (tab sis tsis yog txhua qhov txwv rau lawv) nyob rau hauv uas muaj cov qub RabbitMQ pawg (piv txwv li, ntawm 3 nodes), nyob rau hauv K8s lossis ntawm qee cov qub servers. Ib daim ntawv thov tuav ntawm Kubernetes (twb nyob ntawd lossis yav tom ntej) ua haujlwm nrog nws:

Seamless tsiv teb tsaws ntawm RabbitMQ rau Kubernetes

... thiab peb tau ntsib nrog txoj haujlwm ntawm kev tsiv mus nyob rau hauv cov khoom tshiab hauv Kubernetes.

Ua ntej, txoj hauv kev dav dav rau kev tsiv teb tsaws nws tus kheej yuav raug piav qhia, thiab tom qab ntawd cov ntsiab lus ntawm nws qhov kev siv yuav raug piav qhia.

Migration algorithm

Thawj, ua ntej, theem ua ntej kev nqis tes ua yog txhawm rau txheeb xyuas tias hom muaj ntau yam tau qhib rau hauv lub qub RabbitMQ installation (HA). Yog vim li cas yog pom tseeb - peb tsis xav poob tej ntaub ntawv. Txhawm rau ua tiav daim tshev no, koj tuaj yeem mus rau RabbitMQ admin vaj huam sib luag thiab hauv Admin β†’ Txoj Cai tab kom paub tseeb tias tus nqi raug teeb tsa. ha-mode: all:

Seamless tsiv teb tsaws ntawm RabbitMQ rau Kubernetes

Cov kauj ruam tom ntej yog los tsa ib pawg RabbitMQ tshiab hauv Kubernetes pods (hauv peb qhov xwm txheej, piv txwv li, suav nrog 3 nodes, tab sis lawv tus lej yuav txawv).

Tom qab no, peb muab cov qub thiab tshiab RabbitMQ pawg, tau txais ib pawg (ntawm 6 nodes):

Seamless tsiv teb tsaws ntawm RabbitMQ rau Kubernetes

Cov txheej txheem ntawm cov ntaub ntawv synchronization ntawm cov qub thiab tshiab RabbitMQ pawg yog pib. Thaum tag nrho cov ntaub ntawv tau synchronized ntawm tag nrho cov nodes hauv pawg, peb tuaj yeem hloov daim ntawv thov siv cov pawg tshiab:

Seamless tsiv teb tsaws ntawm RabbitMQ rau Kubernetes

Tom qab cov haujlwm no, nws txaus los tshem tawm cov pob qub ntawm RabbitMQ pawg, thiab qhov kev txav mus los tuaj yeem suav tias ua tiav:

Seamless tsiv teb tsaws ntawm RabbitMQ rau Kubernetes

Peb tau siv cov txheej txheem no ntau zaus hauv kev tsim khoom. Txawm li cas los xij, rau peb tus kheej yooj yim, peb tau siv nws hauv qhov tshwj xeeb uas faib cov qauv RMQ teeb tsa thoob plaws ntau pawg Kubernetes. (rau cov uas xav paub: peb tab tom tham txog addon-operatoruas peb nyuam qhuav hais). Hauv qab no peb yuav nthuav qhia tus kheej cov lus qhia uas leej twg tuaj yeem thov rau ntawm lawv cov kev teeb tsa los sim cov lus pom zoo hauv kev nqis tes ua.

Cia peb sim nws hauv kev xyaum

uas yuav tsum tau

Cov ntsiab lus yog yooj yim heev:

  1. Kubernetes pawg (minikube tseem yuav ua haujlwm);
  2. RabbitMQ pawg (tuaj yeem xa mus rau ntawm cov hlau liab qab, thiab ua zoo li cov pawg tsis tu ncua hauv Kubernetes los ntawm daim ntawv qhia Helm).

Rau qhov piv txwv hauv qab no, kuv xa RMQ rau Kubernetes thiab hu nws rmq-old.

Sawv kev npaj

1. Download tau daim ntawv Helm thiab kho nws me ntsis:

helm fetch --untar stable/rabbitmq-ha

Txhawm rau kom yooj yim, peb teeb tus password, ErlangCookie thiab ua nom ua tswv ha-allyog li ntawd los ntawm lub neej ntawd cov queues synchronized ntawm tag nrho cov nodes ntawm RMQ pawg:

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. Nruab daim duab:

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

3. Mus rau RabbitMQ admin vaj huam sib luag, tsim ib kab tshiab thiab ntxiv ntau cov lus. Lawv yuav xav tau kom tom qab kev tsiv teb tsaws chaw peb tuaj yeem paub tseeb tias tag nrho cov ntaub ntawv khaws cia thiab peb tsis tau poob dab tsi:

Seamless tsiv teb tsaws ntawm RabbitMQ rau Kubernetes

Lub rooj zaum xeem tau npaj txhij: peb muaj "laus" RabbitMQ nrog cov ntaub ntawv uas yuav tsum tau xa mus.

Migrating ib pawg RabbitMQ

1. Ua ntej, cia peb xa cov RabbitMQ tshiab rau hauv phooj ywg npe nrog ib yam ErlangCookie thiab tus password rau tus neeg siv. Txhawm rau ua qhov no, peb yuav ua cov haujlwm tau piav qhia saum toj no, hloov cov lus txib kawg rau kev txhim kho RMQ rau cov hauv qab no:

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

2. Tam sim no koj yuav tsum tau ua ke cov pawg tshiab nrog cov qub. Txhawm rau ua qhov no, mus rau txhua lub pob tshiab RabbitMQ thiab khiav cov lus txib:

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

Nyob rau hauv variable OLD_RMQ pom qhov chaw nyob ntawm ib qho ntawm cov nodes qub RMQ pawg.

Cov lus txib no yuav tso tseg cov node tam sim no tshiab RMQ pawg, muab tso rau hauv pawg qub thiab tso nws dua.

3. RMQ pawg ntawm 6 nodes yog npaj txhij:

Seamless tsiv teb tsaws ntawm RabbitMQ rau Kubernetes

Koj yuav tsum tau tos thaum cov lus tau synchronized ntawm tag nrho cov nodes. Nws tsis yog qhov nyuaj rau kwv yees tias cov lus synchronization lub sij hawm nyob ntawm lub peev xwm ntawm cov khoom siv uas cov pawg siv tau thiab ntawm cov xov tooj. Hauv qhov xwm txheej tau piav qhia, tsuas muaj 10 ntawm lawv, yog li cov ntaub ntawv tau synchronized tam sim ntawd, tab sis nrog cov lus txaus txaus, synchronization tuaj yeem kav ntev li ib teev.

Yog li, synchronization txheej xwm:

Seamless tsiv teb tsaws ntawm RabbitMQ rau Kubernetes

nws yog +5 txhais tau tias cov lus twb nyob rau hauv ntau dua ntawm 5 nodes (tshwj tsis yog rau yam uas tau qhia hauv daim teb Node). Yog li, synchronization tau ua tiav.

4. Txhua yam uas tseem tshuav yog hloov qhov chaw nyob RMQ hauv daim ntawv thov mus rau pawg tshiab (cov haujlwm tshwj xeeb ntawm no yog nyob ntawm cov txheej txheem thev naus laus zis uas koj siv thiab lwm yam kev thov tshwj xeeb), tom qab ntawd koj tuaj yeem hais lus zoo rau tus qub.

Rau kev ua haujlwm kawg (piv txwv li twb tom qab hloov daim ntawv thov mus rau ib pawg tshiab) mus rau txhua qhov qub pawg thiab ua cov commands:

rabbitmqctl stop_app
rabbitmqctl reset

Pawg "tsis nco qab" txog cov qub nodes: koj tuaj yeem rho tawm RMQ qub, thaum lub sijhawm txav mus yuav ua tiav.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Yog tias koj siv RMQ nrog daim ntawv pov thawj, ces tsis muaj dab tsi hloov pauv - cov txheej txheem txav yuav ua raws nraim tib yam.

tshawb pom

Cov txheej txheem piav qhia yog tsim nyog rau yuav luag txhua kis thaum peb xav tau tsiv teb tsaws RabbitMQ lossis tsuas yog txav mus rau pawg tshiab.

Hauv peb qhov xwm txheej, cov teeb meem tshwm sim tsuas yog ib zaug xwb, thaum RMQ tau nkag los ntawm ntau qhov chaw, thiab peb tsis muaj sijhawm los hloov RMQ chaw nyob mus rau qhov tshiab txhua qhov chaw. Tom qab ntawd peb tau tshaj tawm RMQ tshiab hauv tib lub npe nrog cov ntawv qub kom nws yuav poob rau hauv cov kev pabcuam uas twb muaj lawm thiab Ingresses, thiab thaum tso lub pod peb tswj cov ntawv los ntawm tes, tshem tawm thaum pib kom tsis txhob poob ntawm cov npliag RMQ, thiab ntxiv lawv rov qab tom qab cov lus tau synchronized.

Peb siv tib lub tswv yim thaum hloov kho RabbitMQ rau ib qho tshiab nrog kev hloov pauv - txhua yam ua haujlwm zoo li lub moos.

PS

Raws li kev txuas ntxiv ntawm cov khoom siv no, peb tab tom npaj cov lus hais txog MongoDB (kev tsiv teb tsaws chaw los ntawm cov khoom siv kho vajtse rau Kubernetes) thiab MySQL (peb npaj li cas DBMS hauv Kubernetes). Lawv yuav tshaj tawm nyob rau lub hlis tom ntej.

PPS

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib