Adakah kluster Kubernetes dua tapak memerlukan tiga pengundi etcd?
Tiga nod satah kawalan merentas dua tapak VPN masih kehilangan kuorum apabila tapak yang lebih besar padam. Kira pengundi etcd sebenar dan pilih kerugian yang anda selamatkan.
Tiga VM satah kawalan terasa seperti tiga peluang untuk bertahan malam yang buruk. Namun tidak, dan jarak antara kedua-dua kepercayaan itulah yang menukar reka bentuk tiga nod yang kemas menjadi kluster yang berhenti menerima tulisan apabila satu bangunan kehilangan kuasa. Pautan VPN antara tapak menjadikan mesin boleh dicapai antara satu sama lain dan menyembunyikan masalah dan bukannya membaikinya. Undi dikira bagi setiap anggota etcd, dan dua daripada anggota itu masih boleh duduk di belakang satu suis, satu UPS dan satu pautan atas.
Tiga nod satah kawalan, satu domain kegagalan
Anda menjalankan kubectl get nodes, melihat tiga entri satah kawalan dan merekodkan kluster sebagai tersedia tinggi. Bilangan itu menggambarkan kapasiti yang boleh dijadualkan, bukan kelangsungan hidup. Dalam kubeadm tanpa etcd luaran, setiap nod satah kawalan juga menghoskan seorang anggota, jadi tiga nod benar-benar memberi anda tiga pengundi. Sama ada pengundi itu gagal secara bebas ialah soalan berasingan yang tidak dapat dijawab oleh senarai nod.
Dua VM pada satu hypervisor, dua rak pada satu bekalan kuasa, dua pautan atas daripada satu ISP: setiap pasangan ialah satu domain yang memakai dua nama hos. Tuliskan penempatan dan tandakan apa yang dikongsi setiap pengundi — hypervisor, PDU, suis atas rak, tatasusunan storan, peranti NAT, pemusat VPN. Kemudian buang setiap objek kongsi di atas kertas dan kira semula undi yang tinggal. Kluster yang kehilangan dua pengundi kerana satu hos gagal selama ini ialah kluster satu pengundi; tiada siapa yang pernah bertanya soalan itu kepadanya.
Apa yang boleh dan tidak boleh ditahan oleh perpecahan dua tapak
Apabila tiga pengundi diletakkan dua dan satu merentas dua tapak, pihak yang lebih besar mengekalkan kuorum apabila tapak lain lenyap dan pihak satu pengundi tidak pernah. Asimetri itu ialah aritmetik, bukan penalaan. Mana-mana kluster etcd berasaskan majoriti yang tersebar tepat pada dua tapak bebas gagal ujian "hilang mana-mana tapak dan terus komit", kerana kedua-dua pihak perlu memegang lebih daripada separuh undi pada masa yang sama.
Jadual di bawah ialah cara terpantas untuk melihat kegagalan mana yang sebenarnya anda beli. Baca setiap baris begini: jika seluruh baris ini lenyap malam ini, bolehkah yang terselamat masih komit tulisan?
| 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 |
Mengapa terowong tidak pernah menambah undi
VPN ialah pengangkutan, bukan anggota. Ia boleh menjadikan pengundi jauh boleh dicapai dan boleh menukar sekatan menjadi sesuatu yang kelihatan seperti tamat masa perlahan, dan itulah seluruh sumbangannya kepada kuorum. Yang ditambahnya ialah kos, kerana setiap komit mesti melintasi pautan dan etcd membayar perjalanan pergi balik itu pada tulisan yang menyentuh log raft. Laluan yang berkelip menukar replikasi menjadi percubaan semula dan pilihan raya.
Sekatan ialah tempat orang mengharapkan keajaiban, jadi tepatlah mengenainya. Jika pautan putus semasa pemimpin lama duduk di pihak satu pengundi, pihak itu tidak boleh komit dan pemimpin meletak jawatan apabila tamat masa pilihan raya tamat, manakala pihak dua pengundi memilih pengganti. Panduan etcd tentang mod kegagalan menerangkan tingkah laku secara terus: perkhidmatan berterusan di pihak majoriti, tiada kluster kedua yang boleh ditulis di pihak terpencil.
Tentukan gangguan mana yang anda beli
Dua tambah satu ialah reka bentuk sah apabila Tapak A ialah yang utama dan anda menerima bahawa kehilangannya bermakna kehilangan tulisan satah kawalan sehingga seseorang bertindak. Yang menjadikannya kecacatan ialah membiarkan keputusan itu tersirat. Tulis dalam runbook: tapak mana satah kawalan anda bertahan, dan apa yang dilakukan pengendali apabila tapak lain padam pada 03:00.
Jika keperluan sebaliknya ialah "mana-mana tapak boleh gagal", penempatan mesti memegang majoriti di setiap tapak, dan tiga pengundi merentas dua tapak tidak boleh berbuat demikian. Anda sama ada menambah domain ketiga yang benar-benar bebas — wilayah kecil pada pembekal lain berfungsi jika laluan ke sana stabil — atau berpecah kepada dua kluster dengan etcd berasingan dan menerima kos operasi perpecahan itu. Tiada jalan pintas saksi yang mengelakkannya: etcd tiada anggota penimbang tara yang ringan, jadi pengundi ketiga ialah anggota penuh dengan keperluan cakeranya sendiri untuk cakera, memori dan rangkaian. Melukis kotak berlabel saksi pada rajah tidak mencipta saksi.
Kuorum bukan sama dengan perkhidmatan
Kuorum etcd memastikan pelayan API mampu menerima tulisan, dan itu sahaja yang dijaganya. Semakan kesihatan pengimbang beban, ingress, kebolehcapaian CNI merentas terowong, zon lampiran volum dan replikasi aplikasi masing-masing memerlukan jawapannya sendiri. Kluster boleh memegang majoriti bersih dan masih tidak menawarkan apa-apa yang berguna kepada pengguna.
Kemudian sahkan keahlian yang anda fikir anda miliki, kerana rajah hanyut:
kubectl -n kube-system get pods -l component=etcd -o wide
kubectl get endpoints kube-apiserver -n default
etcdctl member list -w table
Bandingkan senarai anggota dengan lukisan penempatan. Jika dua anggota diselesaikan kepada hos yang sama atau rak yang sama, lukisan itu yang salah dan bukan kluster, dan mengubah saiz di sekitar topologi yang salah hanya membeli versi yang lebih mahal bagi gangguan yang sama.
Sebelum meluluskan mana-mana reka bentuk tiga pengundi, jawab empat soalan: berapa ramai pengundi kehilangan kuasa bersama-sama, kehilangan tapak siapa yang masih meninggalkan majoriti, di mana pemimpin duduk apabila terowong jatuh, dan apa yang masih boleh dilakukan oleh tapak yang terselamat. "Tidak pasti" pada mana-mana daripadanya bermakna kluster itu masih belum tersedia tinggi. Ia tiga mesin yang bernasib baik.