Hat in Kubernetes-kluster oer twa lokaasjes trije etcd-kiezers nedich?
Trije kontrôle-plane-knopen oer twa VPN-lokaasjes ferlieze noch hieltyd it kwoarum as it gruttere lokaasje útgiet. Tel de echte etcd-kiezers en kies it ferlies dat jo oerlibje.
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 disappears | Voters left | Writes still commit |
|---|---|---|
| Site B, holding voter 3 | 2 of 3 | Yes |
| Site A, holding voters 1 and 2 | 1 of 3 | No |
| One hypervisor carrying any two voters | 1 of 3 | No |
| The inter-site VPN only | 2 of 3 on one side | Only 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.