Dräi Control-Plane-VM-en fillen sech wéi dräi Chancen, eng schlecht Nuecht z'iwwerliewen. Si sinn et net, an den Ofstand tëschent dësen zwou Iwwerzeegungen ass dat, wat en uerdentlecht Design mat dräi Kniet an e Cluster verwandelt, deen ophält Schreiwen unzehuelen, wann ee Gebai de Stroum verléiert. Eng VPN-Verbindung tëschent de Site-en mécht d'Maschinnen fireneen erreechbar an verdeckt de Problem, amplaz en ze behiewen. D'Stëmme ginn pro etcd-Member gezielt, an zwee vun dëse Membere kënnen nach ëmmer hannert engem Schalter, enger USV an enger Uplink-Leitung sëtzen.

Dräi Control-Plane-Kniet, eng Fehlerdomän

Dir ausféiert kubectl get nodes, gesitt dräi Control-Plane-Andräg an notéiert den Cluster als héich verfügbar. Dës Zuel beschreift plangbar Kapazitéit, net Iwwerliewe. An kubeadm ouni externen etcd hëlt och all Control-Plane-Kniet e Member op, also ginn dräi Kniet Iech wierklech dräi Wähler. Ob dës Wähler onofhängeg ausfalen, ass eng separat Fro, déi d'Knie-Lëscht net beäntwere kann.

Zwou VM-en op engem Hypervisor, zwee Regaler op enger Stroumversuergung, zwou Uplinken vun engem ISP: all Paar ass eng eenzeg Domän mat zwee Hostnamen. Schreift d'Plazéierung op a markéiert, wat all Wähler deelt — Hypervisor, PDU, Top-of-Rack-Schalter, Späicherarray, NAT-Gerät, VPN-Konzentrator. Entfernt dann all gedeelt Objet um Pabeier a zielt d'Stëmmen, déi bleiwen, nei. E Cluster, deen zwee Wähler duerch een eenzegen ausgefallenen Host verléiert, war déi ganz Zäit en Eenzelwähler-Cluster; keen hat him d'Fro nach gestallt.

Wat eng Opdeelung op zwee Site-en iwwerliewe kann an wat net

Wann dräi Wähler mat zwee an engem op zwee Site-en verdeelt sinn, behält déi méi grouss Säit de Quorum, wann deen anere Site verschwënnt, an d'Säit mat engem Wähler ni. Dës Asymmetrie ass Arithmetik, net Ofstëmmung. All etcd-Cluster op Majoritéitsbasis, deen genau op zwou onofhängeg Site-en verdeelt ass, fält an der Prüfung "verléier ee vun de Site-en a schreif weider" duerch, well béid Säiten zur selwechter Zäit méi wéi d'Halschent vun de Stëmmen hale missten.

D'Tabell hei drënner ass de séierste Wee, fir ze gesinn, wéi eng Ausfäll Dir tatsächlech kaaft hutt. Liest all Zeil esou: wann dës ganz Zeil haut Nuecht verschwënnt, kënnen d'Iwwerliewenden dann nach e Schreiwen festschreiwen?

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

Firwat den Tunnel ni eng Stëmm derbäisetzt

E VPN ass Transport, keen Member. Et kann en entfernte Wähler erreechbar maachen an et kann eng Partition an eppes verwandelen, dat wéi en luese Timeout ausgesäit, an dat ass säin ganze Bäitrag zum Quorum. Wat et derbäisetzt, sinn Käschten, well all Commit d'Verbindung iwwerqueeë muss an etcd déi Rees hin an zréck bei Schreiwen bezilt, déi de raft-Log beréieren. E Wee, dee flattert, verwandelt Replikatioun a Widderhuelunge Walen.

Partitionen sinn dee Punkt, wou d'Leit Magie erwaarden, sief also präzis. Wann d'Verbindung fält, während den ale Leader op der Säit mat engem Wähler sëtzt, kann déi Säit net committen an de Leader trëtt zréck, soubal den Wahl-Timeout ofleeft, während d'Säit mat zwee Wähler en Ersatz wielt. Den etcd-Guide iwwer Fehlermodi beschreift d'Verhalen einfach: weideren Déngscht op der Majoritéitssäit, keen zweete beschreiwbaren Cluster op der isoléierter Säit.

Entscheet Iech, wéi eng Ënnerbriechung Dir kaaft

Zwee plus een ass en legitimen Design, wann Site A de primären ass an Dir akzeptéiert, datt säi Verloscht de Verloscht vun Control-Plane-Schreiwen heescht, bis een handelt. Wat et zu engem Mangel mécht, ass dës Entscheedung implizit ze loossen. Schreift se an de Runbook: wéi ee Site Är Control Plane iwwerlieft, a wat en Operateur mécht, wann deen aneren Site um 03:00 ausgeet.

Wann d'Ufuerderung amplaz "jiddweree Site däerf ausfalen" ass, muss d'Plazéierung op jiddwer Site eng Majoritéit halen, an dräi Wähler iwwer zwee Site-en kënnen dat net. Entweder füügt Dir eng wierklech onofhängeg drëtt Domän derbäi — eng kleng Regioun bei engem aneren Ubidder funktionéiert, wann de Wee dohinner stabil ass — oder Dir deelt Iech an zwee Cluster mat getrenntem etcd an akzeptéiert d'Betribskäschte vun där Deelung. Keng Ofkierzung mam Zeien vermeit dat: etcd huet kee liichtgewiichtegen Arbiter-Member, also ass en drëtte Wähler e vollwäertege Member mat sengen eegene Fuerderungen un Disk, Erënnerung an Netzwierk. E Këschte mat der Etikett Zeien op den Diagramm ze zeechnen, erstellt keen.

Quorum ass net datselwecht wéi Déngscht

etcd-Quorum hält den API-Server fähig, Schreiwen unzehuelen, an dat ass alles, wat et hält. D'Gesondheetspréifunge vum Loadbalancer, Ingress, CNI-Erreechbarkeet duerch den Tunnel, Volume-Attach-Zonen an d'Applikatiounsreplikatioun brauchen all hir eege Äntwert. E Cluster kann eng propper Majoritéit halen an trotzdem de Benotzer näischt Nëtzlech ubidden.

Bestätegt duerno d'Memberschaft, déi Dir mengt ze hunn, well Diagrammer driften:

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

Vergläicht d'Memberlëscht mam Plazéierungsplang. Wann zwee Memberen op deen eenzegen Host oder dat eenzelt Regal opléisen, ass de Plang falsch an net den Cluster, an d'Gréisst ëm eng falsch Topologie z'änneren kaaft just eng deier Versioun vum selwechten Ausfall.

Ier Dir en Design mat dräi Wähler guttgeheescht, beäntwert véier Froen: wéi vill Wähler verléieren zesummen de Stroum, wien säi Site-Verluscht léisst nach eng Majoritéit iwwreg, wou sëtzt de Leader, wann den Tunnel fält, a wat kann de Site, deen iwwerlieft huet, nach maachen. En "net sécher" bei een dovun heescht, datt den Cluster nach net héich verfügbar ass. Et sinn dräi Maschinnen, déi Gléck haten.

Ähnlech Artikelen