Orkestratori për MySQL: pse nuk mund të ndërtohet një projekt i papërshkueshëm nga dështimet pa të

Çdo projekt i madh ka nisur me disa serverĂ«. Fillimisht kishte njĂ« server DB, mĂ« pas iu shtuan slave pĂ«r tĂ« skalier leximin. Dhe kĂ«tu — ndal! Masteri Ă«shtĂ« njĂ«, ndĂ«rsa slave janĂ« shumĂ«; nĂ«se njĂ« nga slave ikĂ«n, gjithçka do tĂ« jetĂ« nĂ« rregull, por nĂ«se masteri ikĂ«n — do tĂ« jetĂ« keq: kohĂ« e pashpjegueshme, administratorĂ«t do tĂ« rikthejnĂ« serverin me vĂ«shtirĂ«si. ÇfarĂ« tĂ« bĂ«jmĂ«? TĂ« rezervojmĂ« masterin. Kolegu im Pavel ka shkruar tashmĂ« pĂ«r kĂ«tĂ«, artikullin, nuk do ta pĂ«rsĂ«ris. NĂ« vend tĂ« kĂ«saj, do tĂ« tregoj pse ju nevojitet patjetĂ«r Orchestrator pĂ«r MySQL!

Të fillojmë me pyetjen kryesore: "Si do ta kalojmë kodin në makinë të re kur masteri ikën?".

  • Skema me VIP (Virtual IP) mĂ« pĂ«lqen mĂ« shumĂ«, mbi tĂ« do tĂ« flasim mĂ« poshtĂ«. Ajo Ă«shtĂ« mĂ« e thjeshtĂ« dhe mĂ« e dukshme, megjithatĂ« ka njĂ« kufizim tĂ« qartĂ«: masteri, i cili do tĂ« rezervojmĂ«, duhet tĂ« jetĂ« nĂ« segmentin L2 me makinĂ«n e re, pra mund tĂ« harrojmĂ« mbi qendrĂ«n e dytĂ«. Po ashtu, nĂ«se ndiqet rregulli se njĂ« L2 i madh Ă«shtĂ« i keq, sepse L2 Ă«shtĂ« vetĂ«m pĂ«r raft, ndĂ«rsa mes raftesh Ă«shtĂ« L3, dhe kjo skemĂ« ka edhe mĂ« shumĂ« kufizime.
  • Mund tĂ« specifikohet emri DNS nĂ« kod dhe tĂ« zgjidhet pĂ«rmes /etc/hosts. NĂ« tĂ« vĂ«rtetĂ«, do tĂ« ketĂ« pasiguri nĂ« zgjidhje. Avantazhi i skemĂ«s: nuk ka kufizime qĂ« karakterizojnĂ« metodĂ«n e parĂ«, domethĂ«nĂ«, mund tĂ« krijoni njĂ« arkitekturĂ« cross-DC. Por atĂ«herĂ« lind pyetja e qartĂ«, se sa shpejt do ta pĂ«rshtasim ndryshimin nĂ« /etc/hosts pĂ«rmes Puppet-Ansible.
  • Mund tĂ« ndryshoni pak metodĂ«n e dytĂ«: nĂ« tĂ« gjitha serverat web vendosim njĂ« DNS cache, pĂ«rmes tĂ« cilit kodi do tĂ« lidhĂ« nĂ« master bazĂ«. Mund tĂ« specifikohet TTL 60 pĂ«r kĂ«tĂ« regjistrim nĂ« DNS. Duket se, me realizimin e duhur, ky Ă«shtĂ« njĂ« metodĂ« e mirĂ«.
  • NjĂ« skemĂ« me zbulim shĂ«rbimi, qĂ« nĂ«nkupton pĂ«rdorimin e Consul dhe etcd.
  • NjĂ« variant interesant me ProxySQL. Duhet tĂ« drejtohet e gjithĂ« trafiku nĂ« MySQL pĂ«rmes ProxySQL, i cili vetĂ« di tĂ« identifikojĂ« se kush Ă«shtĂ« aktualisht master. PĂ«r njĂ« nga variantet e pĂ«rdorimit tĂ« kĂ«tij produkti mund tĂ« lexoni nĂ« artikullin.

Autori Orchestrator, duke punuar në Github, fillimisht realizoi skemën e parë me VIP, e më pas e riparoi në skemën me consul.

Një skemë tipike infrastrukture:

Orkestratori për MySQL: pse nuk mund të ndërtohet një projekt i papërshkueshëm nga dështimet pa të
Menjëherë do të përshkruaj situatat evidente që duhet të merren parasysh:

  • VIP adresa nuk duhet tĂ« jetĂ« e regjistruar nĂ« konfigurim nĂ« asnjĂ« nga serverĂ«t. Imagjinoni njĂ« situatĂ«: masteri rindez, dhe ndĂ«rkohĂ« qĂ« po ngarkohet, Orchestrator kalon nĂ« modalitetin failover dhe bĂ«n njĂ« nga slave-t master; pastaj rindez masteri i vjetĂ«r, dhe tani VIP Ă«shtĂ« nĂ« dy makina. Kjo Ă«shtĂ« e keqe.
  • PĂ«r orchestratorin do tĂ« nevojitet njĂ« skript pĂ«r t'u drejtuar nĂ« masterin e vjetĂ«r dhe masterin e ri. NĂ« masterin e vjetĂ«r duhet tĂ« ekzekutohet ifdown, ndĂ«rsa nĂ« masterin e ri — ifup vip. Do tĂ« ishte mirĂ« tĂ« pĂ«rfshihej gjithashtu nĂ« kĂ«tĂ« skript qĂ« nĂ« rast failover porti nĂ« switch-in e masterit tĂ« vjetĂ«r thjesht tĂ« mbyllet, pĂ«r tĂ« shmangur ndonjĂ« splitbrain.
  • Pas thirrjes sĂ« skriptit tuaj nga Orchestrator, pĂ«r tĂ« çaktivizuar fillimisht VIP dhe/ose pĂ«r tĂ« mbyllur portin nĂ« switch, dhe pastaj nĂ« masterin e ri tĂ« thirrni skriptin pĂ«r aktivizimin e VIP, mos harroni tĂ« thoni tĂ« gjithĂ«ve me komandĂ«n arping se tani VIP i ri Ă«shtĂ« kĂ«tu.
  • NĂ« tĂ« gjitha slave-t duhet tĂ« jetĂ« read_only=1, dhe sa herĂ« qĂ« promovoni njĂ« slave nĂ« master, atij duhet t'i ndryshohet nĂ« read_only=0.
  • Mos e harroni se çdo skllav qĂ« kemi zgjedhur pĂ«r kĂ«tĂ« mund tĂ« bĂ«het mjeshtĂ«r (Orchestrator ka njĂ« mekanizĂ«m tĂ« plotĂ« preferencash pĂ«r tĂ« vendosur se cili skllav duhet konsideruar si kandidat pĂ«r mjeshtrin e ri nĂ« radhĂ« tĂ« parĂ«, cili nĂ« radhĂ« tĂ« dytĂ«, dhe cili skllav nuk duhet zgjedhur pĂ«r mjeshtĂ«r aspak). NĂ«se njĂ« skllav bĂ«het mjeshtĂ«r, ai do tĂ« mbajĂ« ngarkesĂ«n e skllavit dhe do t'i shtohet ngarkesa e mjeshtrit, kĂ«shtu qĂ« duhet ta merrni parasysh kĂ«tĂ«.

Pse ju nevojitet patjetër Orchestrator nëse nuk e keni atë?

  • Orchestrator ka njĂ« ndĂ«rfaqe grafike shumĂ« tĂ« pĂ«rshtatshme qĂ« tregon tĂ« gjithĂ« topologjinĂ« (shikoni screenshotin mĂ« poshtĂ«).
  • Orchestrator mund tĂ« ndjekĂ« se cilĂ«t skllavĂ« janĂ« prapa dhe ku replikimi Ă«shtĂ« prishur krejtĂ«sisht (ne kemi skriptet e lidhura me Orchestrator pĂ«r tĂ« dĂ«rguar SMS).
  • Orchestrator ju thotĂ« se nĂ« cilĂ«t skllavĂ« ka njĂ« gabim GTID errant.

Ndërfaqja e Orchestrator:

Orkestratori për MySQL: pse nuk mund të ndërtohet një projekt i papërshkueshëm nga dështimet pa të
ÇfarĂ« Ă«shtĂ« GTID errant?

Ka dy kërkesa themelore për funksionimin e Orchestrator:

  • ËshtĂ« e nevojshme qĂ« nĂ« tĂ« gjitha makinat e klasterit MySQL tĂ« jetĂ« aktivizuar pseudo GTID, ne kemi aktivizuar GTID.
  • Duhet qĂ« tĂ« ketĂ« njĂ« lloj binlogu kudo, mundĂ«sisht statement. Ne kishim njĂ« konfigurim tĂ« tillĂ«, ku nĂ« master dhe nĂ« shumicĂ«n e slaveve ishte Row, ndĂ«rsa nĂ« dy mbeti historikisht mĂ«nyra Mixed. Si rezultat, kĂ«to slave Orchestrator thjesht nuk dĂ«shironin tĂ« lidhnin me masterin e ri.

Kujtoni se më e rëndësishme në një production-slave është konsistenca e tij me masterin! Nëse keni Global Transaction ID (GTID) aktiv në master dhe slave, atëherë përmes funksionit gtid_subset mund të mësoni nëse në këto makina janë ekzekutuar të njëjtat kërkesa për ndryshimin e të dhënave. Mund të lexoni më shumë rreth kësaj. këtu.

Kështu, Orchestrator tregon përmes gabimit GTID errant se në slave ka transaksione që nuk ekzistojnë në master. Pse ndodh kjo?

  • NĂ« slave nuk Ă«shtĂ« aktivizuar read_only=1, dikush u lidh dhe ekzekutoi njĂ« kĂ«rkesĂ« pĂ«r ndryshimin e tĂ« dhĂ«nave.
  • NĂ« slave nuk Ă«shtĂ« aktivizuar super_read_only=1, atĂ«herĂ« admini, duke u ngatĂ«rruar me serverin, hyri dhe ekzekutoi atje njĂ« kĂ«rkesĂ«.
  • NĂ«se keni marrĂ« parasysh tĂ« dy pikat e mĂ«parshme, atĂ«herĂ« ka edhe njĂ« truk tjetĂ«r: nĂ« MySQL, kĂ«rkesa pĂ«r flush-in e binlogĂ«ve gjithashtu pĂ«rfshihet nĂ« binlog, prandaj me flush-in e parĂ« nĂ« master dhe nĂ« tĂ« gjitha slave-t do tĂ« shfaqet GTID errant. Si tĂ« shmangni kĂ«tĂ«? NĂ« versionin perona-5.7.25-28 u shtua konfigurimi binlog_skip_flush_commands=1, qĂ« ndalon shkruajtjen e flush nĂ« binlog. NĂ« faqen mysql.com ka njĂ« regjistrim defekti.

Përmbledh të gjitha të thëna më sipër. Nëse ende nuk dëshironi të përdorni Orchestrator në modin failover, vendoseni atë në modin e monitorimit. Atëherë do të keni gjithmonë para syve një hartë të ndërveprimit të makinave MySQL dhe informacion të qartë mbi atë se çfarë lloji replikimi ka në çdo makinë, nëse slave-t janë në vonesë dhe, më e rëndësishmja, sa konsistentë janë ata me master-in!

Pyetjes evidente: "Si duhet tĂ« punojĂ« Orchestrator?" Ai duhet tĂ« zgjedhĂ« njĂ« master tĂ« ri nga skllavĂ«t aktualĂ« dhe pastaj tĂ« rikonfigurojĂ« tĂ« gjithĂ« skllavĂ«t me tĂ« (pikĂ«risht pĂ«r kĂ«tĂ« Ă«shtĂ« e nevojshme GTID; nĂ«se pĂ«rdoret mekanizmi i vjetĂ«r me binlog_name dhe binlog_pos, kalimi i skllavit nga masteri aktual nĂ« tĂ« riun Ă«shtĂ« thjesht e pamundur!). Para se tĂ« kishim Orchestrator, njĂ« herĂ« mĂ« doli tĂ« bĂ«ja gjithĂ« kĂ«tĂ« manualisht. Masteri i vjetĂ«r mbetej i ngjallur pĂ«r shkak tĂ« njĂ« kontrolluesi tĂ« gabuar Adaptec, kishte rreth 10 skllavĂ«. Duhej tĂ« kaloja VIP nga masteri nĂ« njĂ« nga skllavĂ«t dhe tĂ« rikonfiguroja tĂ« gjithĂ« skllavĂ«t e tjerĂ« me tĂ«. Sa ekrane mĂ« duhej tĂ« hapja, sa komanda tĂ« njĂ«kohshme tĂ« jepja
 Duhej tĂ« prisja deri nĂ« orĂ«n 3 tĂ« mĂ«ngjesit, tĂ« heqja ngarkesĂ«n nga tĂ« gjithĂ« skllavĂ«t, pĂ«rveç dy, tĂ« bĂ«nte master makinĂ«n e parĂ« nga dy, menjĂ«herĂ« tĂ« lidhesha me makinĂ«n e dytĂ«, e pastaj tĂ« lidhesha me tĂ« gjithĂ« skllavĂ«t e tjerĂ« dhe ta ktheja ngarkesĂ«n. NĂ« pĂ«rgjithĂ«si, njĂ« tmerr


Si funksionon Orchestrator kur kalon nĂ« modin failover? ËshtĂ« mĂ« e lehtĂ« ta tregosh me njĂ« shembull situate kur duam tĂ« bĂ«jmĂ« master njĂ« makinĂ« mĂ« tĂ« fuqishme dhe mĂ« moderne se ajo qĂ« kemi tani.

Orkestratori për MySQL: pse nuk mund të ndërtohet një projekt i papërshkueshëm nga dështimet pa të
NĂ« skemĂ« paraqitet mesazhi i procesit. ÇfarĂ« ka ndodhur deri nĂ« kĂ«tĂ« moment? Ne thamĂ« se duam ta bĂ«jmĂ« njĂ« slave si njĂ« master tĂ« ri, Orchestrator filloi thjesht tĂ« riçkonte tĂ« gjithĂ« slave-t e tjerĂ« me tĂ«, ndĂ«rkohĂ« qĂ« master-i i ri luan rolin e makinĂ«s tranzite. Me kĂ«tĂ« skemĂ« nuk ndodhin gabime, tĂ« gjithĂ« slave-t funksionojnĂ«, Orchestrator hoqi VIP nga master-i i vjetĂ«r, e transferon tek i ri, e bĂ«n read_only=0 dhe harron pĂ«r master-in e vjetĂ«r. Mjaft! KohĂ«zgjatja e shĂ«rbimit tonĂ« Ă«shtĂ« koha e transferimit tĂ« VIP-it, kjo Ă«shtĂ« 2-3 sekonda.

Kjo është gjithçka për sot, faleminderit të gjithëve. Shpejt do të jetë artikulli i dytë për Orchestrator. Në një film të njohur sovjetik "Garazh", një personazh tha: "Unë s'do të shkoja në zbulim me të!" Pra, Orchestrator, unë do të shkoja në zbulim me ty!

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster