Kusamuka kosasunthika kwa RabbitMQ kupita ku Kubernetes

Kusamuka kosasunthika kwa RabbitMQ kupita ku Kubernetes

RabbitMQ ndi meseji broker yolembedwa ku Erlang yomwe imakupatsani mwayi wopanga gulu la failover lomwe lili ndi kubwereza kwathunthu kwa data pama node angapo, pomwe node iliyonse imatha kuwerenga ndikulemba zopempha. Pokhala ndi magulu ambiri a Kubernetes pantchito yopanga, timathandizira kuchuluka kwa kukhazikitsa kwa RabbitMQ ndipo tidayang'anizana ndi kufunikira kwa kusamutsa deta kuchokera kugulu lina kupita ku lina popanda kutsika.

Tidafunikira opareshoni iyi pazochitika ziwiri:

  1. Kusamutsa deta kuchokera ku gulu la RabbitMQ lomwe silikupezeka ku Kubernetes kupita ku chatsopano - "kubernetized" (i.e. kugwira ntchito mu ma K8s pods) - gulu.
  2. Kusamuka kwa RabbitMQ mkati mwa Kubernetes kuchokera kumalo ena a mayina kupita ku ena (mwachitsanzo, ngati mabwalo agawidwa ndi malo a mayina, ndiye kuti kusamutsa zomangamanga kuchokera kudera lina kupita ku lina).

Maphikidwe omwe aperekedwa m'nkhaniyi angoyang'ana pazochitika (koma sizimangokhala kwa iwo) momwe muli gulu lakale la RabbitMQ (mwachitsanzo, la node 3), lomwe lili kale mu K8s kapena pa ma seva akale. Pulogalamu yomwe idakhazikitsidwa pa Kubernetes (idalipo kale kapena mtsogolomo) imagwira ntchito nayo:

Kusamuka kosasunthika kwa RabbitMQ kupita ku Kubernetes

... ndipo tikukumana ndi ntchito yosamukira kumalo atsopano ku Kubernetes.

Choyamba, njira yowonjezereka ya kusamuka komweko idzafotokozedwa, ndipo pambuyo pake tsatanetsatane waukadaulo wa kukhazikitsidwa kwake adzafotokozedwa.

Migration algorithm

Gawo loyamba, loyambirira, musanayambe kuchitapo kanthu ndikuwonetsetsa kuti kupezeka kwapamwamba kumayatsidwa pakuyika kwakale kwa RabbitMQ (HA). Chifukwa chake ndi chodziwikiratu - sitikufuna kutaya deta. Kuti muchite izi, mukhoza kupita ku gulu la RabbitMQ admin ndipo mu Admin β†’ Tabu ya Ndondomeko onetsetsani kuti mtengo wakhazikitsidwa. ha-mode: all:

Kusamuka kosasunthika kwa RabbitMQ kupita ku Kubernetes

Chotsatira ndikukweza gulu latsopano la RabbitMQ mu Kubernetes pods (mwa ife, mwachitsanzo, opangidwa ndi mfundo za 3, koma chiwerengero chawo chingakhale chosiyana).

Pambuyo pake, timaphatikiza magulu akale ndi atsopano a RabbitMQ, kupeza gulu limodzi (la 6 node):

Kusamuka kosasunthika kwa RabbitMQ kupita ku Kubernetes

Njira yolumikizira deta pakati pamagulu akale ndi atsopano a RabbitMQ imayambitsidwa. Deta yonse ikalumikizidwa pakati pa ma node onse pagulu, titha kusintha pulogalamuyo kuti tigwiritse ntchito gulu latsopanoli:

Kusamuka kosasunthika kwa RabbitMQ kupita ku Kubernetes

Pambuyo pakuchita izi, ndikokwanira kuchotsa ma node akale ku gulu la RabbitMQ, ndipo kusunthaku kungaganizidwe kokwanira:

Kusamuka kosasunthika kwa RabbitMQ kupita ku Kubernetes

Takhala tikugwiritsa ntchito njirayi nthawi zambiri popanga. Komabe, kuti zitithandize ife tokha, tidaziyika mkati mwadongosolo lapadera lomwe limagawa masinthidwe amtundu wa RMQ m'magulu angapo a Kubernetes. (kwa iwo omwe ali ndi chidwi: tikukamba za addon-wothandiziraza zomwe ife zangonenedwa kumene). Pansipa tipereka malangizo omwe aliyense angagwiritse ntchito pazoyika zawo kuti ayese njira yomwe akufuna.

Tiyeni tiyese muzochita

amafuna

Zambiri ndi zosavuta:

  1. Kubernetes cluster (minikube idzagwiranso ntchito);
  2. Gulu la RabbitMQ (litha kuyikidwa pazitsulo zopanda kanthu, ndikupangidwa ngati gulu lokhazikika ku Kubernetes kuchokera pa tchati chovomerezeka cha Helm).

Mwachitsanzo pansipa, ndidatumiza RMQ ku Kubernetes ndikuyitcha rmq-old.

Kuyimirira kukonzekera

1. Tsitsani tchati cha Helm ndikusintha pang'ono:

helm fetch --untar stable/rabbitmq-ha

Kuti zitheke, timayika password, ErlangCookie ndi kupanga ndale ha-allkotero kuti mwachisawawa mizere imalumikizidwa pakati pa node zonse za gulu 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. Ikani tchati:

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

3. Pitani ku gulu la oyang'anira RabbitMQ, pangani mzere watsopano ndikuwonjezera mauthenga angapo. Zidzafunika kuti titasamuka titsimikizire kuti zonse zasungidwa ndipo sitinataye kalikonse:

Kusamuka kosasunthika kwa RabbitMQ kupita ku Kubernetes

Benchi yoyesera ndi yokonzeka: tili ndi RabbitMQ "yakale" yomwe ili ndi deta yomwe iyenera kusamutsidwa.

Kusamuka gulu la RabbitMQ

1. Choyamba, tiyeni titumize RabbitMQ yatsopano bwenzi namespace ndi yemweyo ErlangCookie ndi achinsinsi kwa wosuta. Kuti tichite izi, tidzachita zomwe tafotokozazi, ndikusintha lamulo lomaliza loyika RMQ kukhala zotsatirazi:

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

2. Tsopano muyenera kuphatikiza tsango latsopano ndi lakale. Kuti muchite izi, pitani ku gawo lililonse chatsopano RabbitMQ ndikuchita malamulo:

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

Mu variable OLD_RMQ adilesi ya imodzi mwa node ikupezeka wakale Mtengo wapatali wa magawo RMQ.

Malamulowa adzayimitsa node yamakono chatsopano RMQ cluster, igwirizanitse ku gulu lakale ndikuyambitsanso.

3. Gulu la RMQ la node 6 lakonzeka:

Kusamuka kosasunthika kwa RabbitMQ kupita ku Kubernetes

Muyenera kudikirira pomwe mauthenga alumikizidwa pakati pa ma node onse. Sizovuta kuganiza kuti nthawi yolumikizana ndi uthenga imadalira mphamvu ya hardware yomwe gululo limayikidwa komanso kuchuluka kwa mauthenga. Muzochitika zomwe zafotokozedwa, pali 10 okha, kotero kuti deta idalumikizidwa nthawi yomweyo, koma ndi chiwerengero chokwanira cha mauthenga, kulunzanitsa kumatha kwa maola ambiri.

Choncho, synchronization status:

Kusamuka kosasunthika kwa RabbitMQ kupita ku Kubernetes

ndi +5 zikutanthauza kuti mauthenga ali kale zambiri pa mfundo 5 (kupatula zomwe zasonyezedwa m'munda Node). Motero, kulunzanitsa kunapambana.

4. Zomwe zatsala ndikusinthira adilesi ya RMQ muzofunsira ku tsango latsopano (zochita zenizeni apa zimadalira stack yaukadaulo yomwe mukugwiritsa ntchito ndi zina zantchito), pambuyo pake mutha kutsazikana ndi yakaleyo.

Kwa opareshoni yomaliza (i.e. kale послС kusintha pulogalamuyo kukhala gulu latsopano) pitani kumalo aliwonse wakale cluster ndikuchita malamulo:

rabbitmqctl stop_app
rabbitmqctl reset

Gulu "linaiwala" za mfundo zakale: mukhoza kuchotsa RMQ yakale, panthawi yomwe kusuntha kudzatha.

ndemanga: Ngati mugwiritsa ntchito RMQ ndi ziphaso, ndiye kuti palibe chomwe chimasintha - kusuntha kudzachitika chimodzimodzi.

anapezazo

Chiwembu chofotokozedwacho ndi choyenera pafupifupi nthawi zonse tikafunika kusamuka RabbitMQ kapena kungosamukira ku gulu latsopano.

Kwa ife, zovuta zinayamba kamodzi kokha, pamene RMQ inafikiridwa kuchokera kumalo ambiri, ndipo tinalibe mwayi wosintha adiresi ya RMQ kukhala yatsopano kulikonse. Kenako tinayambitsa RMQ yatsopano m'malo omwewo omwe ali ndi zilembo zomwezo kuti igwere pansi pa mautumiki omwe alipo ndi Ingresses, ndipo poyambitsa pod tidasokoneza zolembazo ndi dzanja, kuzichotsa pachiyambi kuti zopempha zisakhale pa RMQ yopanda kanthu, ndikuwonjezeranso mauthengawo atalumikizidwa.

Tidagwiritsa ntchito njira yomweyi posinthira RabbitMQ ku mtundu watsopano wokhala ndi masinthidwe osinthidwa - chilichonse chimagwira ngati wotchi.

PS

Monga kupitiliza koyenera kwa nkhaniyi, tikukonzekera zolemba za MongoDB (kusamuka kuchokera ku seva ya hardware kupita ku Kubernetes) ndi MySQL (momwe timakonzekera DBMS iyi mkati mwa Kubernetes). Zidzasindikizidwa m'miyezi ikubwerayi.

Pps

Werenganinso pa blog yathu:

Source: www.habr.com

Kuwonjezera ndemanga