Ascnamh gan uaim RabbitMQ go Kubernetes

Ascnamh gan uaim RabbitMQ go Kubernetes

Is bróicéir teachtaireachtaí é RabbitMQ atá scríofa in Erlang a ligeann duit braisle teip a eagrú le sonraí iomlána a mhacasamhlú thar nóid iolracha, áit ar féidir le gach nód iarratais a léamh agus a scríobh a sheirbheáil. Agus go leor braislí Kubernetes i mbun oibríochta táirgthe, tacaímid le líon mór suiteálacha RabbitMQ agus bhí muid ag tabhairt aghaidh ar an ngá atá le sonraí a aistriú ó bhraisle amháin go ceann eile gan downtime.

Bhí an oibríocht seo ag teastáil uainn i dhá chás ar a laghad:

  1. Sonraí a aistriú ó bhraisle RabbitMQ nach bhfuil lonnaithe i Kubernetes go braisle nua – atá “kubernetized” cheana féin (i.e. ag feidhmiú i gcódanna K8s) –.
  2. Imirce RabbitMQ laistigh de Kubernetes ó ainmspás amháin go ceann eile (mar shampla, má tá ciorcaid teorannaithe ag spásanna ainm, ansin chun bonneagar a aistriú ó chiorcad amháin go ciorcad eile).

Tá an t-oideas atá molta san alt dírithe ar chásanna (ach níl sé teoranta dóibh ar chor ar bith) ina bhfuil sean-chnuasach RabbitMQ (mar shampla, de 3 nód), suite i K8anna nó ar roinnt seanfhreastalaí. Oibríonn feidhmchlár arna óstáil ar Kubernetes (ann cheana féin nó amach anseo) leis:

Ascnamh gan uaim RabbitMQ go Kubernetes

... agus tá sé de dhualgas orainn é a aistriú chuig an léiriú nua i Kubernetes.

Ar an gcéad dul síos, déanfar cur síos ar an gcur chuige ginearálta maidir leis an imirce féin, agus ina dhiaidh sin déanfar cur síos ar na sonraí teicniúla maidir lena cur chun feidhme.

Algartam imirce

Is é an chéad réamhchéim roimh aon ghníomh ná seiceáil go bhfuil mód ard-infhaighteachta cumasaithe i seanshuiteáil RabbitMQ (HA). Is léir an chúis - nílimid ag iarraidh aon sonraí a chailleadh. Chun an tseiceáil seo a dhéanamh, is féidir leat dul go dtí an painéal riaracháin RabbitMQ agus sa chluaisín Riarachán → Polasaithe déan cinnte go bhfuil an luach socraithe ha-mode: all:

Ascnamh gan uaim RabbitMQ go Kubernetes

Is é an chéad chéim eile ná braisle nua RabbitMQ a ardú i pods Kubernetes (inár gcás, mar shampla, comhdhéanta de 3 nóid, ach d'fhéadfadh a n-uimhir a bheith difriúil).

Ina dhiaidh sin, déanaimid na braislí RabbitMQ sean agus nua a chumasc, ag fáil braisle amháin (de 6 nód):

Ascnamh gan uaim RabbitMQ go Kubernetes

Cuirtear tús leis an bpróiseas sioncronaithe sonraí idir na braislí RabbitMQ sean agus nua. Nuair a bheidh na sonraí go léir sioncronaithe idir na nóid go léir sa bhraisle, is féidir linn an feidhmchlár a athrú chun an braisle nua a úsáid:

Ascnamh gan uaim RabbitMQ go Kubernetes

Tar éis na n-oibríochtaí seo, is leor na sean-nóid a bhaint as braisle RabbitMQ, agus is féidir an t-aistriú a mheas iomlán:

Ascnamh gan uaim RabbitMQ go Kubernetes

Bhaineamar úsáid as an scéim seo go minic i dtáirgeadh. Mar sin féin, ar ár n-áisiúlacht féin, chuireamar i bhfeidhm é laistigh de chóras speisialaithe a dháileann cumraíochtaí caighdeánacha RMQ thar ilchnuasaigh Kubernetes (dóibh siúd atá fiosrach: táimid ag caint faoi addon-oibreoira bhfuilimid ag caint faoi ach dúradh le déanaí). Anseo thíos cuirfimid treoracha aonair i láthair gur féidir le duine ar bith a chur i bhfeidhm ar a suiteálacha chun an réiteach atá beartaithe a thriail i ngníomh.

Déanaimis iarracht é go praiticiúil

Riachtanais

Tá na sonraí an-simplí:

  1. Kubernetes braisle (oibreoidh minikube freisin);
  2. Cnuasach RabbitMQ (is féidir é a imscaradh ar mhiotal lom, agus é a dhéanamh mar bhraisle rialta in Kubernetes ón gcairt oifigiúil Helm).

Mar shampla thíos, d'imscar mé RMQ go Kubernetes agus ghlaoigh mé air rmq-old.

Ullmhú seastán

1. Íoslódáil an chairt Helm agus cuir in eagar é beagán:

helm fetch --untar stable/rabbitmq-ha

Ar mhaithe le caoithiúlacht, shocraigh muid pasfhocal, ErlangCookie agus polaitíocht a dhéanamh ha-allionas go ndéanfar na scuainí a shioncronú de réir réamhshocraithe idir nóid uile an bhraisle 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. Suiteáil an chairt:

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

3. Téigh go dtí an painéal admin RabbitMQ, a chruthú scuaine nua agus cuir roinnt teachtaireachtaí. Beidh siad ag teastáil ionas gur féidir linn a chinntiú tar éis imirce go gcaomhnaítear na sonraí go léir agus nach bhfuil aon rud caillte againn:

Ascnamh gan uaim RabbitMQ go Kubernetes

Tá an binse tástála réidh: tá an “sean” RabbitMQ againn ina bhfuil sonraí nach mór a aistriú.

Cnuasach RabbitMQ a aistriú

1. Ar dtús, déanaimis an RabbitMQ nua a imscaradh isteach cara ainmspás le céanna ErlangCookie agus pasfhocal don úsáideoir. Chun seo a dhéanamh, déanfaimid na hoibríochtaí a thuairiscítear thuas, ag athrú an t-ordú deiridh chun RMQ a shuiteáil chuig an méid seo a leanas:

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

2. Anois ní mór duit an braisle nua a chumasc leis an seancheann. Chun seo a dhéanamh, téigh go dtí gach ceann de na pods nua RabbitMQ agus déan na horduithe:

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

I athróg OLD_RMQ faightear seoladh ceann de na nóid Sean braisle RMQ.

Stopfaidh na horduithe seo an nód reatha nua braisle RMQ, ceangail leis an seanchnuasach é agus seol arís é.

3. Tá braisle RMQ de 6 nóid réidh:

Ascnamh gan uaim RabbitMQ go Kubernetes

Caithfidh tú fanacht agus teachtaireachtaí á sioncronú idir na nóid go léir. Níl sé deacair a buille faoi thuairim go mbraitheann an t-am sioncrónaithe teachtaireachta ar chumas na crua-earraí ar a n-imscartar an bhraisle agus ar líon na dteachtaireachtaí. Sa chás a thuairiscítear, níl ach 10 gcinn acu, mar sin rinneadh na sonraí a shioncronú láithreach, ach le líon sách mór teachtaireachtaí, is féidir leis an sioncrónú maireachtáil uaireanta.

Mar sin, an stádas sioncrónaithe:

Ascnamh gan uaim RabbitMQ go Kubernetes

Anseo +5 ciallaíonn sé go bhfuil teachtaireachtaí isteach cheana féin níos mó ar 5 nód (seachas an méid atá léirithe sa réimse Node). Mar sin, d'éirigh leis an sioncrónú.

4. Níl fágtha ach an seoladh RMQ san fheidhmchlár a aistriú chuig an mbraisle nua (braitheann na gníomhaíochtaí sonracha anseo ar an gcruach teicneolaíochta atá in úsáid agat agus ar shaintréithe feidhmchláir eile), agus ina dhiaidh sin is féidir leat slán a fhágáil leis an seancheann.

Don oibríocht dheireanach (i.e. cheana féin tar éis ag aistriú an fheidhmchláir go braisle nua) téigh go dtí gach nód Sean cnuasaigh agus déan na horduithe:

rabbitmqctl stop_app
rabbitmqctl reset

Rinne an bhraisle “dearmad” ar na seannóid: is féidir leat an sean-RMQ a scriosadh, agus ag an bpointe sin cuirfear an t-aistriú i gcrích.

Tabhair faoi deara: Má úsáideann tú RMQ le deimhnithe, ansin ní athraíonn aon rud bunúsach - déanfar an próiseas gluaiseachta díreach mar an gcéanna.

Torthaí

Tá an scéim a gcuirtear síos uirthi oiriúnach do bheagnach gach cás nuair is gá dúinn RabbitMQ a aistriú nó bogadh go braisle nua.

Inár gcás, níor tháinig deacrachtaí chun cinn ach uair amháin, nuair a fuarthas rochtain ar RMQ ó go leor áiteanna, agus ní raibh an deis againn seoladh RMQ a athrú go ceann nua i ngach áit. Ansin sheolamar RMQ nua san ainmspás céanna leis na lipéid chéanna ionas go dtitfeadh sé faoi sheirbhísí reatha agus Ingresses, agus nuair a bhí an pod á sheoladh againn rinneamar na lipéid a ionramháil de láimh, iad a bhaint ag an tús ionas nach mbeadh iarratais ag titim ar an RMQ folamh, agus iad a chur ar ais tar éis na teachtaireachtaí a shioncronú.

D'úsáideamar an straitéis chéanna agus RabbitMQ á nuashonrú go leagan nua le cumraíocht athraithe - d'oibrigh gach rud mar chlog.

PS

Mar leanúint loighciúil den ábhar seo, táimid ag ullmhú ailt faoi MongoDB (imirce ó fhreastalaí crua-earraí go Kubernetes) agus MySQL (mar a ullmhaímid an DBMS seo taobh istigh de Kubernetes). Foilseofar iad sna míonna amach romhainn.

PSP

Léigh freisin ar ár mblag:

Foinse: will.com

Add a comment