Kolm juhtimistasandi VM-i tunduvad kolme võimalusena halva öö üle elada. Need ei ole, ja vahemaa nende kahe veendumuse vahel muudab korraliku kolme sõlme lahenduse kobaraks, mis lõpetab kirjutiste vastuvõtmise, kui üks hoone kaotab voolu. VPN-link asukohtade vahel teeb masinad üksteisele kättesaadavaks ja peidab probleemi selle parandamise asemel. Hääli loetakse etcd-liikme kohta ja kaks neist liikmetest võivad endiselt istuda ühe lüliti, ühe UPS-i ja ühe üleslingi taga.

Kolm juhtimistasandi sõlme, üks tõrkedomeen

Käivitate kubectl get nodes, näete kolme juhtimistasandi kirjet ja registreerite klasteri kõrgelt kättesaadavana. See arv kirjeldab planeeritavat mahtu, mitte ellujäämist. Ilma välise etcd-ta hoitavas kubeadm-is majutab iga juhtimistasandi sõlm ka liiget, nii et kolm sõlme annavad tõesti kolm hääletajat. Kas need hääletajad tõrkuvad sõltumatult, on eraldi küsimus, millele sõlmede loend ei suuda vastata.

Kaks VM-i ühel hüperviisoril, kaks racki ühel toiteallikal, kaks üleslinki ühelt ISP-lt: iga paar on üks domeen, mis kannab kahte hostinime. Kirjutage paigutus üles ja märkige, mida iga hääletaja jagab — hüperviisor, PDU, racki ülaosa kommutaator, salvestusmassiiv, NAT-seade, VPN-kontsentraator. Seejärel eemaldage paberil iga jagatud objekt ja loendage uuesti allesjäänud hääled. Kobar, mis kaotab kaks hääletajat ühe nurjunud hosti tõttu, on kogu aeg olnud ühe hääletajaga kobar; keegi polnud sellele veel küsimust esitanud.

Mida kahe asukoha poolitamine üle elab ja mida mitte

Kui kolm hääletajat on kahe asukoha peale paigutatud kahe ja ühena, säilitab suurem pool kvoorumi, kui teine asukoht kaob, ja ühe hääletajaga pool mitte kunagi. See asümmeetria on aritmeetika, mitte häälestus. Iga enamuspõhine etcd-kobar, mis on jaotatud täpselt kahe sõltumatu asukoha vahel, ebaõnnestub testis "kaota kumb tahes asukoht ja jätka kinnitamist", sest mõlemal poolel peaks samal ajal olema rohkem kui pool häältest.

Allolev tabel on kiireim viis näha, millised tõrked te tegelikult ostsite. Lugege iga rida nii: kui kogu see rida täna öösel kaob, kas ellujäänud saavad ikka kirjutise kinnitada?

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

Miks tunnel kunagi häält ei lisa

VPN on transport, mitte liige. See võib muuta kaugema hääletaja kättesaadavaks ja võib muuta partitsiooni millekski, mis näeb välja nagu aeglane ajalõpp, ja see on kogu selle panus kvoorumisse. Mida see lisab, on kulu, sest iga kinnitus peab lingi ületama ja etcd maksab selle edasi-tagasi reisi kirjutistel, mis puudutavad raft-logi. Kõikuv tee muudab replikatsiooni korduskatseteks ja valimisteks.

Partitsioonid on koht, kus inimesed ootavad maagiat, seega olge nendega täpne. Kui link katkeb, samal ajal kui vana juht istub ühe hääletajaga poolel, ei saa see pool kinnitada ja juht astub tagasi, kui valimise ajalõpp lõpeb, samal ajal kui kahe hääletajaga pool valib asendaja. etcd juhend tõrkeolukordade kohta kirjeldab käitumist lihtsalt: jätkuv teenus enamuse poolel, ükski teine kirjutatav kobar isoleeritud poolel.

Otsustage, millist katkestust te ostate

Kaks pluss üks on õiguspärane lahendus, kui asukoht A on esmane ja nõustute, et selle kaotamine tähendab juhtimistasandi kirjutiste kaotamist, kuni keegi tegutseb. Selle veaks muudab see, kui jätate selle otsuse kaudseks. Pange see runbooki: millise asukoha juures teie juhtimistasand ellu jääb ja mida operaator teeb, kui teine asukoht kell 03:00 pimeneb.

Kui nõue on hoopis "kumb tahes asukoht võib tõrkuda", peab paigutus hoidma enamust igas asukohas, ja kolm hääletajat kahe asukoha peale ei suuda seda teha. Te kas lisate tõeliselt sõltumatu kolmanda domeeni — väike piirkond teise teenusepakkuja juures toimib, kui tee sinna on stabiilne — või jagunete kaheks klasteriks eraldi etcd-ga ja nõustute selle jagunemise tegevuskuluga. Ükski tunnistaja-otsetee ei väldi seda: etcd-l pole kerget vahekohtunikku liiget, seega kolmas hääletaja on täisliige oma ketta-, mälu- ja võrgunõuetega. Diagrammile silt "tunnistaja" kantud kasti joonistamine ei loo tunnistajat.

Kvoorum ei ole sama mis teenus

etcd kvoorum hoiab API-serveri võimelisena kirjutisi vastu võtma ja see on kõik, mida see hoiab. Koormusjaoturi tervisekontrollid, ingress, CNI kättesaadavus läbi tunneli, köidete kinnitamise tsoonid ja rakenduse replikatsioon vajavad igaüks oma vastust. Kobar võib hoida puhast enamust ja ikkagi mitte pakkuda kasutajatele midagi kasulikku.

Seejärel kinnitage liikmelisus, mille arvate olevat, sest diagrammid triivivad:

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

Võrrelge liikmete loendit paigutusjoonisega. Kui kaks liiget lahenevad samale hostile või samale rackile, on joonis vale, mitte kobar, ja vale topoloogia ümber suuruse muutmine ostab ainult sama katkestuse kallima versiooni.

Enne mis tahes kolme hääletajaga lahenduse kinnitamist vastake neljale küsimusele: kui palju hääletajaid kaotab voolu koos, mille asukoha kaotus jätab alles enamuse, kus istub juht, kui tunnel kukub, ja mida ellujäänud asukoht veel teha saab. "Pole kindel" ükskõik millise puhul tähendab, et kobar ei ole veel kõrgelt kättesaadav. See on kolm masinat, millel on vedanud.

Seotud artiklid