RabbitMQ ir Erlang valodÄ rakstÄ«ts ziÅojumu brokeris, kas ļauj organizÄt kļūmjpÄrlÄces kopu ar pilnu datu replikÄciju vairÄkos mezglos, kur katrs mezgls var apkalpot lasÄ«Å”anas un rakstÄ«Å”anas pieprasÄ«jumus. TÄ kÄ ražoÅ”anas darbÄ«bÄ ir daudz Kubernetes klasteru, mÄs atbalstÄm lielu skaitu RabbitMQ instalÄciju un saskÄrÄmies ar nepiecieÅ”amÄ«bu migrÄt datus no viena klastera uz citu bez dÄ«kstÄves.
Šī darbība mums bija nepiecieŔama vismaz divos gadījumos:
Datu pÄrsÅ«tÄ«Å”ana no RabbitMQ klastera, kas neatrodas Kubernetes uz jaunu ā jau ākubernetizÄtuā (t.i., kas darbojas K8s podiÅos) ā klasteru.
RabbitMQ migrÄcija Kubernetes ietvaros no vienas nosaukumvietas uz citu (piemÄram, ja Ä·Ädes ir norobežotas ar nosaukumvietÄm, tad, lai pÄrsÅ«tÄ«tu infrastruktÅ«ru no vienas Ä·Ädes uz citu).
RakstÄ piedÄvÄtÄ recepte ir vÄrsta uz situÄcijÄm (bet neaprobežojas ar tÄm), kurÄs ir vecs RabbitMQ klasteris (piemÄram, no 3 mezgliem), kas atrodas vai nu jau K8s, vai arÄ« uz dažiem veciem serveriem. Kubernetes mitinÄta lietojumprogramma (jau tur vai nÄkotnÄ) darbojas ar to:
... un mÅ«su priekÅ”Ä ir uzdevums to migrÄt uz jauno iestudÄjumu Kubernetes.
Vispirms tiks aprakstÄ«ta vispÄrÄjÄ pieeja paÅ”ai migrÄcijai un pÄc tam tiks aprakstÄ«tas tÄs ievieÅ”anas tehniskÄs detaļas.
MigrÄcijas algoritms
Pirmais, sÄkotnÄjais posms pirms jebkÄdas darbÄ«bas ir pÄrbaudÄ«t, vai vecajÄ RabbitMQ instalÄcijÄ ir iespÄjots augstas pieejamÄ«bas režīms (HA). Iemesls ir acÄ«mredzams ā mÄs nevÄlamies zaudÄt nekÄdus datus. Lai veiktu Å”o pÄrbaudi, varat doties uz RabbitMQ administratora paneli un cilnÄ AdministrÄÅ”ana ā Politikas pÄrliecinieties, vai vÄrtÄ«ba ir iestatÄ«ta. ha-mode: all:
NÄkamais solis ir izveidot jaunu RabbitMQ klasteru Kubernetes podiÅos (mÅ«su gadÄ«jumÄ, piemÄram, sastÄv no 3 mezgliem, bet to skaits var bÅ«t atŔķirÄ«gs).
PÄc tam mÄs apvienojam vecos un jaunos RabbitMQ klasterus, iegÅ«stot vienu klasteru (no 6 mezgliem):
Tiek uzsÄkts datu sinhronizÄcijas process starp veco un jauno RabbitMQ klasteriem. Kad visi dati ir sinhronizÄti starp visiem klastera mezgliem, mÄs varam pÄrslÄgt lietojumprogrammu, lai izmantotu jauno klasteru:
PÄc Ŕīm darbÄ«bÄm pietiek noÅemt vecos mezglus no RabbitMQ klastera, un pÄrvietoÅ”anu var uzskatÄ«t par pabeigtu:
MÄs esam daudzkÄrt izmantojuÅ”i Å”o shÄmu ražoÅ”anÄ. TomÄr mÅ«su paÅ”u ÄrtÄ«bÄm mÄs to ieviesÄm specializÄtÄ sistÄmÄ, kas izplata standarta RMQ konfigurÄcijas vairÄkos Kubernetes klasteros. (tiem, kam ir interese: mÄs runÄjam par papildinÄjumu operatorspar ko mÄs nesen stÄstÄ«ja). TÄlÄk mÄs sniegsim individuÄlas instrukcijas, kuras ikviens var izmantot savÄs instalÄcijÄs, lai izmÄÄ£inÄtu piedÄvÄto risinÄjumu darbÄ«bÄ.
IzmÄÄ£inÄsim to praksÄ
Prasības
SÄ«kÄka informÄcija ir ļoti vienkÄrÅ”a:
Kubernetes klasteris (derÄs arÄ« minikube);
RabbitMQ klasteris (var izvietot uz tukÅ”a metÄla un izveidot kÄ parastu kopu Kubernetes no oficiÄlÄs Helm diagrammas).
TÄlÄk esoÅ”ajÄ piemÄrÄ es izvietoju RMQ vietnÄ Kubernetes un to nosaucu rmq-old.
Statīva sagatavoŔana
1. LejupielÄdÄjiet stÅ«res diagrammu un nedaudz rediÄ£Äjiet to:
helm fetch --untar stable/rabbitmq-ha
ÄrtÄ«bas labad mÄs iestatÄm paroli, ErlangCookie un taisÄ«t politiku ha-alllai pÄc noklusÄjuma rindas tiktu sinhronizÄtas starp visiem RMQ klastera mezgliem:
3. Dodieties uz RabbitMQ administratora paneli, izveidojiet jaunu rindu un pievienojiet vairÄkus ziÅojumus. Tie bÅ«s nepiecieÅ”ami, lai pÄc migrÄcijas mÄs varÄtu pÄrliecinÄties, ka visi dati ir saglabÄti un mÄs neko neesam zaudÄjuÅ”i:
PÄrbaudes stends ir gatavs: mums ir āvecaisā RabbitMQ ar datiem, kas jÄpÄrsÅ«ta.
RabbitMQ klastera migrÄÅ”ana
1. Vispirms izvietosim jauno RabbitMQ draugs nosaukumvieta ar tas patsErlangCookie un lietotÄja paroli. Lai to izdarÄ«tu, mÄs veiksim iepriekÅ” aprakstÄ«tÄs darbÄ«bas, mainot pÄdÄjo RMQ instalÄÅ”anas komandu uz Å”Ädu:
helm install . --name rmq-new --namespace rmq-new
2. Tagad jums ir jÄapvieno jaunais klasteris ar veco. Lai to izdarÄ«tu, dodieties uz katru no pÄkstÄ«m jauns RabbitMQ un izpildiet komandas:
MainÄ«gÄ OLD_RMQ tiek atrasta viena no mezgliem adrese vecs RMQ klasteris.
Å Ä«s komandas apturÄs paÅ”reizÄjo mezglu jauns RMQ klasteris, pievienojiet to vecajam klasterim un palaidiet to vÄlreiz.
3. 6 mezglu RMQ klasteris ir gatavs:
Jums jÄgaida, kamÄr ziÅojumi tiek sinhronizÄti starp visiem mezgliem. Nav grÅ«ti uzminÄt, ka ziÅojumu sinhronizÄcijas laiks ir atkarÄ«gs no aparatÅ«ras jaudas, uz kuras ir izvietots klasteris, un no ziÅojumu skaita. AprakstÄ«tajÄ scenÄrijÄ tie ir tikai 10, tÄpÄc dati tika sinhronizÄti momentÄni, bet ar pietiekami lielu ziÅojumu skaitu sinhronizÄcija var ilgt stundÄm.
TÄtad, sinhronizÄcijas statuss:
Å eit +5 nozÄ«mÄ, ka ziÅojumi jau ir ienÄkuÅ”i vairÄk uz 5 mezgliem (izÅemot to, kas norÄdÄ«ts laukÄ Node). TÄdÄjÄdi sinhronizÄcija bija veiksmÄ«ga.
4. Atliek tikai pÄrslÄgt RMQ adresi aplikÄcijÄ uz jauno klasteru (konkrÄtÄs darbÄ«bas Å”eit ir atkarÄ«gas no izmantotÄ tehnoloÄ£iju steka un citas aplikÄcijas specifikas), pÄc kÄ var atvadÄ«ties no vecÄs.
Par pÄdÄjo operÄciju (t.i., jau pÄc lietojumprogrammas pÄrslÄgÅ”ana uz jaunu kopu) dodieties uz katru mezglu vecs klasteri un izpildiet komandas:
rabbitmqctl stop_app
rabbitmqctl reset
Klasteris āaizmirsaā par vecajiem mezgliem: varat izdzÄst veco RMQ, kurÄ brÄ«dÄ« pÄrvietoÅ”ana tiks pabeigta.
PiezÄ«me: Ja izmantojat RMQ ar sertifikÄtiem, nekas bÅ«tiski nemainÄs - pÄrvietoÅ”anas process tiks veikts tieÅ”i tÄpat.
Atzinumi
AprakstÄ«tÄ shÄma ir piemÄrota gandrÄ«z visiem gadÄ«jumiem, kad mums ir nepiecieÅ”ams migrÄt RabbitMQ vai vienkÄrÅ”i pÄriet uz jaunu klasteru.
MÅ«su gadÄ«jumÄ grÅ«tÄ«bas radÄs tikai vienu reizi, kad RMQ tika piekļūts no daudzÄm vietÄm, un mums nebija iespÄjas nomainÄ«t RMQ adresi uz jaunu visur. PÄc tam tajÄ paÅ”Ä nosaukumvietÄ iedarbinÄjÄm jaunu RMQ ar vienÄdÄm etiÄ·etÄm, lai tas ietilptu esoÅ”ajos servisos un Ingresses, un, palaižot podziÅu, mÄs ar rokÄm manipulÄjÄm ar etiÄ·etÄm, sÄkumÄ tÄs noÅemot, lai pieprasÄ«jumi nenonÄktu uz tukÅ”u RMQ un pievienojiet tos atpakaļ pÄc ziÅojumu sinhronizÄcijas.
MÄs izmantojÄm to paÅ”u stratÄÄ£iju, atjauninot RabbitMQ uz jaunu versiju ar mainÄ«tu konfigurÄciju - viss darbojÄs kÄ pulkstenis.
PS
KÄ loÄ£isks Ŕī materiÄla turpinÄjums mÄs gatavojam rakstus par MongoDB (migrÄcija no aparatÅ«ras servera uz Kubernetes) un MySQL (kÄ mÄs sagatavojam Å”o DBVS Kubernetes iekÅ”ienÄ). Tie tiks publicÄti tuvÄko mÄneÅ”u laikÄ.