Гурван удирдлагын хавтгайн виртуал машин муу шөнөөс гарах гурван боломж мэт санагдана. Гэвч тийм биш, энэ хоёр итгэлийн хоорондын зай нь цэгцтэй гурван зангилааны загварыг нэг барилга цахилгаанаа алдах үед бичилт хүлээж авахаа болих кластер болгон хувиргадаг. Талбайн хоорондын VPN холбоос машинуудыг бие биедээ хүртээмжтэй болгож, асуудлыг засахын оронд нуудаг. Саналыг etcd гишүүн бүрээр тоолдог бөгөөд тэдгээр гишүүдийн хоёр нь нэг коммутатор, нэг UPS, нэг шугамын ард сууж болно.

Гурван удирдлагын зангилаа, нэг эвдрэлийн домэйн

Та kubectl get nodes ажиллуулж, удирдлагын хавтгайн гурван бичлэг харж, кластерыг өндөр хүртээмжтэй гэж бүртгэнэ. Энэ тоо нь төлөвлөгдөх хүчин чадлыг тодорхойлдог, амьдрах чадварыг биш. Гадаад etcdгүй kubeadm дотор удирдлагын зангилаа бүр гишүүнийг мөн байршуулдаг тул гурван зангилаа үнэхээр гурван сонгогч өгдөг. Тэдгээр сонгогчид бие даан эвдэрч байгаа эсэх нь зангилааны жагсаалт хариулж чадахгүй тусдаа асуулт юм.

Нэг хайпервизор дээр хоёр VM, нэг цахилгаан хангамж дээр хоёр тавиур, нэг ISPээс хоёр шугам: хос бүр хоёр хост нэр зүүсэн нэг домэйн. Байршлыг бичиж, сонгогч бүр юуг хуваалцаж байгааг тэмдэглээрэй — хайпервизор, PDU, тавиурын дээд коммутатор, хадгалалтын массив, NAT төхөөрөмж, VPN төвлөрүүлэгч. Дараа нь цаасан дээр хуваалцсан объект бүрийг хасч, үлдсэн саналыг дахин тоол. Нэг эвдэрсэн хостод хоёр сонгогчийг алддаг кластер эхнээсээ нэг сонгогчтой кластер байсан; хэн ч түүнээс энэ асуултыг асуугаагүй байсан.

Хоёр талбайн хуваагдал юуг тэсвэрлэж чадах, юуг чадахгүй

Гурван сонгогчийг хоёр талбайд хоёр, нэг гэж байрлуулахад нөгөө талбай алга болоход том тал кворумаа хадгалж, нэг сонгогчтой тал хэзээ ч хадгалдаггүй. Энэ тэгш бус байдал нь арифметик, тохируулга биш. Яг хоёр бие даасан талбайд тархсан олонхид суурилсан аливаа etcd кластер «аль ч талбайг алдаж, баталгаажуулалтаа үргэлжлүүл» шалгалтад унадаг, учир нь хоёр тал нэгэн зэрэг саналын талаас илүүг эзэмших ёстой.

Доорх хүснэгт нь та ямар алдаа худалдаж авснаа харах хамгийн хурдан арга. Мөр бүрийг ингэж уншаарай: өнөө шөнө энэ бүх мөр алга болвол амьд үлдсэд бичилтийг баталгаажуулж чадах уу?

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

Яагаад туннель хэзээ ч санал нэмдэггүй

VPN бол тээвэр, гишүүн биш. Тэр алслагдсан сонгогчийг хүртээмжтэй болгож, хуваагдалыг удаан хугацааны хязгаар мэт харагдах зүйл болгон хувиргаж чадна, кворумд оруулах хувь нэмэр нь тэр л. Нэмдэг зүйл нь зардал, учир нь баталгаажуулалт бүр холбоосыг давах ёстой бөгөөд etcd raft логт хүрэх бичилтүүдэд энэ очиж ирэх замыг төлдөг. Сэгсэрдэг зам нь репликацийг дахин оролдлого, сонгууль болгон хувиргадаг.

Хуваагдал бол хүмүүс ид шид хүлээдэг газар тул тэдний талаар нарийвчлалтай байгаарай. Хуучин удирдагч нэг сонгогчтой талд сууж байхад холбоос тасарвал тэр тал баталгаажуулж чадахгүй бөгөөд сонгуулийн хугацаа дуусахад удирдагч албан тушаалаа өгдөг, харин хоёр сонгогчтой тал орлох хүнийг сонгодог. etcd-ийн алдааны горимын гарын авлага зан авирыг тодорхой тайлбарладаг: олонхийн талд үргэлжилсэн үйлчилгээ, тусгаарлагдсан талд хоёр дахь бичих боломжтой кластер байхгүй.

Ямар тасалдлыг худалдаж авахаа шийдээрэй

Хоёр нэмэх нэг нь А талбай үндсэн бөгөөд түүнийг алдах нь хэн нэгэн арга хэмжээ авах хүртэл удирдлагын хавтгайн бичилтийг алдах гэсэн үг гэдгийг хүлээн зөвшөөрвөл хууль ёсны загвар. Үүнийг алдаа болгодог нь тэр шийдвэрийг далд үлдээх явдал. Үүнийг runbook-д бичээрэй: таны удирдлагын хавтгай аль талбайгаас амьд үлдэх, нөгөө талбай 03:00-д унтрахад оператор юу хийдэг.

Хэрэв шаардлага нь «аль ч талбай эвдэрч болно» бол байршил талбай бүрд олонхийг хадгалах ёстой бөгөөд хоёр талбайд гурван сонгогч үүнийг чадахгүй. Та үнэхээр бие даасан гурав дахь домэйныг нэмэх — өөр үйлчилгээ үзүүлэгчийн жижиг бүс нутаг тийшээ хүрэх зам тогтвортой бол ажиллана — эсвэл тусдаа etcd-тэй хоёр кластер болж хуваагдаж, тэр хуваагдалын үйл ажиллагааны зардлыг хүлээн зөвшөөрөх хэрэгтэй. Ямар ч гэрчийн товчлол үүнээс зайлсхийхгүй: etcd-д хөнгөн шүүгч гишүүн байхгүй тул гурав дахь сонгогч өөрийн диск, санах ой, сүлжээний шаардлагатай бүрэн гишүүн юм. Диаграм дээр «гэрч» гэж бичсэн хайрцаг зурсан нь гэрч үүсгэхгүй.

Кворум нь үйлчилгээтэй ижил биш

etcd кворум нь API серверийг бичилт хүлээж авах чадвартай байлгадаг бөгөөд байлгадаг зүйл нь тэр л. Ачааллын тэнцвэржүүлэгчийн эрүүл мэндийн шалгалт, ingress, туннелиар дамжуулан CNI хүртээмж, эзлэхүүн холболтын бүс, програмын репликаци тус бүр өөрийн хариултыг шаарддаг. Кластер цэвэр олонхийг хадгалж, гэсэн хэдий ч хэрэглэгчдэд ямар ч ашигтай зүйл санал болгож чадахгүй байж болно.

Дараа нь та байна гэж бодож буй гишүүнчлэлээ баталгаажуулаарай, учир нь диаграмууд гулсдаг:

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

Гишүүдийн жагсаалтыг байршлын зурагтай харьцуул. Хоёр гишүүн нэг хост эсвэл нэг тавиурт шийдэгдвэл кластер биш, зураг нь буруу бөгөөд буруу топологийн эргэн тойронд хэмжээг өөрчлөх нь ижил тасалдлын илүү үнэтэй хувилбарыг л худалдаж авдаг.

Ямар ч гурван сонгогчтой загварыг зөвшөөрөхөөс өмнө дөрвөн асуултад хариул: хэдэн сонгогч хамт цахилгаан алдах, аль талбайн алдагдал олонхийг үлдээх, туннель унах үед удирдагч хаана суух, амьд үлдсэн талбай юу хийж чадах. Тэдгээрийн аль нэгэнд нь «итгэлгүй байна» гэдэг нь кластер хараахан өндөр хүртээмжтэй биш гэсэн үг. Энэ бол азтай гурван машин.

Холбоотой нийтлэлүүд