Kolme hallintatason virtuaalikonetta tuntuvat kolmelta mahdollisuudelta selvitä huonosta yöstä. Ne eivät ole, ja näiden kahden uskomuksen välinen etäisyys muuttaa siistin kolmen solmun suunnittelun klusteriksi, joka lopettaa kirjoitusten hyväksymisen, kun yksi rakennus menettää sähköt. Toimipaikkojen välinen VPN-linkki tekee koneista toisilleen saavutettavia ja piilottaa ongelman sen korjaamisen sijaan. Äänet lasketaan etcd-jäsentä kohden, ja kaksi näistä jäsenistä voi yhä istua yhden kytkimen, yhden UPSin ja yhden ylälinkin takana.

Kolme hallintatason solmua, yksi vikaantumisalue

Suoritat kubectl get nodes, näet kolme hallintatason merkintää ja kirjaat klusterin korkeasti saatavilla olevaksi. Tämä luku kuvaa ajastettavaa kapasiteettia, ei selviytymistä. Ilman ulkoista etcd:tä pidettävässä kubeadm:issa jokainen hallintatason solmu myös isännöi jäsentä, joten kolme solmua todella antaa kolme äänestäjää. Se, epäonnistuvatko nämä äänestäjät itsenäisesti, on erillinen kysymys, johon solmuluettelo ei voi vastata.

Kaksi virtuaalikonetta yhdellä hypervisorilla, kaksi räkkiä yhdellä virransyötöllä, kaksi ylälinkkiä yhdeltä operaattorilta: kukin pari on yksi toimialue, jolla on kaksi isäntänimeä. Kirjoita sijoittelu muistiin ja merkitse, mitä kukin äänestäjä jakaa — hypervisor, PDU, räkin yläreunan kytkin, tallennusmatriisi, NAT-laite, VPN-keskitin. Poista sitten jokainen jaettu objekti paperilla ja laske jäljelle jäävät äänet uudelleen. Klusteri, joka menettää kaksi äänestäjää yhden epäonnistuneen isännän takia, on ollut koko ajan yhden äänestäjän klusteri; kukaan ei ollut vielä kysynyt siltä kysymystä.

Mitä kahden toimipaikan jakautuminen voi kestää ja mitä ei

Kun kolme äänestäjää sijoitetaan kahden ja yhden suhteessa kahdelle toimipaikalle, suurempi puoli säilyttää kvorumin, kun toinen toimipaikka katoaa, ja yhden äänestäjän puoli ei koskaan. Tämä epäsymmetria on aritmetiikkaa, ei viritystä. Mikä tahansa enemmistöön perustuva etcd-klusteri, joka on jaettu täsmälleen kahdelle riippumattomalle toimipaikalle, epäonnistuu testissä "menetä kumpi tahansa toimipaikka ja jatka kuittaamista", koska molemmilla puolilla pitäisi samaan aikaan olla yli puolet äänistä.

Alla oleva taulukko on nopein tapa nähdä, mitkä viat todella ostit. Lue jokainen rivi näin: jos koko tämä rivi katoaa tänä yönä, voivatko selviytyjät yhä kuitata kirjoituksen?

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

Miksi tunneli ei koskaan lisää ääntä

VPN on siirtoa, ei jäsen. Se voi tehdä etäisen äänestäjän saavutettavaksi ja voi muuttaa jakautumisen joksikin, joka näyttää hitaalta aikakatkaisulta, ja se on koko sen panos kvorumiin. Mitä se lisää, on kustannus, koska jokaisen kuittauksen on ylitettävä linkki ja etcd maksaa tämän edestakaisen matkan kirjoituksissa, jotka koskettavat raft-lokia. Polku, joka lepattaa, muuttaa replikoinnin uusintayrityksiksi ja vaaleiksi.

Jakautumiset ovat paikka, jossa ihmiset odottavat magiaa, joten ole niistä täsmällinen. Jos linkki katkeaa, kun vanha johtaja istuu yhden äänestäjän puolella, se puoli ei voi kuitata ja johtaja astuu syrjään, kun vaalien aikakatkaisu päättyy, kun taas kahden äänestäjän puoli valitsee korvaajan. etcd:n opas vikatiloista kuvaa käyttäytymisen suoraan: jatkuva palvelu enemmistön puolella, ei toista kirjoitettavaa klusteria eristetyllä puolella.

Päätä, minkä katkoksen ostat

Kaksi plus yksi on laillinen suunnittelu, kun toimipaikka A on ensisijainen ja hyväksyt sen menettämisen tarkoittavan hallintatason kirjoitusten menettämistä, kunnes joku toimii. Sen tekee puutteeksi se, että päätös jätetään implisiittiseksi. Kirjoita se runbookiin: minkä toimipaikan kautta hallintatasonne selviää ja mitä operaattori tekee, kun toinen toimipaikka pimenee kello 03:00.

Jos vaatimus on sen sijaan "kumpi tahansa toimipaikka saa epäonnistua", sijoittelulla on oltava enemmistö kussakin toimipaikassa, eivätkä kolme äänestäjää kahdella toimipaikalla voi tehdä sitä. Joko lisäät todella riippumattoman kolmannen toimialueen — pieni alue toisella palveluntarjoajalla toimii, jos sinne johtava polku on vakaa — tai jaat kahteen klusteriin erillisellä etcd:llä ja hyväksyt jaon käyttökustannukset. Mikään todistajan oikotie ei vältä tätä: etcd:llä ei ole kevyttä välittäjäjäsentä, joten kolmas äänestäjä on täysi jäsen omine levy-, muisti- ja verkkovaatimuksineen. Laatikon piirtäminen kaavioon ja sen merkitseminen todistajaksi ei luo todistajaa.

Kvorum ei ole sama kuin palvelu

etcd-kvorum pitää API-palvelimen kykenevänä hyväksymään kirjoituksia, ja se on kaikki, mitä se pitää. Kuormantasaimen terveystarkastukset, ingress, CNI:n saavutettavuus tunnelin läpi, taltioiden liittämisalueet ja sovelluksen replikointi tarvitsevat kukin oman vastauksensa. Klusteri voi pitää puhtaan enemmistön ja silti tarjota käyttäjille ei mitään hyödyllistä.

Vahvista sitten se jäsenyys, jonka uskot olevansi, koska kaaviot ajautuvat:

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

Vertaa jäsenluetteloa sijoittelupiirrokseen. Jos kaksi jäsentä ratkeaa samalle isännälle tai samalle räkille, piirros on väärä, ei klusteri, ja väärän topologian ympärillä koon muuttaminen ostaa vain kalliimman version samasta katkoksesta.

Ennen kuin hyväksyt mitään kolmen äänestäjän suunnittelua, vastaa neljään kysymykseen: kuinka monta äänestäjää menettää sähköt yhdessä, kenen toimipaikan menetys jättää yhä enemmistön, missä johtaja istuu, kun tunneli putoaa, ja mitä selvinnyt toimipaikka voi yhä tehdä. "En ole varma" missä tahansa niistä tarkoittaa, että klusteri ei ole vielä korkeasti saatavilla. Se on kolme konetta, joilla on ollut onnea.

Aiheeseen liittyvät artikkelit