Ădo projekt i madh ka filluar me disa serverĂ«. Fillimisht kishte njĂ« server DB, pastaj iu shtuan skllavĂ«t pĂ«r tĂ« shkallĂ«zuar leximin. Dhe kĂ«tu â stop! Masteri Ă«shtĂ« njĂ«, por skllavĂ«t janĂ« shumĂ«; nĂ«se njĂ« nga skllavĂ«t largohet, gjithçka do tĂ« shkojĂ« mirĂ«, por nĂ«se masteri largohet â do tĂ« jetĂ« keq: kohĂ« pezullimi, administratorĂ«t nĂ« panik ngrisin serverin. ĂfarĂ« tĂ« bĂ«jmĂ«? TĂ« rezervojmĂ« masterin. Kolegu im Pavel ka shkruar tashmĂ« pĂ«r kĂ«tĂ« , nuk do ta pĂ«rsĂ«ris atĂ«. NĂ« vend tĂ« kĂ«saj, do t'ju tregoj pse ju nevojitet patjetĂ«r Orkestratori pĂ«r MySQL!
Të fillojmë me pyetjen kryesore: "Si do ta kalojmë kodin në makinë të re kur masteri largohet?".
- Schemes me VIP (IP Virtual) më pëlqen më së shumti, për të cilën do të flasim më poshtë. Ajo është më e thjeshtë dhe më e dukshme, megjithatë ka një kufizim të qartë: masteri që do të rezervojmë duhet të jetë në segmentin L2 me makinën e re, domethënë mund ta harrojmë qendrën e dytë. Dhe, në të vërtetë, nëse ndjekim rregullin që L2 i madh është i keq, sepse L2 është vetëm në kabinet, ndërmjet kabinave është L3, dhe një skemë e tillë ka akoma më shumë kufizime.
- Mund të shkruajmë në kod emrin DNS dhe ta zgjidhim përmes /etc/hosts. Në fakt nuk do të ketë zgjidhje. Avantazhi i skemës: nuk ka kufizimin karakteristik për mënyrën e parë, domethënë mund të organizojmë edhe cross-DC. Por atëherë lind pyetja e qartë, si shpejt do të sjellim ndryshimin në /etc/hosts përmes Puppet-Ansible.
- Mund ta modifikojmë pak mënyrën e dytë: në të gjithë serverët web vendosim DNS që ruan në cache, përmes të cilit Kodi do të shkojë në bazën master. Mund të vendosim TTL 60 për këtë regjistrim në DNS. Duke u dukur, kur zbatohet siç duhet, metoda është e mirë.
- Schemes me zbulimin e shërbimeve, që përfshin përdorimin e Consul dhe etcd.
- Një variant interesant me . Duhet të kalojmë të gjithë trafikun në MySQL përmes ProxySQL, që vetë di të identifikojë kush është tani masteri. Për t'u përmendur, për një nga variantet e përdorimit të këtij produkti mund të lexoni në artikullin tim .
Autori i Orkestratorit, duke punuar në Github, fillimisht implementoi skemën e parë me VIP, dhe pastaj e përmirësoi në skemën me Consul.
Schema tipike e infrastrukturës:

Menjëherë do të përshkruaj situatat e qarta që duhet të marrim parasysh:
- VIP adresa nuk duhet të regjistrohet në konfigurim në asnjë nga serverat. Imagjinoni situatën: masteri u ribotua, dhe ndërsa ai po ngarkohet, Orchestrator kaloi në modalitetin failover dhe bëri një nga slave-ët master; më pas u ngjall masteri i vjetër, dhe tani VIP është në dy makina. Kjo është e keqe.
- PĂ«r Orchestrator do tĂ« duhet tĂ« shkruhet njĂ« skenar pĂ«r tĂ« komunikuar me masterin e vjetĂ«r dhe masterin e ri. NĂ« tĂ« vjetrin duhet tĂ« ekzekutohet ifdown, dhe nĂ« masterin e ri â ifup vip. Po ashtu do tĂ« ishte mirĂ« tĂ« pĂ«rfshihet nĂ« kĂ«tĂ« skenar qĂ« nĂ« rastin e failover-it porta nĂ« switch-in e masterit tĂ« vjetĂ«r thjesht tĂ« mbyllet, pĂ«r tĂ« shmangur ndonjĂ« splitbrain.
- Pas që Orchestrator thirri skenarin tuaj, për të hequr fillimisht VIP dhe\/ose për të fikur portin në switch-in, e pastaj në masterin e ri thirri skenarin për ngritjen e VIP, mos harroni të përdorni komandën arping për të bërë të ditur të gjithëve se tani është këtu VIP-i i ri.
- Në të gjitha slave-t duhet të jetë read_only=1, dhe sapo të promovoni një slave në master, ai duhet të ketë read_only=0.
- Mos harroni se çdo slave mund të bëhet master, që ne e kemi zgjedhur për këtë (Orchestrator ka një mekanizëm të tërë preferencash për të vendosur se cili slave të konsiderohet si kandidati kryesor për master në radhë të parë, cili në të dytën, dhe cili slave nuk duhet kurrë të zgjidhet si master). Nëse nje slave bëhet master, atëherë ai do të mbajë ngarkesën e slave dhe do t'i shtohet ngarkesa e master, kjo duhet të merret parasysh.
Pse ju nevojitet Orchestrator nëse nuk e keni atë?
- Orchestrator ka një ndërfaqe shumë të përshtatshme grafike, që tregon gjithë topologjinë (shihni screenshot-in më poshtë).
- Orchestrator mund të ndjekë se cilat slave janë prapa, dhe ku replikimi ka dështuar plotësisht (ne kemi skenare të lidhura me Orchestrator për të dërguar SMS).
- Orchestrator ju thotë se në cilat slave ka gabime GTID errant.
Ndërfaqja e Orchestrator-it:

ĂfarĂ« Ă«shtĂ« GTID errant?
Ka dy kërkesa kryesore për funksionimin e Orchestrator-it:
- Duhet që në të gjitha makinat e klasterit MySQL të jetë i aktivizuar pseudo GTID, ne kemi aktivizuar GTID.
- Duhet të ketë një lloj të vetëm të binlog-ve kudo, mundësisht statement. Ne kishim një konfigurim të tillë, ku në master dhe në shumicën e slave-ëve ishte Row, ndërsa në dy histori kishte mbetur në mënyrën Mixed. Si rezultat, këta slave Orchestrator nuk deshi t'i lidhte me masterin e ri.
Mbani se kujtoni se gjëja më e rëndësishme në slavin e production-it është konsistenca e tij me master-in! Nëse ju keni aktivizuar Global Transaction ID (GTID) si në master ashtu edhe në slave, mund të kuptoni përmes funksionit gtid_subset nëse kërkesat për ndryshimin e të dhënave janë kryer të njëjtat në këto makina. Më shumë rreth kësaj mund të lexoni. .
Kështu, Orchestrator ju tregon përmes gabimit GTID errant se në slave ka transaksione që nuk janë në master. Pse ndodh kjo?
- Në slave nuk është aktivizuar read_only=1, dikush është lidhur dhe ka kryer një kërkesë për ndryshimin e të dhënave.
- Në slave nuk është aktivizuar super_read_only=1, atëherë admin, duke bërë një gabim me serverin, ka hyrë dhe ka kryer një kërkesë.
- Nëse keni marrë parasysh të dy pikat e mëparshme, ka një tjetër hile: në MySQL, kërkesa për flush binlog-ëve gjithashtu shkon në binlog, prandaj me flush-in e parë në master dhe në të gjitha slave-t do të shfaqet GTID errant. Si ta shmangim këtë? Në perona-5.7.25-28 u shfaq një konfigurim binlog_skip_flush_commands=1, që ndalon shkruarjen e flush në binlog. Në faqen mysql.com është regjistruar një .
PĂ«rmbledh tĂ« gjitha tĂ« mĂ«suara mĂ« sipĂ«r. NĂ«se ende nuk dĂ«shironi tĂ« pĂ«rdorni Orchestrator nĂ« modalitetin failover, vendoseni atĂ« nĂ« modalitetin e vĂ«zhgimit. AtĂ«herĂ« do tĂ« keni gjithmonĂ« para syve njĂ« hartĂ« tĂ« ndĂ«rveprimit tĂ« makinave MySQL dhe informacione tĂ« qarta mbi llojin e replikimit nĂ« çdo makinĂ«, nĂ«se slave-t janĂ« pas dhe mĂ« e rĂ«ndĂ«sishmjaâsa konsistent janĂ« ata me master-in!
Pyetja evidente është: "Si duhet të funksionojë Orchestrator?". Ai duhet të zgjedhë një master të ri nga slave-t aktualë dhe pastaj të rikonfigurojë të gjithë slave-t ndaj tij (pasi për këtë është e nevojshme GTID; nëse përdorim mekanizmin e vjetër me binlog_name dhe binlog_pos, është thjesht e pamundur kalimi i një slave nga master-i aktual në një të ri!). Para se të kishim Orchestrator, njëherë më është dashur ta bëj gjithë këtë manualisht. Master-i i vjetër ngrinte për shkak të një kontrolluesi problematik Adaptec, kishte rreth 10 slave. Më duhej të kaloja VIP nga master-i te një prej slave-ve dhe të rikonfiguroja të gjithë slave-t e tjerë ndaj tij. Sa shumë konsolla më është dashur të hapja, sa komandat e përkohshme të vendosja... Ishte nevojshme të prisja deri në orën 3 të mëngjesit, të lajë barrën nga të gjithë slave-t, përveç dyve, të bëja një makinë nga dyta master, menjëherë të lidhja makinën e dytë, pastaj të lidhen të gjithë slave-t e tjerë me master-in e ri dhe të kthej barrën. Në përgjithësi, tmerr...
Siht qĂ« Orchestrator funksionon kur kalon nĂ« modalitetin e dĂ«shtimit? ĂshtĂ« mĂ« e lehtĂ« tĂ« ilustrohet me njĂ« shembull tĂ« situatĂ«s ku duam tĂ« bĂ«jmĂ« njĂ« makinĂ« mĂ« tĂ« fuqishme dhe mĂ« moderne se ajo aktuale, master.

NĂ« figurĂ« paraqitet mesi i procesit. ĂfarĂ« Ă«shtĂ« bĂ«rĂ« deri nĂ« kĂ«tĂ« moment? Ne thamĂ« se duam tĂ« bĂ«jmĂ« njĂ« skllav tĂ« caktuar njĂ« master tĂ« ri, Orchestrator filloi thjesht tĂ« lidhĂ« pĂ«rsĂ«ri tĂ« gjithĂ« skllavĂ«t e tjerĂ«, ndĂ«rsa masteri i ri ka rol si makinĂ« tranziti. Me kĂ«tĂ« skemĂ« nuk ka gabimesh, tĂ« gjithĂ« skllavĂ«t funksionojnĂ«, Orchestrator heq VIP nga masteri i vjetĂ«r, e transferon te i ri, bĂ«n read_only=0 dhe e harron masterin e vjetĂ«r. Kaq! Koha e papĂ«rshtatshme e shĂ«rbimit tonĂ« Ă«shtĂ« koha e transferimit tĂ« VIP, qĂ« Ă«shtĂ« 2-3 sekonda.
Këtu përfundon gjithçka për sot, faleminderit të gjithëve. Shpejt do të publikohet një artikull i dytë për Orchestrator. Në një film të njohur sovjetik "Garazhi" një hero tha "Unë nuk do të shkoja në spiunazh me të!" Pra, Orchestrator, unë do të shkoja në spiunazh me ty!
Burimi: habr.com
