Iṣilọ ailopin ti RabbitMQ si Kubernetes

Iṣilọ ailopin ti RabbitMQ si Kubernetes

RabbitMQ jẹ alagbata ifiranṣẹ ti a kọ sinu Erlang ti o fun ọ laaye lati ṣeto iṣupọ ikuna pẹlu ẹda data ni kikun kọja awọn apa ọpọ, nibiti ipade kọọkan le ṣiṣẹ kika ati kọ awọn ibeere. Nini ọpọlọpọ awọn iṣupọ Kubernetes ni iṣẹ iṣelọpọ, a ṣe atilẹyin nọmba nla ti awọn fifi sori ẹrọ RabbitMQ ati pe a dojuko iwulo lati jade data lati iṣupọ kan si omiran laisi akoko isinmi.

A nilo iṣẹ yii ni o kere ju awọn ọran meji:

  1. Gbigbe data lati inu iṣupọ RabbitMQ ti ko si ni Kubernetes si titun kan - tẹlẹ "kubernetized" (ie nṣiṣẹ ni awọn K8s pods) - iṣupọ.
  2. Iṣilọ ti RabbitMQ laarin Kubernetes lati aaye orukọ kan si omiiran (fun apẹẹrẹ, ti awọn iyika ba ni opin nipasẹ awọn aaye orukọ, lẹhinna lati gbe awọn amayederun lati iyika kan si ekeji).

Ohunelo ti a dabaa ninu nkan naa ni idojukọ lori awọn ipo (ṣugbọn ko ni opin rara si wọn) ninu eyiti iṣupọ RabbitMQ atijọ wa (fun apẹẹrẹ, ti awọn apa 3), ti o wa boya tẹlẹ ni awọn K8 tabi lori awọn olupin atijọ. Ohun elo ti a gbalejo lori Kubernetes (tẹlẹ nibẹ tabi ni ọjọ iwaju) ṣiṣẹ pẹlu rẹ:

Iṣilọ ailopin ti RabbitMQ si Kubernetes

... ati pe a dojuko pẹlu iṣẹ-ṣiṣe ti gbigbe si iṣelọpọ tuntun ni Kubernetes.

Ni akọkọ, ọna gbogbogbo si iṣiwa funrararẹ yoo ṣe apejuwe, ati lẹhin naa awọn alaye imọ-ẹrọ ti imuse rẹ yoo ṣe apejuwe.

Iṣilọ alugoridimu

Ni akọkọ, alakoko, ipele ṣaaju iṣe eyikeyi ni lati ṣayẹwo pe ipo wiwa giga ti ṣiṣẹ ni fifi sori RabbitMQ atijọ (HA). Idi jẹ kedere - a ko fẹ lati padanu eyikeyi data. Lati ṣe ayẹwo yii, o le lọ si igbimọ abojuto RabbitMQ ati ninu taabu Admin → Awọn eto imulo rii daju pe iye ti ṣeto. ha-mode: all:

Iṣilọ ailopin ti RabbitMQ si Kubernetes

Igbesẹ ti o tẹle ni lati gbe iṣupọ RabbitMQ tuntun kan ni awọn pods Kubernetes (ninu ọran wa, fun apẹẹrẹ, ti o ni awọn apa 3, ṣugbọn nọmba wọn le yatọ).

Lẹhin eyi, a dapọ atijọ ati awọn iṣupọ RabbitMQ tuntun, gbigba iṣupọ kan (ti awọn apa 6):

Iṣilọ ailopin ti RabbitMQ si Kubernetes

Ilana imuṣiṣẹpọ data laarin atijọ ati titun awọn iṣupọ RabbitMQ ti bẹrẹ. Ni kete ti gbogbo data ba ti ṣiṣẹpọ laarin gbogbo awọn apa inu iṣupọ, a le yi ohun elo pada lati lo iṣupọ tuntun:

Iṣilọ ailopin ti RabbitMQ si Kubernetes

Lẹhin awọn iṣẹ wọnyi, o to lati yọ awọn apa atijọ kuro ninu iṣupọ RabbitMQ, ati pe gbigbe naa ni a le ro pe o pe:

Iṣilọ ailopin ti RabbitMQ si Kubernetes

A ti lo ero yii ni ọpọlọpọ igba ni iṣelọpọ. Bibẹẹkọ, fun irọrun tiwa, a ṣe imuse rẹ laarin eto amọja ti o pin kaakiri awọn atunto RMQ boṣewa kọja awọn iṣupọ Kubernetes pupọ (fun awọn ti o ni iyanilenu: a n sọrọ nipa addoni-onišẹnipa eyiti a o kan laipe so fun). Ni isalẹ a yoo ṣafihan awọn itọnisọna kọọkan ti ẹnikẹni le lo lori awọn fifi sori ẹrọ wọn lati gbiyanju ojutu ti a dabaa ni iṣe.

Jẹ ki a gbiyanju rẹ ni iṣe

awọn ibeere

Awọn alaye jẹ irorun:

  1. Kubernetes iṣupọ (minikube yoo tun ṣiṣẹ);
  2. iṣupọ RabbitMQ (le ṣe gbe lọ sori irin igboro, ati ṣe bi iṣupọ deede ni Kubernetes lati iwe aṣẹ Helm osise).

Fun apẹẹrẹ ni isalẹ, Mo fi RMQ ranṣẹ si Kubernetes o si pe rmq-old.

Duro igbaradi

1. Ṣe igbasilẹ iwe apẹrẹ Helm ki o ṣatunkọ diẹ:

helm fetch --untar stable/rabbitmq-ha

Fun irọrun, a ṣeto ọrọ igbaniwọle kan, ErlangCookie ki o si ṣe iselu ha-allki nipa aiyipada awọn ila ti wa ni mimuuṣiṣẹpọ laarin gbogbo awọn apa ti iṣupọ 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. Fi sori ẹrọ chart naa:

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

3. Lọ si igbimọ abojuto RabbitMQ, ṣẹda isinyi tuntun ki o ṣafikun awọn ifiranṣẹ pupọ. Wọn yoo nilo ki lẹhin ijira a le rii daju pe gbogbo data ti wa ni ipamọ ati pe a ko padanu ohunkohun:

Iṣilọ ailopin ti RabbitMQ si Kubernetes

Ibujoko idanwo ti ṣetan: a ni "atijọ" RabbitMQ pẹlu data ti o nilo lati gbe.

Gbigbe iṣupọ RabbitMQ kan

1. Ni akọkọ, jẹ ki a gbe RabbitMQ tuntun sinu ore aaye orukọ pẹlu kanna ErlangCookie ati ọrọigbaniwọle fun olumulo. Lati ṣe eyi, a yoo ṣe awọn iṣẹ ti a ṣalaye loke, yiyipada aṣẹ ikẹhin fun fifi RMQ sori atẹle naa:

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

2. Bayi o nilo lati dapọ iṣupọ tuntun pẹlu ti atijọ. Lati ṣe eyi, lọ si ọkọọkan awọn eso tuntun RabbitMQ ati ṣiṣe awọn aṣẹ:

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

Ni oniyipada OLD_RMQ adirẹsi ti ọkan ninu awọn apa ti wa ni ri atijọ RMQ iṣupọ.

Awọn aṣẹ wọnyi yoo da ipade ti isiyi duro tuntun iṣupọ RMQ, so mọ iṣupọ atijọ ki o lọlẹ lẹẹkansii.

3. iṣupọ RMQ ti awọn apa 6 ti ṣetan:

Iṣilọ ailopin ti RabbitMQ si Kubernetes

O gbọdọ duro nigbati awọn ifiranṣẹ ti wa ni mimuuṣiṣẹpọ laarin gbogbo awọn apa. Ko soro lati gboju le won pe akoko imuṣiṣẹpọ ifiranṣẹ da lori agbara ohun elo lori eyiti o ti gbe iṣupọ ati lori nọmba awọn ifiranṣẹ. Ninu oju iṣẹlẹ ti a ṣapejuwe, 10 nikan lo wa, nitorinaa data naa ti muṣiṣẹpọ lesekese, ṣugbọn pẹlu nọmba awọn ifiranṣẹ ti o pọ to, amuṣiṣẹpọ le ṣiṣe ni fun awọn wakati.

Nitorinaa, ipo imuṣiṣẹpọ:

Iṣilọ ailopin ti RabbitMQ si Kubernetes

o ti wa ni +5 tumo si wipe awọn ifiranṣẹ ti wa ni tẹlẹ ninu diẹ ẹ sii lori 5 apa (ayafi fun ohun ti wa ni itọkasi ni awọn aaye Node). Nitorinaa, imuṣiṣẹpọ naa ṣaṣeyọri.

4. Gbogbo ohun ti o ku ni lati yipada adirẹsi RMQ ninu ohun elo naa si iṣupọ tuntun (awọn iṣe pato nibi da lori akopọ imọ-ẹrọ ti o nlo ati awọn ohun elo miiran pato), lẹhin eyi o le sọ o dabọ si atijọ.

Fun iṣẹ ṣiṣe to kẹhin (ie tẹlẹ после yiyipada ohun elo si iṣupọ tuntun) lọ si ipade kọọkan atijọ iṣupọ ati ṣiṣe awọn aṣẹ:

rabbitmqctl stop_app
rabbitmqctl reset

Iṣupọ naa “gbagbe” nipa awọn apa atijọ: o le paarẹ RMQ atijọ, ni aaye wo ni gbigbe yoo pari.

Daakọ: Ti o ba lo RMQ pẹlu awọn iwe-ẹri, lẹhinna ko si ohun ti o yipada ni ipilẹ - ilana gbigbe yoo ṣee ṣe deede kanna.

awari

Eto ti a ṣapejuwe dara fun gbogbo awọn ọran nigba ti a nilo lati jade lọ RabbitMQ tabi nirọrun gbe si iṣupọ tuntun kan.

Ninu ọran tiwa, awọn iṣoro dide ni ẹẹkan, nigbati RMQ ti wọle lati ọpọlọpọ awọn aaye, ati pe a ko ni aye lati yi adirẹsi RMQ pada si tuntun nibi gbogbo. Lẹhinna a ṣe ifilọlẹ RMQ tuntun kan ni aaye orukọ kanna pẹlu awọn aami kanna ki o le ṣubu labẹ awọn iṣẹ ti o wa tẹlẹ ati Ingresses, ati nigbati o ba ṣe ifilọlẹ podu a ṣe afọwọyi awọn aami pẹlu ọwọ, yọ wọn kuro ni ibẹrẹ ki awọn ibeere ko ba ṣubu lori RMQ ofo, ati fifi wọn kun pada lẹhin ti awọn ifiranṣẹ ti wa ni mimuuṣiṣẹpọ.

A lo ilana kanna nigba mimu dojuiwọn RabbitMQ si ẹya tuntun pẹlu iṣeto ti o yipada - ohun gbogbo ṣiṣẹ bi aago kan.

PS

Gẹgẹbi ilọsiwaju ọgbọn ti ohun elo yii, a ngbaradi awọn nkan nipa MongoDB (iṣiwa lati olupin ohun elo kan si Kubernetes) ati MySQL (bawo ni a ṣe mura DBMS yii inu Kubernetes). Wọn yoo ṣe atẹjade ni awọn oṣu to n bọ.

PPS

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun