Tatlong control-plane VM ang pakiramdam ay tatlong pagkakataon na makaligtas sa masamang gabi. Hindi, at ang distansya ng dalawang paniniwalang iyon ang nagpapalit ng maayos na tatlong-node na disenyo tungo sa cluster na tumitigil tumanggap ng sulat kapag nawalan ng kuryente ang isang gusali. Ang VPN link sa pagitan ng mga site ay nagpapadali ng pag-abot sa isa't isa at nagtatago ng problema sa halip na ayusin ito. Binibilang ang boto kada miyembro ng etcd, at dalawa sa mga miyembrong iyon ay maaari pa ring umupo sa likod ng isang switch, isang UPS at isang uplink.

Tatlong control-plane node, isang failure domain

Patakbuhin mo ang kubectl get nodes, makikita mo ang tatlong entry ng control-plane at itatala ang cluster bilang highly available. Ang bilang na iyon ay naglalarawan ng planong kapasidad, hindi ng kaligtasan. Sa kubeadm na walang external etcd, ang bawat control-plane node ay nagho-host din ng miyembro, kaya talagang nagbibigay ng tatlong botante ang tatlong node. Kung ang mga botanteng iyon ay bumagsak nang independiyente ay hiwalay na tanong na hindi masasagot ng listahan ng node.

Dalawang VM sa isang hypervisor, dalawang rack sa isang power supply, dalawang uplink mula sa isang ISP: bawat pares ay isang domain na may dalawang hostname. Isulat ang placement at markahan kung ano ang ibinabahagi ng bawat botante — hypervisor, PDU, switch sa itaas ng rack, storage array, NAT device, VPN concentrator. Pagkatapos alisin sa papel ang bawat shared object at bilangin muli ang natitirang boto. Ang cluster na nawawalan ng dalawang botante dahil sa isang bigong host ay isang botanteng cluster na sa simula pa; walang nagtanong nito.

Ano ang kaya at hindi kaya ng paghahati sa dalawang site

Kapag tatlong botante ang inilagay na dalawa at isa sa dalawang site, pinapanatili ng mas malaking panig ang quorum kapag nawala ang kabilang site, at ang panig na may isang botante ay hindi kailanman. Ang kawalan ng simetrya ay aritmetika, hindi tuning. Anumang etcd cluster na nakabatay sa mayorya na nakalatag nang eksakto sa dalawang independiyenteng site ay nabigo sa pagsubok na "mawala ang alinman sa site at magpatuloy sa pag-commit", dahil kailangang hawakan ng dalawang panig ang higit sa kalahati ng boto nang sabay.

Ang talahanayan sa ibaba ang pinakamabilis na paraan upang makita kung aling mga pagkabigo talaga ang binili mo. Basahin ang bawat hilera nang ganito: kung mawala ang buong hilerang ito ngayong gabi, makakapag-commit pa ba ang mga nakaligtas ng sulat?

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

Bakit hindi kailanman nagdadagdag ng boto ang tunnel

Ang VPN ay transportasyon, hindi miyembro. Maaari nitong gawing naaabot ang isang malayong botante at maaaring gawing parang mabagal na timeout ang isang paghahati, at iyon lamang ang buong ambag nito sa quorum. Ang idinadagdag nito ay gastos, dahil kailangang tumawid ng link ang bawat commit at binabayaran ng etcd ang paglalakbay pabalik-balik sa mga sulat na humahawak sa raft log. Ang landas na kumikislap ay ginagawang mga muling pagtatangka at halalan ang replikasyon.

Ang mga paghahati ang lugar kung saan inaasahan ng mga tao ang mahika, kaya maging tumpak tungkol sa mga ito. Kapag bumagsak ang link habang nakaupo ang lumang lider sa panig ng isang botante, hindi makakapag-commit ang panig na iyon at bumababa ang lider kapag umalis ang eleksyon timeout, habang ang panig ng dalawang botante ay pumipili ng kapalit. Ang gabay ng etcd tungkol sa mga failure mode ay malinaw na naglalarawan ng pag-uugali: patuloy na serbisyo sa panig ng mayorya, walang pangalawang cluster na maisusulat sa nakahiwalay na panig.

Magpasya kung aling pagkaantala ang binibili mo

Dalawang dagdag isa ay lehitimong disenyo kapag Site A ang pangunahin at tinatanggap mong ang pagkawala nito ay pagkawala ng control-plane na sulat hanggang may kumilos. Ang gumagawa nitong depekto ay ang pag-iwan sa desisyong iyon na implicit. Isulat ito sa runbook: aling site ang nilalampasan ng control plane mo, at ano ang ginagawa ng operator kapag nag-off ang kabilang site sa 03:00.

Kung ang pangangailangan ay "maaaring bumagsak ang alinmang site", kailangang hawakan ng placement ang mayorya sa bawat site, at tatlong botante sa dalawang site ay hindi kaya iyon. Magdadagdag ka ng tunay na independiyenteng ikatlong domain — gumagana ang maliit na rehiyon sa ibang provider kung matatag ang daan patungo roon — o nahahati sa dalawang cluster na may hiwalay na etcd at tinatanggap ang operational na gastos ng paghahating iyon. Walang shortcut na saksi ang umiiwas dito: walang magaan na arbiter member ang etcd, kaya ang ikatlong botante ay buong miyembro na may sariling pangangailangan sa disk, memory at network. Ang pagguhit ng kahon na may label na saksi sa diagram ay hindi gumagawa ng saksi.

Ang quorum ay hindi katulad ng serbisyo

Pinapanatili ng etcd quorum na kayang tumanggap ng sulat ang API server, at iyon lamang ang pinapanatili nito. Ang health check ng load balancer, ingress, abot ng CNI sa tunnel, mga attachment zone ng volume at replikasyon ng aplikasyon ay may kanya-kanyang sagot na kailangan. Maaaring may malinis na mayorya ang cluster at wala pa ring naibibigay na kapaki-pakinabang sa mga user.

Pagkatapos kumpirmahin ang pagiging miyembro na inaakala mong mayroon ka, dahil nagd-drift ang mga diagram:

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

Ihambing ang listahan ng miyembro sa placement drawing. Kung dalawang miyembro ang nagre-resolve sa parehong host o parehong rack, ang drawing ang mali at hindi ang cluster, at ang pagbabago ng laki sa maling topology ay bumibili lamang ng mas mahal na bersyon ng parehong pagkaantala.

Bago aprubahan ang anumang tatlong-botanteng disenyo, sagutin ang apat na tanong: ilang botante ang nawawalan ng kuryente nang sabay, aling pagkawala ng site ang nag-iiwan pa ng mayorya, saan nakaupo ang lider kapag bumagsak ang tunnel, at ano pa ang kaya ng nakaligtas na site. Ang "hindi sigurado" sa alinman sa mga ito ay nangangahulugang hindi pa highly available ang cluster. Tatlong makina ito na nagkaroon ng suwerte.

Kaugnay na mga artikulo