Orchestrator un VIP kÄ HA risinÄjums MySQL klasterim
UzÅÄmums Citymobil kÄ galveno pastÄvÄ«go datu krÄtuvi izmantojam MySQL datu bÄzi. Mums ir vairÄki datu bÄzu klasteri dažÄdiem pakalpojumiem un mÄrÄ·iem.
KapteiÅa pastÄvÄ«gÄ pieejamÄ«ba ir kritisks rÄdÄ«tÄjs visas sistÄmas un tÄs atseviŔķu daļu veiktspÄjai. AutomÄtiskÄ klasteru atkopÅ”ana galvenÄs kļūmes gadÄ«jumÄ ievÄrojami samazina incidentu reakcijas laiku un sistÄmas dÄ«kstÄves laiku. Å ajÄ rakstÄ es aplÅ«koÅ”u augstas pieejamÄ«bas (HA) dizainu MySQL klasterim, kura pamatÄ ir MySQL Orchestrator un virtuÄlÄs IP adreses (VIP).
HA risinÄjums, kas balstÄ«ts uz VIP
Vispirms es Ä«si pastÄstÄ«Å”u, kas ir mÅ«su datu uzglabÄÅ”anas sistÄma.
MÄs izmantojam klasisko replikÄcijas shÄmu ar vienu rakstÄ«Å”anai pieejamu Å”ablonu un vairÄkÄm tikai lasÄmÄm replikÄm. Klasteris var saturÄt starpposma galveno elementu ā mezglu, kas ir gan replika, gan galvenais citiem. Klienti piekļūst replikÄm, izmantojot HAProxy, kas nodroÅ”ina vienmÄrÄ«gu slodzes sadalÄ«jumu un vieglu mÄrogoÅ”anu. HAProxy izmantoÅ”ana ir saistÄ«ta ar vÄsturiskiem iemesliem, un paÅ”laik notiek migrÄÅ”ana uz ProxySQL.
ReplikÄcija tiek veikta daļÄji sinhronÄ režīmÄ, pamatojoties uz GTID. Tas nozÄ«mÄ, ka vismaz vienai replikai ir jÄreÄ£istrÄ darÄ«jums, lai to uzskatÄ«tu par veiksmÄ«gu. Å is replikÄcijas režīms nodroÅ”ina optimÄlu lÄ«dzsvaru starp veiktspÄju un datu droŔību galvenÄ mezgla kļūmes gadÄ«jumÄ. BÅ«tÄ«bÄ visas izmaiÅas tiek pÄrsÅ«tÄ«tas no galvenÄ uz replikÄm, izmantojot Row Based Replication (RBR), bet dažiem mezgliem var bÅ«t mixed binlog format.
OrÄ·estris periodiski atjaunina klastera topoloÄ£ijas stÄvokli, analizÄ saÅemto informÄciju un, ja rodas problÄmas, var uzsÄkt automÄtisku atkopÅ”anas procedÅ«ru. IzstrÄdÄtÄjs ir atbildÄ«gs par paÅ”u procedÅ«ru, jo to var ieviest dažÄdos veidos: pamatojoties uz VIP, DNS, izmantojot pakalpojumu atklÄÅ”anas pakalpojumus vai paÅ”rakstÄ«tus mehÄnismus.
Viens vienkÄrÅ”s veids, kÄ atjaunot galveno, ja tas neizdodas, ir izmantot peldoÅ”Äs VIP adreses.
Kas jums jÄzina par Å”o risinÄjumu, pirms turpinÄt darbu:
VIP ir IP adrese, kas nav saistÄ«ta ar konkrÄtu fizisko tÄ«kla interfeisu. Ja mezgls neizdodas vai tiek veikta plÄnotÄ apkope, mÄs varam pÄrslÄgt VIP uz citu resursu ar minimÄlu dÄ«kstÄvi.
VirtuÄlÄs IP adreses atbrÄ«voÅ”ana un izsniegÅ”ana ir lÄta un Ätra darbÄ«ba.
Lai strÄdÄtu ar VIP, jums ir nepiecieÅ”ama piekļuve serverim, izmantojot SSH, vai, piemÄram, Ä«paÅ”u utilÄ«tu izmantoÅ”ana, keepalived.
ApskatÄ«sim iespÄjamÄs problÄmas ar mÅ«su vedni un iedomÄsimies, kÄ jÄdarbojas automÄtiskajam atkopÅ”anas mehÄnismam.
TÄ«kla savienojums ar galveno ierÄ«ci ir pazudis vai ir radusies problÄma aparatÅ«ras lÄ«menÄ«, un serveris nav pieejams
OrÄ·estris atjaunina klastera topoloÄ£iju, un katra replika ziÅo, ka kapteinis nav pieejams. OrÄ·estris sÄk jaunÄ meistara lomai piemÄrotas kopijas atlases procesu un sÄk atveseļoÅ”anos.
MÄÄ£inÄm noÅemt VIP no vecmeistara - bez panÄkumiem.
Replika pÄriet uz meistara lomu. TopoloÄ£ija tiek pÄrbÅ«vÄta.
Jauna tÄ«kla saskarnes pievienoÅ”ana ar VIP. TÄ kÄ VIP nebija iespÄjams noÅemt, mÄs periodiski sÄkam sÅ«tÄ«t pieprasÄ«jumu fonÄ bezmaksas ARP. Å Äda veida pieprasÄ«jums/atbilde ļauj atjauninÄt pievienoto slÄdžu IP un MAC adreÅ”u kartÄÅ”anas tabulu, tÄdÄjÄdi paziÅojot, ka mÅ«su VIP ir pÄrcÄlies. Tas samazina iespÄjamÄ«bu split brain atgriežot vecmeistaru.
Visi jaunie savienojumi tiek nekavÄjoties novirzÄ«ti uz jauno galveno. Vecie savienojumi neizdodas, un lietojumprogrammas lÄ«menÄ« tiek veikti atkÄrtoti izsaukumi uz datu bÄzi.
Serveris darbojas normÄlÄ režīmÄ, radÄs kļūme DBVS lÄ«menÄ«
Algoritms ir lÄ«dzÄ«gs iepriekÅ”Äjam gadÄ«jumam: topoloÄ£ijas atjauninÄÅ”ana un atkopÅ”anas procesa sÄkÅ”ana. TÄ kÄ serveris ir pieejams, mÄs veiksmÄ«gi atbrÄ«vojam VIP uz vecÄ galvenÄ, pÄrsÅ«tÄm to uz jauno un nosÅ«tÄm vairÄkus ARP pieprasÄ«jumus. IespÄjamÄ vecÄ meistara atgrieÅ”ana nedrÄ«kst ietekmÄt pÄrbÅ«vÄto klasteru un lietojumprogrammas darbÄ«bu.
Citas problÄmas
Kopiju vai starpposma meistaru neveiksmes neved automÄtiskÄm darbÄ«bÄm un nepiecieÅ”ama manuÄla iejaukÅ”anÄs.
VirtuÄlÄ tÄ«kla saskarne vienmÄr tiek pievienota Ä«slaicÄ«gi, tas ir, pÄc servera atsÄknÄÅ”anas VIP netiek automÄtiski pieŔķirts. Katrs datu bÄzes gadÄ«jums pÄc noklusÄjuma sÄkas tikai lasÄ«Å”anas režīmÄ, orÄ·estrÄtÄjs automÄtiski pÄrslÄdz jauno galveno, lai rakstÄ«tu un mÄÄ£ina instalÄt read only par vecmeistaru. Å o darbÄ«bu mÄrÄ·is ir samazinÄt iespÄjamÄ«bu split brain.
AtkopÅ”anas procesa laikÄ var rasties problÄmas, par kurÄm papildus standarta uzraudzÄ«bas rÄ«kiem ir jÄinformÄ arÄ« orÄ·estra lietotÄja saskarne. MÄs esam paplaÅ”inÄjuÅ”i REST API, pievienojot Å”o funkciju (PR paÅ”laik tiek pÄrskatÄ«ts).
HA risinÄjuma vispÄrÄjÄ diagramma ir parÄdÄ«ta zemÄk.
Jauna meistara izvÄle
OrÄ·estris ir pietiekami gudrs un cenÅ”as izvÄlÄties vispiemÄrotÄkÄ kopija kÄ jauns meistars pÄc Å”Ädiem kritÄrijiem:
replika atpaliek no meistara;
Master un replikas MySQL versija;
replikÄcijas veids (RBR, SBR vai jaukts);
atraÅ”anÄs vieta tajÄ paÅ”Ä vai dažÄdos datu centros;
pieejamÄ«ba errant GTID ā transakcijas, kas tika veiktas reprodukcijÄ un neatrodas galvenajÄ ierÄ«cÄ;
tiek Åemti vÄrÄ arÄ« pielÄgotie atlases noteikumi.
Ne katrs signÄls ir ideÄls meistara kandidÄts. PiemÄram, reprodukciju var izmantot datu dublÄÅ”anai, vai arÄ« serverim ir vÄjÄka aparatÅ«ras konfigurÄcija. OrÄ·estris atbalsta manuÄli noteikumi, ar kuriem jÅ«s varat pielÄgot kandidÄtu atlases preferences no vispiemÄrotÄkÄs uz ignorÄtajÄm.
Reakcijas un atveseļoÅ”anÄs laiks
NegadÄ«juma gadÄ«jumÄ ir svarÄ«gi samazinÄt sistÄmas dÄ«kstÄves laiku, tÄpÄc Åemsim vÄrÄ MySQL parametrus, kas ietekmÄ klastera topoloÄ£ijas izveidi un atjauninÄÅ”anu, ko veicis orÄ·estrÄtÄjs:
slave_net_timeout ā sekunžu skaits, kuru laikÄ replika gaida jaunus datus vai sirdsdarbÄ«bas signÄlu, kas tiek saÅemts no galvenÄ datora, pirms savienojums tiek atzÄ«ts par zaudÄtu un izveidots no jauna. Jo zemÄka ir vÄrtÄ«ba, jo ÄtrÄk kopija var noteikt, ka saziÅa ar meistaru ir pÄrtraukta. MÄs iestatÄ«jÄm Å”o vÄrtÄ«bu uz 5 sekundÄm.
MASTER_CONNECT_RETRY ā sekunžu skaits starp atkÄrtotas savienoÅ”anas mÄÄ£inÄjumiem. TÄ«kla problÄmu gadÄ«jumÄ zema Ŕī parametra vÄrtÄ«ba ļaus Ätri izveidot savienojumu un neļaus sÄkt klastera atkopÅ”anas procesu. IeteicamÄ vÄrtÄ«ba ir 1 sekunde.
MASTER_HEARTBEAT_PERIOD ā intervÄls sekundÄs, pÄc kura kapteinis nosÅ«ta sirdsdarbÄ«bas signÄlu. NoklusÄjuma vÄrtÄ«ba ir puse no vÄrtÄ«bas slave_net_timeout.
OrÄ·estra iespÄjas:
DelayMasterPromotionIfSQLThreadNotUpToDate - ja vienÄds true, tad galvenÄ loma kandidÄta replikÄ netiks lietota, kamÄr replikas SQL pavediens nebÅ«s pabeidzis visas neizmantotÄs transakcijas no pÄrraides žurnÄla. MÄs izmantojam Å”o opciju, lai nezaudÄtu darÄ«jumus, kad visas kandidÄtu kopijas atpaliek.
InstancePollSeconds ā topoloÄ£ijas veidoÅ”anas un atjauninÄÅ”anas biežums.
RecoveryPollSeconds ā topoloÄ£ijas analÄ«zes biežums. Ja tiek atklÄta problÄma, tiek uzsÄkta topoloÄ£ijas atkopÅ”ana. Å is nemainÄ«gs, vienÄds ar 1 sekundi.
Katru klastera mezglu orÄ·estrÄtÄjs aptaujÄ vienu reizi InstancePollSeconds sekundes Kad tiek konstatÄta problÄma, klastera stÄvoklis tiek piespiests atjauninÄts, un tad tiek pieÅemts galÄ«gais lÄmums veikt atkopÅ”anu. EksperimentÄjot ar dažÄdiem datu bÄzes un orÄ·estratora parametriem, mÄs varÄjÄm samazinÄt reakcijas un atkopÅ”anas laiku lÄ«dz 30 sekundÄm.
Testa stends
MÄs sÄkÄm testÄt HA shÄmu, izstrÄdÄjot lokÄlo testu stends un turpmÄka ievieÅ”ana testa un ražoÅ”anas vidÄs. VietÄjais stends ir pilnÄ«bÄ automatizÄts, pamatojoties uz Docker, un ļauj eksperimentÄt ar orÄ·estratora un tÄ«kla konfigurÄciju, mÄrogot kopu no 2-3 serveriem lÄ«dz vairÄkiem desmitiem un veikt vingrinÄjumus droÅ”Ä vidÄ.
VingrinÄjumu laikÄ mÄs izvÄlamies vienu no problÄmu emulÄcijas metodÄm: uzreiz noÅ”aut meistaru, izmantojot kill -9, maigi pÄrtrauciet procesu un apturiet serveri (docker-compose stop), simulÄ tÄ«kla problÄmas, izmantojot iptables -j REJECT vai iptables -j DROP. MÄs sagaidÄm Å”Ädus rezultÄtus:
orÄ·estrÄtÄjs atklÄs problÄmas ar meistaru un atjauninÄs topoloÄ£iju ne vairÄk kÄ 10 sekundÄs;
automÄtiski sÄksies atkopÅ”anas procedÅ«ra: mainÄ«sies tÄ«kla konfigurÄcija, galvenÄ loma tiks nodota kopijai, topoloÄ£ija tiks pÄrbÅ«vÄta;
jaunais meistars kļūs rakstÄms, dzÄ«vÄs kopijas pÄrbÅ«ves procesÄ netiks zaudÄtas;
datus sÄks rakstÄ«t jaunajam meistaram un replicÄt;
KopÄjais atkopÅ”anas laiks bÅ«s ne vairÄk kÄ 30 sekundes.
KÄ zinÄms, sistÄma testÄÅ”anas un ražoÅ”anas vidÄs var darboties atŔķirÄ«gi dažÄdu aparatÅ«ras un tÄ«kla konfigurÄciju, sintÄtiskÄs un reÄlÄs slodzes atŔķirÄ«bu dÄļ utt. TÄpÄc mÄs periodiski veicam vingrinÄjumus reÄlos apstÄkļos, pÄrbaudot, kÄ sistÄma uzvedas, ja tiek zaudÄta tÄ«kla savienojamÄ«ba vai tÄs atseviŔķas daļas ir degradÄtas. NÄkotnÄ vÄlamies izveidot pilnÄ«gi identisku infrastruktÅ«ru abÄm vidÄm un automatizÄt tÄs testÄÅ”anu.
Atzinumi
GalvenÄ krÄtuves sistÄmas mezgla veselÄ«ba ir viens no galvenajiem SRE un operÄciju komandas uzdevumiem. OrÄ·estratora un HA risinÄjuma ievieÅ”ana, pamatojoties uz VIP, ļÄva mums sasniegt Å”Ädus rezultÄtus:
uzticama datu bÄzes klastera topoloÄ£ijas problÄmu noteikÅ”ana;
automÄtiska un Ätra reakcija uz ar meistaru saistÄ«tiem incidentiem, samazinot sistÄmas dÄ«kstÄves laiku.
TomÄr risinÄjumam ir savi ierobežojumi un trÅ«kumi:
lai mÄrogotu HA shÄmu vairÄkiem datu centriem, starp tiem bÅ«s nepiecieÅ”ams viens L2 tÄ«kls;
Pirms VIP pieŔķirÅ”anas jaunajam galvenajam, mums tas ir jÄatbrÄ«vo vecajÄ. Process ir secÄ«gs, kas palielina atveseļoÅ”anÄs laiku;
VIP atbrÄ«voÅ”anai nepiecieÅ”ama SSH piekļuve serverim vai jebkura cita attÄlo procedÅ«ru izsaukÅ”anas metode. TÄ kÄ serverÄ« vai datu bÄzÄ ir problÄmas, kas izraisÄ«ja atkopÅ”anas procesu, mÄs nevaram bÅ«t pÄrliecinÄti, ka VIP noÅemÅ”ana tiks veiksmÄ«gi pabeigta. Un tas var izraisÄ«t divu serveru parÄdÄ«Å”anos ar vienÄdu virtuÄlo IP adresi un problÄmu split brain.
IzvairÄ«ties split brain, varat izmantot metodi STONITS (āShoot The Other Node In The Headā), kas pilnÄ«bÄ izolÄ vai atspÄjo problÄmas mezglu. Ir arÄ« citi veidi, kÄ ieviest klastera augstu pieejamÄ«bu: VIP un DNS kombinÄcija, pakalpojumu atklÄÅ”anas un starpniekservera pakalpojumi, sinhronÄ replikÄcija un citas metodes, kurÄm ir savi trÅ«kumi un priekÅ”rocÄ«bas.
Es runÄju par mÅ«su pieeju MySQL kļūmjpÄrlÄces klastera izveidei. Tas ir viegli Ä«stenojams un nodroÅ”ina pieÅemamu uzticamÄ«bas lÄ«meni paÅ”reizÄjos apstÄkļos. AttÄ«stoties visai sistÄmai kopumÄ un jo Ä«paÅ”i infrastruktÅ«rai, Ŕī pieeja neapÅ”aubÄmi attÄ«stÄ«sies.