Trīs vadības plaknes VM šķiet kā trīs iespējas pārdzīvot sliktu nakti. Taču tā nav, un tieši attālums starp šiem diviem uzskatiem pārvērš kārtīgu trīs mezglu dizainu klasterī, kas pārstāj pieņemt ierakstus, kad viena ēka zaudē barošanu. VPN savienojums starp vietām padara mašīnas viena otrai sasniedzamas un slēpj problēmu, nevis to labo. Balsis skaita uz katru etcd dalībnieku, un divi no šiem dalībniekiem joprojām var sēdēt aiz viena komutatora, viena UPS un vienas līnijas.

Trīs vadības plaknes mezgli, viena kļūmes joma

Jūs palaižat kubectl get nodes, redzat trīs vadības plaknes ierakstus un reģistrējat klasteri kā augsti pieejamu. Šis skaitlis raksturo plānojamu jaudu, nevis izdzīvošanu. kubeadm bez ārēja etcd katrs vadības plaknes mezgls mitina arī dalībnieku, tāpēc trīs mezgli tiešām dod trīs vēlētājus. Vai šie vēlētāji kļūst neveiksmīgi neatkarīgi, ir atsevišķs jautājums, uz kuru mezglu saraksts nevar atbildēt.

Divas VM uz viena hipervizora, divi statīvi uz viena barošanas avota, divas līnijas no viena ISP: katrs pāris ir viena joma ar diviem resursdatora nosaukumiem. Pierakstiet izvietojumu un atzīmējiet, ko katrs vēlētājs dala — hipervizors, PDU, statīva augšējais komutators, krātuves masīvs, NAT ierīce, VPN koncentrators. Pēc tam uz papīra noņemiet katru koplietoto objektu un pārskaitiet atlikušās balsis. Klasteris, kas viena bojāta resursdatora dēļ zaudē divus vēlētājus, visu laiku ir bijis viena vēlētāja klasteris; neviens tam vēl nebija uzdevis šo jautājumu.

Ko divu vietu sadalījums var un nevar pārdzīvot

Kad trīs vēlētāji ir izvietoti divās vietās pa diviem un vienam, lielākā puse saglabā kvorumu, kad otra vieta pazūd, bet viena vēlētāja puse nekad. Šī asimetrija ir aritmētika, nevis regulēšana. Jebkurš uz vairākumu balstīts etcd klasteris, kas izvietots tieši divās neatkarīgās vietās, neiztur pārbaudi “zaudē jebkuru vietu un turpini apstiprināt”, jo abām pusēm vienlaikus būtu jātur vairāk nekā puse balsu.

Zemāk esošā tabula ir ātrākais veids, kā redzēt, kādus bojājumus jūs patiešām nopirkāt. Lasiet katru rindu tā: ja šonakt pazūd visa šī rinda, vai izdzīvojušie joprojām var apstiprināt ierakstu?

What disappearsVoters leftWrites still commit
Site B, holding voter 32 of 3Yes
Site A, holding voters 1 and 21 of 3No
One hypervisor carrying any two voters1 of 3No
The inter-site VPN only2 of 3 on one sideOnly on the majority side

Kāpēc tunelis nekad nepievieno balsi

VPN ir transportēšana, nevis dalībnieks. Tas var padarīt attālu vēlētāju sasniedzamu un var pārvērst sadalījumu kaut kā tādā, kas izskatās kā lēns taimauts, un tas ir viss tā ieguldījums kvorumā. Ko tas pievieno, ir izmaksas, jo katram apstiprinājumam jāšķērso savienojums un etcd maksā par šo turp un atpakaļ ierakstos, kas skar raft žurnālu. Ceļš, kas mirgo, pārvērš replikāciju atkārtojumos un vēlēšanās.

Sadalījumi ir vieta, kur cilvēki gaida maģiju, tāpēc esiet precīzi. Ja savienojums pārtrūkst, kamēr vecais līderis sēž viena vēlētāja pusē, tā puse nevar apstiprināt un līderis atkāpjas, tiklīdz beidzas vēlēšanu taimauts, savukārt divu vēlētāju puse ievēl aizstājēju. etcd rokasgrāmata par kļūmju režīmiem skaidri apraksta uzvedību: turpināta pakalpošana vairākuma pusē, neviens otrs rakstāms klasteris izolētajā pusē.

Izlemiet, kuru pārtraukumu jūs pērkat

Divi plus viens ir likumīgs dizains, kad A vieta ir primārā un jūs pieņemat, ka tās zaudēšana nozīmē vadības plaknes ierakstu zaudēšanu, līdz kāds rīkojas. Par defektu to padara šī lēmuma atstāšana netiešu. Ierakstiet to runbook: no kuras vietas jūsu vadības plakne izdzīvo un ko operators dara, kad otra vieta nodziest 03:00.

Ja prasība ir “jebkura vieta drīkst sabojāties”, izvietojumam jātur vairākums katrā vietā, un trīs vēlētāji divās vietās to nevar izdarīt. Jūs vai nu pievienojat patiesi neatkarīgu trešo jomu — mazs reģions pie cita pakalpojumu sniedzēja der, ja ceļš uz to ir stabils — vai sadalāties divos klasteros ar atsevišķu etcd un pieņemat šī sadalījuma ekspluatācijas izmaksas. Nekāds liecinieka apvedceļš no tā neizvairās: etcd nav viegla arbitrāžas dalībnieka, tāpēc trešais vēlētājs ir pilnīgs dalībnieks ar savām diska, atmiņas un tīkla prasībām. Uzzīmēt diagrammā lodziņu ar uzrakstu liecinieks liecinieku nerada.

Kvorums nav tas pats, kas pakalpojums

etcd kvorums uztur API serveri spējīgu pieņemt ierakstus, un tas ir viss, ko tas uztur. Slodzes līdzsvarotāja veselības pārbaudes, ingress, CNI sasniedzamība caur tuneli, sējumu pievienošanas zonas un lietotņu replikācija katrai vajadzīga sava atbilde. Klasterim var būt tīrs vairākums un tas tomēr var nepiedāvāt lietotājiem neko noderīgu.

Pēc tam apstipriniet dalību, kura, jūsuprāt, jums ir, jo diagrammas dreifē:

kubectl -n kube-system get pods -l component=etcd -o wide
kubectl get endpoints kube-apiserver -n default
etcdctl member list -w table

Salīdziniet dalībnieku sarakstu ar izvietojuma rasējumu. Ja divi dalībnieki atrisinās uz vienu un to pašu resursdatoru vai vienu un to pašu statīvu, nepareizs ir rasējums, nevis klasteris, un izmēra maiņa ap nepareizu topoloģiju nopērk tikai dārgāku tā paša pārtraukuma versiju.

Pirms apstiprināt jebkuru trīs vēlētāju dizainu, atbildiet uz četriem jautājumiem: cik vēlētāju kopā zaudē barošanu, kuras vietas zaudēšana vēl atstāj vairākumu, kur sēž līderis, kad tunelis krīt, un ko vēl var darīt izdzīvojusī vieta. “Nezinu” uz jebkuru no tiem nozīmē, ka klasteris vēl nav augsti pieejams. Tās ir trīs mašīnas, kurām ir paveicies.

Saistītie raksti