Orchestrator pou MySQL: poukisa ou pa ka bati yon pwojè ki toleran fay san li

Nenpòt gwo pwojè te kòmanse ak yon koup nan serveurs. Okòmansman, te gen yon sèl sèvè DB, Lè sa a, esklav yo te ajoute nan li nan echèl lekti a. Lè sa a - sispann! Gen yon sèl mèt, men gen anpil esklav; si youn nan esklav yo kite, Lè sa a, tout bagay pral byen, men si mèt la kite, li pral move: D ', admin yo ap eseye ogmante sèvè a. Kisa pou fe? Rezève yon mèt. Kolèg mwen Pavel deja ekri sou sa yon atik, mwen pap repete li. Olye de sa, mwen pral di w poukisa ou definitivman bezwen Orchestrator pou MySQL!

Ann kòmanse ak kesyon prensipal la: "Ki jan nou pral chanje kòd la nan yon nouvo machin lè mèt la kite?"

  • Mwen renmen konplo a ak VIP (Virtual IP) pi plis, nou pral pale sou li anba a. Li se pi senp la ak pi evidan, byenke li gen yon limit evidan: mèt la ke nou pral rezève dwe nan segman nan L2 ak machin nan nouvo, se sa ki, nou ka bliye sou dezyèm DC a. Epi, nan yon fason amikal, si ou swiv règ la ke yon gwo L2 se sa ki mal, paske L2 se sèlman pou chak etajè, ak L3 se ant etajè yo, ak tankou yon konplo gen menm plis restriksyon.
  • Ou ka ekri yon non dns nan kòd la epi rezoud li nan /etc/hosts. An reyalite, pa pral gen okenn rezolisyon. Avantaj nan konplo a: pa gen okenn karakteristik limit nan premye metòd la, se sa ki, li posib yo òganize yon kwa-DC. Men, Lè sa a, kesyon an evidan rive: konbyen vit nou ka delivre chanjman an nan /etc/hosts atravè Puppet-Ansible?
  • Ou ka chanje dezyèm metòd la yon ti kras: enstale DNS kachèt sou tout sèvè entènèt, atravè ki kòd la pral ale nan baz done a mèt. Ou ka mete TTL 60 pou antre sa a nan DNS. Li sanble ke si aplike kòrèkteman, metòd la bon.
  • Yon konplo ak dekouvèt sèvis, ki vle di itilizasyon Konsil ak elatriye.
  • Yon opsyon enteresan ak ProxySQL. Ou bezwen wout tout trafik nan MySQL atravè ProxySQL; ProxySQL tèt li ka detèmine kiyès ki mèt la. By wout la, ou ka li sou youn nan opsyon yo pou itilize pwodui sa a nan mwen Atik.

Otè a nan Orchestrator, k ap travay nan Github, premye aplike konplo a premye ak VIP, ak Lè sa a, konvèti li nan yon konplo ak konsil.

Layout enfrastrikti tipik:

Orchestrator pou MySQL: poukisa ou pa ka bati yon pwojè ki toleran fay san li
Mwen pral imedyatman dekri sitiyasyon yo evidan ki bezwen pran an kont:

  • Adrès VIP a pa ta dwe anrejistre nan konfigirasyon an sou nenpòt nan serveurs yo. Ann imajine yon sitiyasyon: mèt la rekòmanse, epi pandan li t ap chaje, Orchestrator te antre nan mòd failover epi fè youn nan esklav yo yon mèt; Lè sa a, ansyen mèt la leve, epi kounye a VIP a se sou de machin. Sa a se move.
  • Pou orchestrator a, w ap bezwen ekri yon script pou rele ansyen mèt la ak nouvo mèt la. Sou ansyen mèt la ou bezwen kouri ifdown, ak sou nouvo mèt la - ifup vip. Li ta bon pou mete tou nan script sa a ke si ta gen yon failover, pò a sou switch ansyen mèt la tou senpleman etenn pou evite nenpòt splitbrain.
  • Apre Orchestrator te rele script ou a pou premye retire VIP a ak/oswa etenn pò a sou switch la, ak Lè sa a, rele script la ogmante VIP sou nouvo mèt la, pa bliye sèvi ak kòmandman an arping di tout moun ke nouvo VIP a se kounye a. isit la.
  • Tout esklav ta dwe gen read_only=1, epi le pli vit ke ou pwomouvwa esklav la bay mèt la, li ta dwe gen read_only=0.
  • Pa bliye ke nenpòt esklav ke nou te chwazi pou sa a ka vin yon mèt (Orchestrator gen yon mekanis preferans antye pou ki esklav yo konsidere kòm yon kandida pou yon nouvo mèt an plas an premye, ki an plas an dezyèm, ak ki esklav ta dwe. pa dwe chwazi ditou nan okenn sikonstans mèt). Si esklav la vin yon mèt, Lè sa a, chaj la nan esklav la ap rete sou li epi yo pral ajoute chaj la nan mèt la, sa a dwe pran an kont.

Poukisa ou bezwen Orchestrator si ou pa genyen youn?

  • Orchestrator gen yon koòdone grafik trè fasil pou itilize ki montre topoloji a tout antye (gade ekran anba a).
  • Orchestrator ka swiv ki esklav ki rete dèyè, ak ki kote replikasyon an jeneralman kraze (nou gen scripts tache ak Orchestrator pou voye SMS).
  • Orchestrator di w ki esklav ki gen yon errant GTID.

Koòdone orchestrator:

Orchestrator pou MySQL: poukisa ou pa ka bati yon pwojè ki toleran fay san li
Ki sa ki errant GTID?

Gen de kondisyon prensipal pou Orchestrator travay:

  • Li nesesè pou pseudo GTID aktive sou tout machin nan gwoup MySQL la; nou gen GTID aktive.
  • Li nesesè ke gen yon sèl kalite binlogs toupatou, ou ka itilize deklarasyon. Nou te gen yon konfigirasyon kote mèt la ak pifò esklav yo te gen Ranje, epi de istorikman te rete nan mòd Mixed. Kòm yon rezilta, Orchestrator tou senpleman pa t 'vle konekte esklav sa yo ak nouvo mèt la.

Sonje ke bagay ki pi enpòtan nan yon esklav pwodiksyon se konsistans li ak mèt la! Si ou gen Global Transaction ID (GTID) aktive sou tou de mèt ou ak esklav, Lè sa a, ou ka itilize fonksyon gtid_subset la pou chèche konnen si yo te egzekite menm demann yo pou chanjman done yo sou machin sa yo. Ou ka li plis sou sa isit la.

Kidonk, Orchestrator montre w atravè errant GTID la ke gen tranzaksyon sou esklav la ki pa sou mèt la. Poukisa sa ap pase?

  • Read_only=1 pa aktive sou esklav la, yon moun konekte epi ranpli yon demann pou chanje done yo.
  • Super_read_only=1 pa pèmèt sou esklav la, Lè sa a, administratè a, li te gen konfonn sèvè a, li antre epi egzekite demann lan la.
  • Si ou te pran an kont tou de pwen anvan yo, Lè sa a, gen yon lòt Trick: nan MySQL, yon demann yo kole binlog tou ale nan binlog la, kidonk nan premye flush la, yon errant GTID ap parèt sou mèt la ak tout esklav yo. Ki jan pou fè pou evite sa a? Perona-5.7.25-28 prezante anviwònman binlog_skip_flush_commands=1, ki entèdi ekri flush nan binlogs. Gen yon sèl etabli sou sit entènèt la mysql.com pinèz.

Kite m 'rezime tout sa ki anwo yo. Si ou pa vle sèvi ak Orchestrator nan mòd failover ankò, Lè sa a, mete l nan mòd obsèvasyon. Lè sa a, w ap toujou gen devan je ou yon kat jeyografik nan entèraksyon an nan machin MySQL ak enfòmasyon vizyèl sou ki kalite replikasyon sou chak machin, si esklav yo ap retade dèyè, ak pi enpòtan, ki jan konsistan yo ak mèt la!

Kesyon an evidan se: "Kijan Orchestrator ta dwe travay?" Li dwe chwazi yon nouvo mèt nan esklav aktyèl yo, ak Lè sa a, rekonekte tout esklav yo nan li (sa a se sa ki nesesè pou GTID; si ou itilize ansyen mekanis la ak binlog_name ak binlog_pos, Lè sa a, chanje yon esklav soti nan mèt aktyèl la nan yon nouvo. se tou senpleman enposib!). Anvan nou te gen Orchestrator, yon fwa mwen te oblije fè tout bagay sa yo manyèlman. Ansyen mèt la te pandye akòz yon kontwolè Adaptec buggy; li te gen anviwon 10 esklav. Mwen te bezwen transfere VIP soti nan mèt la nan youn nan esklav yo epi rekonekte tout lòt esklav nan li. Konbyen konsol mwen te oblije louvri, konbyen kòmandman similtane mwen te antre... Mwen te oblije rete tann jiska 3 a.m., retire chay la nan tout esklav eksepte de, fè premye machin nan de mèt la, imedyatman tache dezyèm machin nan sou li, kidonk tache tout lòt esklav yo bay nouvo mèt la epi retounen chay la. An jeneral, terib...

Ki jan Orchestrator travay lè li antre nan mòd failover? Sa a se pi fasil ilistre pa yon egzanp nan yon sitiyasyon kote nou vle fè yon mèt yon machin ki pi pwisan, ki pi modèn pase nou genyen kounye a.

Orchestrator pou MySQL: poukisa ou pa ka bati yon pwojè ki toleran fay san li
Figi a montre mitan pwosesis la. Ki sa ki te deja fèt jiska pwen sa a? Nou te di ke nou te vle fè kèk esklav nouvo mèt la, Orchestrator te kòmanse tou senpleman rekonekte tout lòt esklav nan li, ak nouvo mèt la aji kòm yon machin transpò piblik. Avèk konplo sa a, pa gen okenn erè rive, tout esklav travay, Orchestrator retire VIP a nan ansyen mèt la, transfere li nan nouvo a, fè read_only=0 epi bliye ansyen mèt la. Tout! D 'nan sèvis nou an se tan an transfè VIP, ki se 2-3 segonn.

Se tout pou jodia, mèsi tout moun. Pral gen yon dezyèm atik sou Orchestrator byento. Nan pi popilè fim Sovyetik "Garaj", yon karaktè te di, "Mwen pa ta ale nan rekonesans avè l '!" Kidonk, òkèstratè, mwen ta ale avèk ou nan rekonesans!

Sous: www.habr.com

Add nouvo kòmantè