ProHoster > Blogs > AdministrÄcija > Orchestrator for MySQL: kÄpÄc jÅ«s nevarat izveidot defektu izturÄ«gu projektu bez tÄ
Orchestrator for MySQL: kÄpÄc jÅ«s nevarat izveidot defektu izturÄ«gu projektu bez tÄ
JebkurÅ” liels projekts sÄkÄs ar pÄris serveriem. SÄkumÄ bija viens DB serveris, tad tam tika pievienoti vergi, lai mÄrogotu nolasÄ«jumu. Un tad - stop! Ir viens saimnieks, bet daudz vergu; ja kÄds no vergiem aizies, tad viss bÅ«s kÄrtÄ«bÄ, bet ja saimnieks aizies, tad bÅ«s slikti: dÄ«kstÄve, admini mÄÄ£ina serveri pacelt. Ko darÄ«t? RezervÄjiet meistaru. Mans kolÄÄ£is PÄvels par to jau rakstÄ«ja raksts, Es to neatkÄrtoÅ”u. TÄ vietÄ es jums pastÄstÄ«Å”u, kÄpÄc jums noteikti ir nepiecieÅ”ams Orchestrator for MySQL!
SÄksim ar galveno jautÄjumu: "KÄ mÄs pÄrslÄgsim kodu uz jaunu maŔīnu, kad meistars aizies?"
Man visvairÄk patÄ«k shÄma ar VIP (Virtual IP), par to mÄs runÄsim tÄlÄk. Tas ir visvienkÄrÅ”Äkais un acÄ«mredzamÄkais, lai gan tam ir acÄ«mredzams ierobežojums: kapteinim, kuru mÄs rezervÄsim, ar jauno maŔīnu jÄatrodas L2 segmentÄ, tas ir, mÄs varam aizmirst par otro DC. Un, draudzÄ«gÄ veidÄ, ja ievÄro likumu, ka liels L2 ir ļauns, jo L2 ir tikai uz statÄ«vu, bet L3 ir starp statÄ«viem, un Å”Ädai shÄmai ir vÄl vairÄk ierobežojumu.
KodÄ varat ierakstÄ«t DNS nosaukumu un atrisinÄt to, izmantojot /etc/hosts. PatiesÄ«bÄ rezolÅ«cijas nebÅ«s. ShÄmas priekÅ”rocÄ«ba: nav ierobežojumu, kas raksturÄ«gi pirmajai metodei, tas ir, ir iespÄjams organizÄt krustenisko lÄ«dzstrÄvu. Bet tad rodas acÄ«mredzams jautÄjums: cik Ätri mÄs varam piegÄdÄt izmaiÅas uz /etc/hosts, izmantojot Puppet-Ansible?
Varat nedaudz mainÄ«t otro metodi: visos tÄ«mekļa serveros instalÄjiet keÅ”atmiÅas DNS, caur kuru kods nonÄks galvenajÄ datu bÄzÄ. Å im DNS ierakstam varat iestatÄ«t TTL 60. Å Ä·iet, ka, pareizi Ä«stenojot, metode ir laba.
ShÄma ar pakalpojumu atklÄÅ”anu, kas nozÄ«mÄ, ka tiek izmantots konsuls utt.
Interesants variants ar ProxySQL. Visa trafika ir jÄnovirza uz MySQL, izmantojot ProxySQL; pati ProxySQL var noteikt, kurÅ” ir galvenais. Starp citu, par vienu no Ŕī produkta lietoÅ”anas iespÄjÄm varat izlasÄ«t manÄ raksts.
Orchestrator autors, strÄdÄjot GithubÄ, vispirms ieviesa pirmo shÄmu ar VIP, un pÄc tam pÄrveidoja to par shÄmu ar konsulu.
Tipisks infrastruktÅ«ras izkÄrtojums:
Es nekavÄjoties aprakstÄ«Å”u acÄ«mredzamÄs situÄcijas, kas jÄÅem vÄrÄ:
VIP adrese nedrÄ«kst bÅ«t reÄ£istrÄta neviena servera konfigurÄcijÄ. IedomÄsimies situÄciju: kapteinis pÄrstartÄja, un, kamÄr tas tika ielÄdÄts, Orchestrator pÄrgÄja kļūmjpÄrlÄces režīmÄ un padarÄ«ja vienu no vergiem par meistaru; tad vecmeistars piecÄlÄs, un tagad VIP ir uz divÄm maŔīnÄm. Tas ir slikti.
OrÄ·estratoram jums bÅ«s jÄuzraksta skripts, lai izsauktu veco meistaru un jauno meistaru. Uz vecÄ meistara jÄskrien ifdown, bet uz jaunÄ meistara ā ifup vip. BÅ«tu jauki Å”ajÄ skriptÄ iekļaut arÄ« to, ka kļūmjpÄrlÄces gadÄ«jumÄ vecÄ galvenÄ slÄdža ports tiek vienkÄrÅ”i izslÄgts, lai izvairÄ«tos no smadzeÅu sadalÄ«Å”anas.
PÄc tam, kad Orchestrator ir izsaucis jÅ«su skriptu, lai vispirms noÅemtu VIP un/vai dzÄstu slÄdža portu, un pÄc tam izsaucis VIP paaugstinÄÅ”anas skriptu jaunajam galvenajam, neaizmirstiet izmantot komandu arping, lai paziÅotu visiem, ka jaunais VIP tagad ir Å”eit.
Visiem pakÄrtotajiem elementiem ir jÄbÅ«t tikai read_only=1, un, tiklÄ«dz jÅ«s paaugstinÄsit vergu par galveno, tam vajadzÄtu bÅ«t tikai read_only=0.
Neaizmirstiet, ka ikviens vergs, kuru esam izvÄlÄjuÅ”ies Å”im mÄrÄ·im, var kļūt par kungu (OrÄ·estram ir viss izvÄles mehÄnisms, kuru vergu uzskatÄ«t par jauna kunga kandidÄtu vispirms, kuru, otrkÄrt, un kuru vergu vajadzÄtu uzskatÄ«t nekÄdÄ gadÄ«jumÄ nedrÄ«kst izvÄlÄties meistaru). Ja vergs kļūst par saimnieku, tad verga slodze uz tÄ paliks un saimnieka slodze tiks pieskaitÄ«ta, tas ir jÄÅem vÄrÄ.
KÄpÄc jums ir nepiecieÅ”ams Orchestrator, ja jums tÄda nav?
Orchestrator ir ļoti lietotÄjam draudzÄ«gs grafiskais interfeiss, kas parÄda visu topoloÄ£iju (skatiet ekrÄnuzÅÄmumu zemÄk).
Orchestrator var izsekot, kuri vergi atpaliek un kur replikÄcija parasti ir sabojÄjusies (mums ir Orchestrator pievienoti skripti SMS sÅ«tÄ«Å”anai).
Orchestrator norÄda, kuriem vergiem ir GTID kļūda.
OrÄ·estra interfeiss:
Kas ir GTID kļūdains?
OrÄ·estra darbam ir divas galvenÄs prasÄ«bas:
Ir nepiecieÅ”ams, lai pseido GTID bÅ«tu iespÄjots visÄs MySQL klastera maŔīnÄs; mums ir iespÄjots GTID.
Ir nepiecieÅ”ams, lai visur bÅ«tu viena veida binlogi, varat izmantot paziÅojumu. Mums bija konfigurÄcija, kurÄ galvenajam un lielÄkajai daļai vergu bija Row, un divi vÄsturiski palika jauktÄ režīmÄ. RezultÄtÄ Orchestrator vienkÄrÅ”i nevÄlÄjÄs savienot Å”os vergus ar jauno meistaru.
Atcerieties, ka ražoÅ”anas vergÄ vissvarÄ«gÄkais ir tÄ atbilstÄ«ba saimniekam! Ja gan galvenajÄ, gan pakÄrtotajÄ ierÄ«cÄ ir iespÄjots Global Transaction ID (GTID), varat izmantot funkciju gtid_subset, lai noskaidrotu, vai Å”ajÄs iekÄrtÄs ir izpildÄ«ti tie paÅ”i datu izmaiÅu pieprasÄ«jumi. JÅ«s varat lasÄ«t vairÄk par Å”o Å”eit.
TÄdÄjÄdi Orchestrator, izmantojot GTID kļūdu, parÄda, ka ar pakÄrtoto ierÄ«ci ir transakcijas, kuras nav galvenajÄ ierÄ«cÄ. KÄpÄc tas notiek?
SlavejÄ nav iespÄjots Read_only=1, kÄds izveidoja savienojumu un pabeidza datu maiÅas pieprasÄ«jumu.
Uz vergu nav iespÄjots Super_read_only=1, tad admins, sajaucis serveri, iegÄja un tur izpildÄ«ja pieprasÄ«jumu.
Ja ÅÄmÄt vÄrÄ abus iepriekÅ”Äjos punktus, tad ir vÄl viens triks: MySQL binlogu izskaloÅ”anas pieprasÄ«jums nonÄk arÄ« binlogÄ, tÄpÄc pirmajÄ skaloÅ”anas reizÄ uz galvenÄ un visiem vergu parÄdÄ«sies GTID kļūda. KÄ no tÄ izvairÄ«ties? Perona-5.7.25-28 ieviesa iestatÄ«jumu binlog_skip_flush_commands=1, kas aizliedz rakstÄ«t viļÅus binlogos. VietnÄ mysql.com ir izveidota tÄda kļūda.
Ä»aujiet man apkopot visu iepriekÅ” minÄto. Ja vÄl nevÄlaties izmantot Orchestrator kļūmjpÄrlÄces režīmÄ, ievietojiet to novÄroÅ”anas režīmÄ. Tad jÅ«su acu priekÅ”Ä vienmÄr bÅ«s MySQL maŔīnu mijiedarbÄ«bas karte un vizuÄla informÄcija par to, kÄda veida replikÄcija ir katrÄ maŔīnÄ, vai vergi atpaliek un galvenais, cik tie ir saskaÅoti ar galveno!
AcÄ«mredzamais jautÄjums ir: "KÄ Orchestrator vajadzÄtu strÄdÄt?" ViÅam ir jÄatlasa jauns galvenais no esoÅ”ajiem pakÄrtotajiem un pÄc tam atkal jÄsavieno ar to visi vergi (Å”im nolÅ«kam ir nepiecieÅ”ams GTID; ja izmantojat veco mehÄnismu ar binlog_name un binlog_pos, tad pÄrslÄdziet vergu no paÅ”reizÄjÄ galvenÄ uz jaunu tas ir vienkÄrÅ”i neiespÄjami!). Pirms mums bija Orchestrator, man reiz tas viss bija jÄdara manuÄli. Vecais meistars karÄjÄs bagija Adaptec kontroliera dÄļ, tajÄ bija apmÄram 10 vergi. Man vajadzÄja pÄrsÅ«tÄ«t VIP no galvenÄ uz vienu no vergu un no jauna savienot visus pÄrÄjos vergus. Cik konsoles man bija jÄatver, cik vienlaicÄ«gu komandu man bija jÄievada... Man bija jÄgaida lÄ«dz 3 naktÄ«, jÄnoÅem slodze no visiem vergiem, izÅemot divus, jÄuztaisa pirmÄ maŔīna no diviem galvenajiem, nekavÄjoties jÄpievieno otra maŔīna pie tÄ, tÄpÄc piestipriniet visus pÄrÄjos vergus jaunajam saimniekam un atdodiet kravu. KopumÄ Å”ausmÄ«gi...
KÄ Orchestrator darbojas, kad tas pÄriet kļūmjpÄrlÄces režīmÄ? To visvieglÄk ilustrÄ piemÄrs situÄcijai, kad mÄs vÄlamies meistaru padarÄ«t par jaudÄ«gÄku, modernÄku maŔīnu nekÄ Å”obrÄ«d.
AttÄlÄ parÄdÄ«ts procesa vidus. Kas lÄ«dz Å”im jau ir izdarÄ«ts? MÄs teicÄm, ka vÄlamies kÄdu vergu padarÄ«t par jauno saimnieku, Orchestrator sÄka vienkÄrÅ”i savienot visus citus vergus ar to, jaunajam kapteinim darbojoties kÄ tranzÄ«ta maŔīnai. Ar Å”o shÄmu kļūdas nerodas, strÄdÄ visi vergi, Orchestrator noÅem VIP no vecÄ meistara, pÄrsÅ«ta uz jauno, padara read_only=0 un aizmirst par veco meistaru. Visi! MÅ«su pakalpojuma dÄ«kstÄve ir VIP pÄrsÅ«tÄ«Å”anas laiks, kas ir 2-3 sekundes.
Tas arÄ« viss Å”odienai, paldies visiem. DrÄ«zumÄ bÅ«s otrs raksts par Orchestrator. SlavenajÄ padomju filmÄ āGarÄžaā viens varonis teica: āEs ar viÅu nedotos izlÅ«kos!ā TÄtad, orÄ·estra kungs, es dotos ar jums izlÅ«koÅ”anÄ!