Trije kontrôle-plane-VM's fiele as trije kânsen om in minne nacht te oerlibjen. Dat binne se net, en de ôfstân tusken dy twa oertsjûgingen is wat in tichtsje trije-knopen-ûntwerp feroaret yn in kluster dat ophâldt skriuwen te akseptearjen as ien gebou de stroom ferliest. In VPN-ferbining tusken de lokaasjes makket de masines foar elkoar berikber en ferstoppet it probleem ynstee fan it op te lossen. Stimmen wurde per etcd-lid teld, en twa fan dy leden kinne noch hieltyd efter ien skeakel, ien UPS en ien uplink sitte.

Trije kontrôle-plane-knopen, ien flaterdomein

Jo rinne kubectl get nodes, sjogge trije kontrôle-plane-ynfieringen en klassifisearje it kluster as heech beskikber. Dat oantal beskriuwt plenbere kapasiteit, net oerlibjen. Yn kubeadm sûnder eksterne etcd hostet elke kontrôle-plane-knoop ek in lid, dus trije knopen jouwe jo echt trije kiezers. Oft dy kiezers ûnôfhinklik mislearje is in aparte fraach dy't de knoplist net beantwurdzje kin.

Twa VM's op ien hypervisor, twa racks op ien stroomfoarsjenning, twa uplinks fan ien ISP: elk pear is ien domein mei twa hostnammen. Skriuw de pleatsing op en markearje wat elke kiezer dielt — hypervisor, PDU, top-of-rack-skeakel, opslacharray, NAT-apparaat, VPN-konsintrator. Ferwiderje dan elk dield objekt op papier en telle de stimmen dy't oerbliuwe opnij. In kluster dat twa kiezers ferliest troch ien mislearre host, hat al dy tiid in kluster mei ien kiezer west; nimmen hie it de fraach noch steld.

Wat in splitsing oer twa lokaasjes oerlibje kin en wat net

As trije kiezers as twa en ien oer twa lokaasjes pleatst wurde, hâldt de gruttere kant it kwoarum as it oare lokaasje ferdwynt, en de kant mei ien kiezer nea. Dy asymmetry is rekkenjen, net ôfstemmen. Elk etcd-kluster op basis fan mearderheid dat krekt oer twa ûnôfhinklike lokaasjes ferspraat is, slagget net foar de test "ferlies ien fan beide lokaasjes en bliuw fêstlizze", om't beide kanten tagelyk mear as de helte fan 'e stimmen hâlde moatte.

De tabel hjirûnder is de fluchste manier om te sjen hokker flaters jo eins kocht hawwe. Lês elke rige sa: as dizze hiele rige fannacht ferdwynt, kinne de oerlibbenden dan noch in skriuwing fêstlizze?

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

Wêrom't de tunnel nea in stim tafoeget

In VPN is ferfier, gjin lid. It kin in ôfstân-kiezer berikber meitsje en it kin in partysje feroarje yn eat dat op in stadige timeout liket, en dat is de hiele bydrage oan it kwoarum. Wat it tafoeget is kosten, om't elke fêstlizzing de ferbining oerstekke moat en etcd dy hin-en-wer reis betellet by skriuwen dy't it raft-log oanreitsje. In paad dat flappet feroaret replikaasje yn werhellings en ferkiezings.

Partysjes binne it plak dêr't minsken magy ferwachtsje, wês dus krekt oer har. As de ferbining falt wylst de âlde lieder op 'e kant mei ien kiezer sit, kin dy kant net fêstlizze en de lieder treedt ôf sadree't de ferkiezingstimeout ferrint, wylst de kant mei twa kiezers in ferfanger kiest. De etcd-gids oer flatermodi beskriuwt it gedrach gewoan: trochgeande tsjinst oan 'e mearderheidskant, gjin twadde skriuwber kluster oan 'e isolearre kant.

Bepaal hokker ûnderbrekking jo keape

Twa plus ien is in legitime ûntwerp as lokaasje A de primêre is en jo akseptearje dat it ferliezen dêrfan it ferlies fan kontrôle-plane-skriuwingen betsjut oant immen hannelt. Wat it ta in mankement makket, is dy beslissing ymplisyt litte. Set it yn it runbook: hokker lokaasje jo kontrôle-plane oerlibbet, en wat in operator docht as it oare lokaasje om 03:00 útgiet.

As de eask ynstee is "elk lokaasje mei mislearje", moat de pleatsing yn elk lokaasje in mearderheid hâlde, en trije kiezers oer twa lokaasjes kinne dat net. Jo foegje of in echt ûnôfhinklik tredde domein ta — in lytse regio by in oare leveransier wurket as it paad dêrrhinne stabyl is — of jo splitsje yn twa klusters mei aparte etcd en akseptearje de operasjonele kosten fan dy splitsing. Gjin getuige-shortcut foarkomt dit: etcd hat gjin lichtgewicht skiedsrjochter-lid, dus in tredde kiezer is in fol lid mei syn eigen easken foar skiif, ûnthâld en netwurk. In fak mei it label getuige op it diagram tekenje makket der net ien.

Kwoarum is net itselde as tsjinst

etcd-kwoarum hâldt de API-tsjinner by steat skriuwingen te akseptearjen, en dat is alles wat it hâldt. Sûnenschecks fan 'e load balancer, ingress, CNI-berikberens troch de tunnel, volume-oanhingzônes en applikaasje-replikaasje hawwe elk har eigen antwurd nedich. In kluster kin in skjinne mearderheid hâlde en dochs neat nuttich oan brûkers leverje.

Befêstigje dan it lidmaatskip dat jo tinke dat jo hawwe, om't diagrammen driuwe:

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

Fergelykje de ledelist mei de pleatsingstekening. As twa leden nei deselde host of itselde rack resolvje, is de tekening ferkeard en net it kluster, en grutte feroarje om in ferkearde topology keapet allinnich in djoerdere ferzje fan deselde ûnderbrekking.

Foardat jo ien trije-kiezers-ûntwerp goedkrije, beantwurdzje fjouwer fragen: hoefolle kiezers ferlieze tagelyk de stroom, hokker lokaasjeferlies lit noch in mearderheid oer, wêr sit de lieder as de tunnel falt, en wat kin it oerlibjende lokaasje noch dwaan. "Net wis" by ien fan har betsjut dat it kluster noch net heech beskikber is. It binne trije masines dy't gelok hân hawwe.

Relatearre artikelen