Orkestrator ja VIP MySQL klastrite HA-lahendusena

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 MySQL Orkestratoril ja virtuaalsetel IP-aadressidel (VIP).

Orkestrator ja VIP MySQL klastrite HA-lahendusena

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.

  1. Orkestreerija vÀrskendab klastrite topoloogiat, iga koopia teatab meistri puudumisest. Orkestreerija kÀivitab protsessi, mille kÀigus valitakse uus meister ja kÀivitab taastamise.
  2. PĂŒĂŒame VIP-i vana meistrilt eemaldada — tulutult.
  3. Koopia vahetab meistri rolli. Topoloogia rekonstrueeritakse.
  4. 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 brain vana meistri tagasiviimisel.
  5. 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 (PR praegu on ĂŒlevaatamisel).

Üldine HA-lahenduse skeem on esitatud allpool.

Orkestrator ja VIP MySQL klastrite HA-lahendusena

Uue meistri valimine

Orkestrator on piisavalt intelligentne ja pĂŒĂŒab valida kĂ”ige sobivama replikatsiooni 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 toetab 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:

  • slave_net_timeout — 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.
  • MASTER_CONNECT_RETRY — 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ÀÀrtusest slave_net_timeout.

Orkestratori parameetrid:

  • DelayMasterPromotionIfSQLThreadNotUpToDate — kui on seatud true, 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 konstant, mis on 1 sekund.

Iga klastrite sĂ”lm kĂŒsitakse orkestratori poolt ĂŒks kord InstancePollSeconds sekundi jooksul. Probleemi avastamisel vĂ€rskendatakse klastriseisundit sundvĂ”imuga , seejĂ€rel tehakse lĂ”plik otsus taastamise kohta. Katsetades erinevaid andmebaasi ja orkestratori parameetreid, oleme suutnud vĂ€hendada reageerimise ja taastamise kestust 30 sekundini.HA-skeemi teste alustasime kohaliku

Testseade

testimise seadmestiku arendamise ja edasise rakendamisega testimis- ja tootmiskeskkondades. Kohalik seade on tĂ€ielikult automatiseeritud Docker'i pĂ”hjal ja vĂ”imaldab katsetada orkestratori ja vĂ”rgu konfiguratsiooni, skaleerida klastrit 2-3 serverilt mitmekĂŒmnele ja lĂ€bi viia harjutusi turvalises keskkonnas. 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 STONITH ('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

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster