Seamless RabbitMQ ber bi koça Kubernetes

Seamless RabbitMQ ber bi koça Kubernetes

RabbitMQ brokerek peyamê ye ku li Erlang hatî nivîsandin ku destûrê dide te ku hûn komikek têkçûyî bi dubarekirina daneya tevahî di nav gelek girêkan de organîze bikin, ku her nod dikare daxwazên xwendin û nivîsandinê bixebite. Di xebata hilberînê de gelek komên Kubernetes hene, em piştgirî didin hejmareke mezin ji sazûmanên RabbitMQ û bi hewcedariya koçkirina daneyan ji komikek bo yekî din bêyî demdirêjî re rû bi rû mane.

Bi kêmanî di du rewşan de hewcedariya me bi vê operasyonê hebû:

  1. Veguheztina daneyan ji komikek RabbitMQ ku li Kubernetes-ê ne li komek nû - jixwe "kubernetîzekirî" (ango di K8s pods de dixebite) - kom dike.
  2. Koçkirina RabbitMQ di nav Kubernetes de ji navek navek din (mînakek, heke çerx ji hêla navan ve têne veqetandin, wê hingê ji bo veguheztina binesaziyê ji yek cîhek din).

Reçeteya ku di gotarê de hatî pêşniyar kirin li ser rewşan e (lê bi wan re ne tixûbdar e) ku tê de komek RabbitMQ ya kevn (mînak, ji 3 nokan) heye, ku jixwe di K8-an de an jî li ser hin serverên kevn hene. Serlêdanek ku li Kubernetes-ê hatî mêvandar kirin (jixwe li wir an di pêşerojê de) bi wê re dixebite:

Seamless RabbitMQ ber bi koça Kubernetes

... û em bi peywira koçkirina wê bo hilberîna nû ya li Kubernetes re rû bi rû ne.

Pêşî, nêzîkatiya giştî ya ji bo koçberiyê bixwe dê were ravekirin, û pişt re dê hûrguliyên teknîkî yên pêkanîna wê were vegotin.

Algorîtmaya koçberiyê

Qonaxa yekem, pêşîn, berî her çalakiyê ev e ku meriv kontrol bike ka moda hebûna bilind di sazkirina RabbitMQ ya kevn de çalak e (HA). Sedem eşkere ye - em naxwazin tu daneyan winda bikin. Ji bo ku hûn vê kontrolê bikin, hûn dikarin biçin panela rêveberiyê ya RabbitMQ û di tabloya Rêvebir → Polîtîkayan de piştrast bikin ku nirx hatî danîn. ha-mode: all:

Seamless RabbitMQ ber bi koça Kubernetes

Pêngava paşîn ev e ku meriv komek nû ya RabbitMQ di Kubernetes pods de bilind bike (di rewşa me de, mînakî, ji 3 nokan pêk tê, lê dibe ku hejmara wan cûda be).

Piştî vê yekê, em komikên kevn û nû yên RabbitMQ li hev dikin, komek yekane (ji 6 girêkan) digirin:

Seamless RabbitMQ ber bi koça Kubernetes

Pêvajoya hevdengkirina daneyê di navbera komikên kevn û nû yên RabbitMQ de dest pê dike. Gava ku hemî dane di navbera hemî girêkên di komê de hevdem kirin, em dikarin serîlêdanê veguherînin da ku koma nû bikar bînin:

Seamless RabbitMQ ber bi koça Kubernetes

Piştî van operasyonan, bes e ku meriv girêkên kevn ji koma RabbitMQ derxîne, û tevger dikare bêkêmasî were hesibandin:

Seamless RabbitMQ ber bi koça Kubernetes

Me di hilberînê de gelek caran vê planê bikar aniye. Lêbelê, ji bo rehetiya xwe, me ew di nav pergalek pispor de bicîh kir ku mîhengên standard RMQ li ser gelek komên Kubernetes belav dike. (ji bo kesên ku meraq dikin: em li ser dipeyivin addon-operatorli ser ku em tenê vê dawiyê got). Li jêr em ê rêwerzên kesane pêşkêşî bikin ku her kes dikare li ser sazkirinên xwe bicîh bîne da ku çareseriya pêşniyarkirî di çalakiyê de biceribîne.

Ka em di pratîkê de biceribînin

daxwazên

Detayên pir hêsan in:

  1. Koma Kubernetes (minikube jî dê bixebite);
  2. Koma RabbitMQ (dikare li ser metalê tazî were bicîh kirin, û wekî komek birêkûpêk li Kubernetes ji nexşeya fermî ya Helm were çêkirin).

Ji bo nimûneya jêrîn, min RMQ li Kubernetes bicîh kir û jê re gazî kir rmq-old.

Amadekirina standê

1. Tabloya Helm dakêşin û piçekî biguherînin:

helm fetch --untar stable/rabbitmq-ha

Ji bo rehetiyê, me şîfreyek destnîşan kir, ErlangCookie û siyasetê bikin ha-allda ku ji hêla xwerû ve rêz di navbera hemî girêkên komê RMQ de hevdemkirî bin:

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. Tabloyê saz bikin:

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

3. Herin panela rêveberê RabbitMQ, rêzek nû biafirînin û çend peyaman lê zêde bikin. Ew ê hewce bibin da ku piştî koçberiyê em piştrast bikin ku hemî dane parastî ne û me tiştek winda nekiriye:

Seamless RabbitMQ ber bi koça Kubernetes

Pîvana testê amade ye: RabbitMQ-ya "kevn" bi daneyên ku divê bêne veguheztin heye.

Koçkirina komek RabbitMQ

1. Pêşîn, em RabbitMQ-ya nû tê de bicîh bikin heval navan bi wek yên din ErlangCookie û şîfreya ji bo bikarhêner. Ji bo vê yekê, em ê operasyonên ku li jor hatine destnîşan kirin pêk bînin, emrê paşîn ji bo sazkirina RMQ li jêr biguhezînin:

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

2. Naha hûn hewce ne ku koma nû bi ya kevin re bikin yek. Ji bo kirina vê yekê, herin her yek ji kulikan RabbitMQ û fermanan bicîh bînin:

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

Di guherbar OLD_RMQ navnîşana yek ji girêkan tê dîtin kevn Kluster RMQ.

Van fermanan dê girêka heyî rawestînin Koma RMQ, wê bi koma kevn ve girêdin û wê dîsa bidin destpêkirin.

3. Koma RMQ ya 6 nod amade ye:

Seamless RabbitMQ ber bi koça Kubernetes

Divê hûn li bendê bimînin dema ku peyam di navbera hemî girêkan de têne hevdem kirin. Ne dijwar e ku meriv texmîn bike ku dema hevdengkirina peyamê bi kapasîteya hardware ya ku komê li ser hatî bicîh kirin û bi hejmara peyaman ve girêdayî ye. Di senaryoya diyarkirî de, tenê 10 ji wan hene, ji ber vê yekê daneya tavilê hate senkronîze kirin, lê digel hejmarek têra xwe ya peyaman, hevdemkirin dikare bi demjimêran bidome.

Ji ber vê yekê, rewşa hevdemkirinê:

Seamless RabbitMQ ber bi koça Kubernetes

Ev e +5 tê vê wateyê ku peyam jixwe tê de ne bêtir li ser 5 girêkan (ji bilî yên ku di qadê de têne destnîşan kirin Node). Bi vî awayî, hevdemkirinê serkeftî bû.

4. Tiştê ku dimîne ev e ku hûn navnîşana RMQ ya di serîlêdanê de biguhezînin koma nû (çalakiyên taybetî yên li vir bi stûna teknolojiyê ya ku hûn bikar tînin û taybetmendiyên din ên serîlêdanê ve girêdayî ye), pişt re hûn dikarin ji ya kevin xatir bixwazin.

Ji bo operasyona dawîn (ango jixwe после guheztina serîlêdanê bo komikek nû) biçin her girêkekê kevn kom bikin û fermanan pêk bînin:

rabbitmqctl stop_app
rabbitmqctl reset

Komê girêkên kevn "ji bîr kir": hûn dikarin RMQ-ya kevn jêbikin, di wê gavê de tevger dê biqede.

bingotin: Ger hûn RMQ bi sertîfîkayan re bikar bînin, wê hingê tiştek bi bingehîn nayê guheztin - pêvajoya tevgerê dê bi heman rengî were meşandin.

vebiguherin

Pîlana diyarkirî hema hema ji bo hemî rewşan maqûl e dema ku em hewce ne ku RabbitMQ koç bikin an jî bi tenê biçin komek nû.

Di doza me de, dema ku RMQ ji gelek deveran gihîştî bû, zehmetî tenê carekê derketin, û me fersend nedît ku em navnîşana RMQ-ê li her derê biguhezînin navnîşek nû. Dûv re me RMQek nû di heman navan de bi heman etîketan ve da destpêkirin da ku ew bikeve bin servîs û servîsên heyî, û dema ku pod dest pê kir me etîketan bi destan manîpule kir, di destpêkê de wan jê kir da ku daxwaz nekevin ser RMQ-ê vala bike, û piştî ku peyam têne hevdem kirin wan dîsa lê zêde bike.

Me heman stratejiyê bikar anî dema ku RabbitMQ bi guhertoyek nû ya bi vehengek guhezbar nûve kir - her tişt mîna demjimêrek xebitî.

PS

Wekî berdewamiyek mentiqî ya vê materyalê, em gotarên li ser MongoDB (koçkirina ji serverek hardware berbi Kubernetes) û MySQL (em çawa vê DBMS-ê di hundurê Kubernetes de amade dikin) amade dikin. Ew ê di mehên pêş de bêne weşandin.

PPS

Li ser bloga me jî bixwînin:

Source: www.habr.com

Add a comment