Orchestrator alang sa MySQL: nganong dili ka makahimo og usa ka proyekto nga dili matugotan sa sayup nga wala kini

Ang bisan unsang dagkong proyekto nagsugod sa usa ka magtiayon nga mga server. Sa sinugdan adunay usa ka DB server, unya ang mga ulipon gidugang niini aron masukod ang pagbasa. Ug unya - hunong! Adunay usa ka agalon, apan adunay daghang mga ulipon; kung ang usa sa mga ulipon mobiya, nan ang tanan mamaayo, apan kung ang agalon mobiya, kini dili maayo: downtime, ang mga admin naningkamot sa pagpataas sa server. Unsay buhaton? Magreserba ug master. Ang akong kauban nga si Pavel nagsulat na bahin niini usa ka artikulo, dili na nako balikon. Hinuon, isulti ko kanimo kung ngano nga kinahanglan nimo ang Orchestrator para sa MySQL!

Magsugod kita sa panguna nga pangutana: "Unsaon naton ibalhin ang code sa usa ka bag-ong makina kung mobiya ang agalon?"

  • Ganahan ko sa laraw nga adunay VIP (Virtual IP) ang labing, hisgutan namon kini sa ubos. Kini ang pinakayano ug labing klaro, bisan kung kini adunay usa ka dayag nga limitasyon: ang agalon nga among ireserba kinahanglan naa sa bahin sa L2 nga adunay bag-ong makina, kana, mahimo naton kalimtan ang bahin sa ikaduha nga DC. Ug, sa usa ka maayo nga paagi, kung sundon nimo ang lagda nga ang usa ka dako nga L2 daotan, tungod kay ang L2 matag rack, ug ang L3 naa sa taliwala sa mga rack, ug ang ingon nga laraw adunay labi pa nga mga pagdili.
  • Mahimo nimong isulat ang ngalan sa DNS sa code ug sulbaron kini pinaagi sa /etc/hosts. Sa pagkatinuod, walay resolusyon. Ang bentaha sa laraw: walay limitasyon nga kinaiya sa unang pamaagi, nga mao, posible nga mag-organisar sa usa ka cross-DC. Apan unya ang klaro nga pangutana mitungha: unsa ka dali naton mahatag ang pagbag-o sa /etc/hosts pinaagi sa Puppet-Ansible?
  • Mahimo nimong usbon gamay ang ikaduhang pamaagi: i-install ang caching DNS sa tanan nga mga web server, diin ang code moadto sa master database. Mahimo nimong itakda ang TTL 60 alang niini nga entry sa DNS. Morag kung gipatuman sa husto, maayo ang pamaagi.
  • Usa ka laraw nga adunay pagdiskobre sa serbisyo, nga nagpasabut sa paggamit sa Consul ug uban pa.
  • Usa ka makapaikag nga kapilian nga adunay ProxySQL. Kinahanglan nimo nga ruta ang tanan nga trapiko sa MySQL pinaagi sa ProxySQL; Ang ProxySQL mismo ang makatino kung kinsa ang agalon. Pinaagi sa dalan, mahimo nimong mabasa ang bahin sa usa sa mga kapilian sa paggamit niini nga produkto sa akong artikulo.

Ang tagsulat sa Orchestrator, nga nagtrabaho sa Github, una nga gipatuman ang una nga laraw sa VIP, ug dayon gi-convert kini sa usa ka laraw nga adunay konsul.

Kasagaran nga layout sa imprastraktura:

Orchestrator alang sa MySQL: nganong dili ka makahimo og usa ka proyekto nga dili matugotan sa sayup nga wala kini
Ihulagway dayon nako ang klaro nga mga sitwasyon nga kinahanglang tagdon:

  • Ang VIP nga adres kinahanglan dili marehistro sa config sa bisan unsang mga server. Hunahunaa ang usa ka sitwasyon: ang agalon nag-reboot, ug samtang kini nagkarga, ang Orchestrator miadto sa failover mode ug naghimo sa usa sa mga ulipon nga usa ka agalon; unya ang tigulang nga agalon mibangon, ug karon ang VIP anaa sa duha ka mga sakyanan. Kini daotan.
  • Alang sa orkestra, kinahanglan nimo nga magsulat usa ka script alang sa pagtawag sa daan nga agalon ug sa bag-ong agalon. Sa daan nga agalon kinahanglan nimo nga modagan ifdown, ug sa bag-ong agalon - ifup vip. Maayo nga ilakip usab niini nga script nga kung mahitabo ang usa ka failover, ang port sa switch sa tigulang nga agalon gipalong aron malikayan ang bisan unsang splitbrain.
  • Human tawagan sa Orchestrator ang imong script aron una nga tangtangon ang VIP ug/o palongon ang port sa switch, ug dayon tawgon ang VIP raising script sa bag-ong master, ayaw kalimti ang paggamit sa arping command aron isulti sa tanan nga ang bag-ong VIP mao na karon. dinhi.
  • Ang tanan nga mga ulipon kinahanglan adunay read_only=1, ug sa diha nga imong i-promote ang ulipon ngadto sa agalon, kini kinahanglan nga read_only=0.
  • Ayaw kalimti nga ang bisan kinsa nga ulipon nga among gipili alang niini mahimo nga usa ka agalon (Ang Orchestrator adunay usa ka tibuuk nga mekanismo nga gusto kung diin ang ulipon ikonsiderar ingon usa ka kandidato alang sa usa ka bag-ong agalon sa una, nga sa ikaduha nga lugar, ug kung unsang ulipon ang kinahanglan. dili mapili sa tanan ubos sa bisan unsang mga kahimtang master). Kon ang ulipon mahimong agalon, nan ang luwan sa ulipon magpabilin niini ug ang luwan sa agalon idugang, kini kinahanglan nga tagdon.

Ngano nga kinahanglan nimo ang Orkestra kung wala ka?

  • Ang Orchestrator adunay usa ka user-friendly nga graphical interface nga nagpakita sa tibuok topology (tan-awa ang screenshot sa ubos).
  • Ang Orchestrator mahimong masubay kung unsang mga ulipon ang naulahi, ug kung diin ang replikasyon kasagarang naguba (kami adunay mga script nga gilakip sa Orchestrator alang sa pagpadala sa SMS).
  • Gisultihan ka sa Orkestra kung unsang mga ulipon ang adunay sayup nga GTID.

Interface sa Orkestra:

Orchestrator alang sa MySQL: nganong dili ka makahimo og usa ka proyekto nga dili matugotan sa sayup nga wala kini
Unsa ang GTID errant?

Adunay duha ka nag-unang kinahanglanon aron magtrabaho ang Orchestrator:

  • Gikinahanglan nga ang pseudo GTID ma-enable sa tanang makina sa MySQL cluster; gi-enable na nato ang GTID.
  • Kinahanglan nga adunay usa ka matang sa binlogs bisan asa, mahimo nimong gamiton ang pahayag. Kami adunay usa ka configuration diin ang agalon ug kadaghanan sa mga ulipon adunay Row, ug duha ka kasaysayan nagpabilin sa Mixed mode. Ingon usa ka sangputanan, ang Orkestra dili gusto nga ikonektar kini nga mga ulipon sa bag-ong agalon.

Hinumdomi nga ang labing hinungdanon nga butang sa usa ka ulipon sa produksiyon mao ang pagkamakanunayon niini sa agalon! Kung ikaw adunay Global Transaction ID (GTID) nga naka-enable sa imong agalon ug ulipon, nan mahimo nimong gamiton ang gtid_subset function aron mahibal-an kung ang parehas nga mga hangyo alang sa pagbag-o sa datos gipatuman sa kini nga mga makina. Makabasa ka ug dugang bahin niini dinhi.

Busa, ang Orchestrator nagpakita kanimo pinaagi sa GTID errant nga adunay mga transaksyon sa ulipon nga wala sa agalon. Nganong nahitabo kini?

  • Ang Read_only=1 wala ma-enable sa ulipon, adunay nagkonektar ug nakakompleto sa usa ka hangyo nga usbon ang datos.
  • Ang Super_read_only=1 wala magamit sa ulipon, unya ang admin, nga naglibog sa server, misulod ug gipatuman ang hangyo didto.
  • Kung imong gikonsiderar ang duha ka nangaging mga punto, nan adunay usa pa nga limbong: sa MySQL, ang usa ka hangyo sa pag-flush sa mga binlog moadto usab sa binlog, mao nga sa una nga pag-flush, usa ka sayup nga GTID ang makita sa agalon ug sa tanan nga mga ulipon. Unsaon paglikay niini? Ang Perona-5.7.25-28 nagpaila sa binlog_skip_flush_commands=1 setting, nga nagdili sa pagsulat sa flush sa binlogs. Adunay usa nga natukod sa mysql.com website bug.

Tugoti ako sa pag-summarize sa tanan sa ibabaw. Kung dili nimo gusto nga gamiton ang Orchestrator sa failover mode, unya ibutang kini sa mode sa obserbasyon. Unya ikaw kanunay adunay sa atubangan sa imong mga mata sa usa ka mapa sa interaksyon sa MySQL mga makina ug biswal nga impormasyon mahitungod sa unsa nga matang sa pagkopya anaa sa matag makina, kon ang mga ulipon naa sa luyo, ug labaw sa tanan, unsa ka makanunayon sila sa agalon!

Ang klaro nga pangutana mao: "Sa unsang paagi molihok ang Orkestra?" Kinahanglan siyang mopili ug bag-ong agalon gikan sa kasamtangang mga ulipon, ug dayon ikonektar pag-usab ang tanang ulipon niini (mao kini ang gikinahanglan sa GTID; kon imong gamiton ang daan nga mekanismo nga adunay binlog_name ug binlog_pos, dayon ibalhin ang ulipon gikan sa kasamtangang agalon ngadto sa bag-o. imposible lang!). Sa wala pa kami adunay Orchestrator, kinahanglan nako nga buhaton kini tanan nga mano-mano. Ang tigulang nga agalon nagbitay tungod sa usa ka buggy Adaptec controller; kini adunay mga 10 ka mga ulipon. Kinahanglan nakong ibalhin ang VIP gikan sa agalon ngadto sa usa sa mga ulipon ug ikonektar pag-usab ang tanang ubang mga ulipon niini. Pila ka mga console ang kinahanglan nakong ablihan, pila ka dungan nga mga sugo ang akong gisulod ... Kinahanglan kong maghulat hangtud alas 3 sa buntag, kuhaa ang load gikan sa tanan nga mga ulipon gawas sa duha, paghimo sa unang makina gikan sa duha ka agalon, diha-diha dayon ibutang ang ikaduha nga makina niini, busa ilakip ang tanang ubang mga ulipon ngadto sa bag-ong agalon ug iuli ang luwan. Sa kinatibuk-an, makalilisang ...

Giunsa pagtrabaho ang Orchestrator kung moadto kini sa mode nga failover? Kini mao ang labing sayon ​​nga gihulagway pinaagi sa usa ka panig-ingnan sa usa ka sitwasyon diin kita gusto sa paghimo sa usa ka agalon nga usa ka mas gamhanan, mas modernong makina kay sa atong karon.

Orchestrator alang sa MySQL: nganong dili ka makahimo og usa ka proyekto nga dili matugotan sa sayup nga wala kini
Ang numero nagpakita sa tunga-tunga sa proseso. Unsa na ang nahimo hangtod niining puntoha? Miingon kami nga gusto namong himoong bag-ong agalon ang pipila ka ulipon, ang Orchestrator misugod sa yanong pagkonektar pag-usab sa tanang ubang mga ulipon niini, uban ang bag-ong agalon nga naglihok isip transit machine. Uban niini nga laraw, walay mga kasaypanan nga mahitabo, ang tanan nga mga ulipon nagtrabaho, ang Orchestrator nagtangtang sa VIP gikan sa daan nga agalon, nagbalhin niini ngadto sa bag-o, naghimo sa read_only = 0 ug nakalimot mahitungod sa daan nga agalon. Tanan! Ang downtime sa among serbisyo mao ang VIP transfer time, nga 2-3 segundos.

Kana lang para karong adlawa, salamat sa tanan. Adunay usa ka ikaduha nga artikulo bahin sa Orchestrator sa dili madugay. Sa sikat nga pelikula sa Sobyet nga "Garage," usa ka karakter ang miingon, "Dili ko makig-reconnaissance kaniya!" Busa, Orchestrator, mouban ko nimo sa reconnaissance!

Source: www.habr.com

Idugang sa usa ka comment