SITIMOBILis kasutame MySQL andmebaasi kui peamist pĂŒsivate andmete salvestamise kohta. Meil on mitmeid andmebaasi klastreid erinevate teenuste ja eesmĂ€rkide tarvis.
Meistri pidev kĂ€ttesaadavus on kogu sĂŒsteemi ja selle osade toimimise kriitiline nĂ€itaja. Klastri automaatne taastamine meistri rikkega vĂ€hendab oluliselt reageerimisaega ja sĂŒsteemi seisu aega. Selles artiklis kĂ€sitlen MySQL klastrite kĂ”rge kĂ€ttesaadavuse (HA) tagamise skeemi, mis pĂ”hineb ja virtuaalsetel IP-aadressidel (VIP).

VIP-pÔhine HA-lahendus
Alustuseks rÀÀgin lĂŒhidalt meie andmesalvestussĂŒsteemist.
Kasutame klassikalist replikatsiooni schooti, kus on ĂŒks kirjutatav meister ja mitu replit, mida kasutatakse ainult lugemiseks. Klastri vĂ”ib sisaldada vahepealset meest â sĂ”lme, mis on samal ajal ka replik ja meister teistele. Klientide pĂ€ringud suunatakse replitelt lĂ€bi HAProxy, mis vĂ”imaldab koormust ĂŒhtlaselt jaotada ja hĂ”lpsasti skaleeruda. HAProxy kasutamine on ajaloost tulenev ning hetkel oleme migratsiooniprotsessis ProxySQL-ile.
Replikatsioon toimub pool-sĂŒnkroonse reĆŸiimi alusel GTID. See tĂ€hendab, et vĂ€hemalt ĂŒks replik peab kirjutama tehingu logisse, enne kui see loetakse edukaks. Selline replikatsiooni reĆŸiim tagab optimaalse tasakaalu jĂ”udluse ja andmete sĂ€ilitamise vahel peamise sĂ”lme rikete korral. Peamiselt edastatakse kĂ”ik muudatused meistrilt replitelle Row Based Replication (RBR), kuid osa sĂ”lme vĂ”ib omada mixed binlog format.
Orkestrator uuendab regulaarselt klastrite topoloogia staatust, analĂŒĂŒsib saadud teavet ja probleemide ilmnemisel saab kĂ€ivitada automaatse taastamisprotseduuri. Protseduuri eest vastutab arendaja, kuna seda saab ellu viia erinevatel viisidel: pĂ”hinedes VIP-l, DNS-il, teenuste avastamise teenuste (service discovery) vĂ”i enda lahenduste abil.
Ăks lihtsamaid viise meistri taastamiseks tema rikete korral on liikuvate VIP-aadresside kasutamine.
Mida tuleb selle lahenduse kohta teada, enne kui edasi minna:
- VIP on IP-aadress, mis ei ole seotud konkreetse fĂŒĂŒsilise vĂ”rgu liidesega. Kui sĂ”lm ebaĂ”nnestub vĂ”i toimub plaaniline töö, saame VIP-i suunata teisele ressursile minimaalse katkestusajaga.
- Virtuaalse IP-aadressi vabastamine ja vÀljastamine on odavad ja kiired toimingud.
- VIP-iga töötamiseks on vajalik juurdepÀÀs serverile SSH ĂŒle, vĂ”i kasutada spetsiaalseid utiliite, nĂ€iteks
keepalived.
Vaatame vÔimalikke probleeme meie meistriga ja kujutame ette, kuidas peaks tööle hakkama automaatse taastumise mehhanism.
VĂ”rguside meistriga on kadunud vĂ”i on tekkinud probleem âraudaâ tasemel, ja server pole kergesti saadaval.
- Orkestreerija vÀrskendab klastrite topoloogiat, iga koopia teatab meistri puudumisest. Orkestreerija kÀivitab protsessi, mille kÀigus valitakse uus meister ja kÀivitab taastamise.
- PĂŒĂŒame VIP-i vana meistrilt eemaldada â tulutult.
- Koopia vahetab meistri rolli. Topoloogia rekonstrueeritakse.
- Lisame uue vĂ”rgu liidese VIP-iga. Kuna VIP-i eemaldamine ei Ă”nnestunud, kĂ€ivitame taustal perioodilise pĂ€ringu saatmise gratuitous ARP. See pĂ€ring/vastus vĂ”imaldab vĂ€rskendada ĂŒhildatud lĂŒlitites IP- ja MAC-aadresside vastavustabelit, teavitades seega meie VIP-i liikumisest. See minimeerib tĂ”enĂ€osust
split brainvana meistri tagasiviimisel. - KĂ”ik uued ĂŒhendused suunatakse kohe uuele meistrile. Vanad ĂŒhendused lĂ”ppevad ebaĂ”nnestumisega, rakenduses tehakse korduvate pĂ€ringute saatmine andmebaasi.
Server töötab normaalses reĆŸiimis, andmebaasi tasemel on juhtunud tĂ”rge.
Algoritm on sarnane eelmise juhtumiga: topoloogia vÀrskendamine ja taastamisprotsessi kÀivitamine. Kuna server on saadaval, vabastame edukalt VIP-i vanalt meistrilt, kanname selle uuele ja saadame mitu ARP-pÀringut. Vana meistri tagasiviimine ei tohiks mÔjutada rekonstrueeritud klastrit ja rakenduse toimimist.
Teised probleemid
Koopiate vÔi vahepealsete meistrite rikke ei pÔhjusta automaatset tegutsemist ja nÔuab kÀsitsi sekkumist.
Virtuaalne vĂ”rguliides lisatakse alati ajutiselt, st pĂ€rast serveri taaskĂ€ivitamist ei mÀÀrata VIP automaatselt. Iga andmebaasi eksemplar kĂ€ivitub vaikesĂ€tete kohaselt ainult lugemise reĆŸiimis, orkestrator vahetab automaatselt uue meistri kirjutamiseks ja proovib seadistada ainult lugemine vana meistri peal. Need toimingud on suunatud tĂ”enĂ€osuse vĂ€hendamisele split brain.
Taastamise protsessi kĂ€igus vĂ”ivad ilmneda probleemid, millest tuleb samuti teavitada lĂ€bi orkestratori kasutajaliidese, lisaks standardsetele jĂ€lgimisvahenditele. Oleme laiendanud REST API-d, lisades sellise vĂ”imaluse ( praegu on ĂŒlevaatamisel).
Ăldine HA-lahenduse skeem on esitatud allpool.

Uue meistri valimine
Orkestrator on piisavalt intelligentne ja pĂŒĂŒab valida uue meistrina jĂ€rgmiste kriteeriumide alusel:
- replikatsiooni mahajÀÀmus meistri ees;
- Meistri ja replikatsiooni MySQL versioon;
- replikatsiooni tĂŒĂŒp (RBR, SBR vĂ”i segatud);
- asukoht ĂŒhes vĂ”i erinevates andmekeskustes;
- erinevate
errant GTIDâ tehingud, mis on sooritatud replikatsioonil ja puuduvad meistril; - arvesse vĂ”etakse ka kasutaja mÀÀratud valikureegleid.
Iga replikatsioon ei ole ideaalne kandidaat meistri rolliks. NÀiteks vÔib replikatsioon olla andmete varundamiseks kasutatav vÔi serveril vÔib olla nÔrgem riistvara konfiguratsioon. Orkestrator kÀskude reeglite abil saab seadistada oma eelistusi kandidaadi valimisel alates kÔige eelistatumast kuni ignoreeritavani.
Reaktsiooniaeg ja taastamine
TĂ”rke korral on oluline vĂ”imalikult kiiresti vĂ€hendada sĂŒsteemi seisakuaega, seetĂ”ttu vaatame MySQL parameetreid, mis mĂ”jutavad orkestratori klastrite topoloogia loomist ja uuendamist:
- â sekundite arv, mille jooksul replikatsioon ootab uusi andmeid vĂ”i meistri poolt saadetavat heartbeat-signaali, enne kui ĂŒhendus tunnistatakse kadunuks ja toimub ĂŒmberĂŒhendamine. Mida vĂ€iksem on vÀÀrtus, seda kiiremini saab replikatsioon mÀÀrata, et ĂŒhendus meisteriga on katkenud. Seame selle vÀÀrtuse 5 sekundiks.
- â sekundide arv taaskoondamiskatsete vahel. Kui esinevad vĂ”rguprobleemid, vĂ”imaldab madal selle parameetri vÀÀrtus kiiresti uuesti ĂŒhenduda ja vĂ€ltida klastrite taastamisprotsessi kĂ€ivitamist. Soovitatav vÀÀrtus on 1 sekund.
MASTER_RETRY_COUNTâ maksimaalne katsete arv taaskoondamiseks.MASTER_HEARTBEAT_PERIODâ sekundite vahemaa, pĂ€rast mida master saadab heartbeat-signaali. Vaikimisi on see pool vÀÀrtusestslave_net_timeout.
Orkestratori parameetrid:
DelayMasterPromotionIfSQLThreadNotUpToDateâ kui on seatudtrue, siis ei rakendata master'i rolli kandidaadireplikas enne, kui replikatsiooni SQL-voog on tĂ€itnud kĂ”ik rakendamata tehingud Relay Log's. Me kasutame seda valikut, et mitte kaotada tehinguid, kui kĂ”ik kandidaadireplikad on maas.InstancePollSecondsâ tipu ja topoloogia uuendamise sagedus.RecoveryPollSecondsâ topoloogia analĂŒĂŒsi sagedus. Probleemide avastamisel kĂ€ivitub topoloogia taastamine. See on, mis on 1 sekund.
Iga klastrite sĂ”lm kĂŒsitakse orkestratori poolt ĂŒks kord InstancePollSeconds sekundi jooksul. Probleemi avastamisel vĂ€rskendatakse klastriseisundit sundvĂ”imugaHA-skeemi teste alustasime kohaliku
Testseade
testimise seadmestiku Harjutuste ajal valime ĂŒht probleemide emuleerimise meetodit: master'i hetkeline sulgemine kasutades
kill -9 , protsessi Ôrn sulgemine ja serveri seiskamine (docker-compose stop), vÔrguprobleemide simuleerimine kasutadesiptables -j REJECT iptables -j DROP vÔi . Ootame selliseid tulemusi:orkestrator tuvastab probleeme master'iga ja vÀrskendab topoloogiat mitte rohkem kui 10 sekundiga;
- taastamisprotseduur kÀivitub automaatselt: muutub vÔrgu konfiguratsioon, master'i roll lÀheb replikale, topoloogia uueneb;
- taastamisprotseduur kĂ€ivitub automaatselt: muudatatakse vĂ”rgu konfiguratsiooni, peamine roll antakse replikale, topoloogia ehitatakse ĂŒmber;
- uus meister on salvestamiseks saadaval, elavad koopiad ei kao ĂŒmberkorraldamise kĂ€igus;
- andmed hakkavad salvestuma uude meistrisse ja replitseeruma;
- ĂŒldine taastamisaeg ei ĂŒleta 30 sekundit.
Nagu teate, vĂ”ib sĂŒsteem test- ja tootmiskeskkondades kĂ€ituda erinevalt, kuna riistvara ja vĂ”rgu konfiguratsioon, sĂŒnteetilise ja reaalse koormuse erinevused jne. SeetĂ”ttu viime aeg-ajalt lĂ€bi harjutusi reaalsetes tingimustes, kontrollides, kuidas sĂŒsteem kĂ€itub vĂ”rguĂŒhenduse kadumise vĂ”i selle ĂŒksikute osade halvenemise korral. Tulevikus tahame ehitada mĂ”lemale keskkonnale tĂ€ielikult identse infrastruktuuri ja automatiseerida selle testimise.
JĂ€reldused
AndmesalvestussĂŒsteemi pĂ”hielemendi töökindlus on SRE ja ekspluateerimise meeskonna ĂŒks peamisi ĂŒlesandeid. Orkestrandi ja HA-lahenduse rakendamine VIP-i pĂ”hjal on vĂ”imaldanud saavutada jĂ€rgmised tulemused:
- usaldusvÀÀrne DB klastrite topoloogia probleemide tuvastamine;
- automaatne ja kiire reageerimine meistriga seotud intsidentidele, mis vĂ€hendab sĂŒsteemi seisakuaega.
Kuid lahendusel on oma piirangud ja puudused:
- HA-skeemi skaleerimine mitme andmekeskuse vahel nĂ”uab ĂŒhtset L2-vĂ”rku nende vahel;
- enne VIP-i mÀÀramist uuele meistrile tuleb see eemaldada vanalt. Protsess on sequential, mis pikendab taastamisaega;
- VIP-i vabastamine nĂ”uab SSH-juurdepÀÀsu serverile vĂ”i mĂ”nd muud kaugprotseduuride vĂ€ljakutse meetodit. Kuna server vĂ”i DB kogeb probleeme, mis pĂ”hjustasid taastamisprotsessi, ei saa me olla kindlad, et VIP-i eemaldamine Ă”nnestub. See vĂ”ib viia kahe ĂŒhesuguse virtuaalse IP-aadressiga serveri ja probleemideni.
split brain.
Probleemide vĂ€ltimiseks split brain, vĂ”ib kasutada meetodit ('Shoot The Other Node In The Head'), mis isoleerib vĂ”i katkestab probleemi tekitava sĂ”lme tĂ€ielikult. On ka teisi kĂ”rge kĂ€ttesaadavuse rakendamise meetodeid: VIP-i ja DNS-i kombinatsioon, teenuste tuvastamine ja vaheteenused, sĂŒnkroonne replikatsioon ja muud meetodid, millel on oma puudused ja eelised.
RÀÀkisin meie lĂ€henemisest MySQLi vastupidava klastriga. See on rakendamisel lihtne ja tagab aktsepteeritava usaldusvÀÀrsuse hetkeoludes. Kogu sĂŒsteemi ja eriti infrastruktuuri jĂ€tkudes areneb see lĂ€henemine kindlasti edasi.
Allikas: habr.com
