სამი მართვის სიბრტყის ვირტუალური მანქანა სამ შანსად ჩანს ცუდი ღამის გადასარჩენად. მაგრამ ასე არ არის, და სწორედ ამ ორ რწმენას შორის მანძილი აქცევს მოწესრიგებულ სამკვანძიან პროექტს კლასტერად, რომელიც წერის მიღებას წყვეტს, როცა ერთი შენობა ელექტროენერგიას კარგავს. 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-ის უკმარისობის რეჟიმების გზამკვლევი ქცევას პირდაპირ აღწერს: გაგრძელებული სერვისი უმრავლესობის მხარეს, არც ერთი მეორე ჩაწერადი კლასტერი იზოლირებულ მხარეს.

გადაწყვიტეთ, რომელ შეწყვეტას ყიდულობთ

ორი პლუს ერთი ლეგიტიმური პროექტია, როცა A ადგილი მთავარია და თქვენ აღიარებთ, რომ მისი დაკარგვა ნიშნავს მართვის სიბრტყის წერების დაკარგვას, სანამ ვინმე იმოქმედებს. მას ნაკლად აქცევს ამ გადაწყვეტილების იმპლიციტურად დატოვება. ჩაწერეთ ის 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

შეადარეთ წევრთა სია განლაგების ნახაზს. თუ ორი წევრი ერთსა და იმავე ჰოსტზე ან იმავე თაროზე წყდება, ნახაზია არასწორი და არა კლასტერი, და არასწორი ტოპოლოგიის გარშემო ზომის შეცვლა მხოლოდ იმავე შეწყვეტის უფრო ძვირი ვერსიის ყიდვაა.

სანამ სამამომრჩევლიან პროექტს დაამტკიცებთ, უპასუხეთ ოთხ კითხვას: რამდენი ამომრჩეველი კარგავს ელექტროენერგიას ერთად, რომელი ადგილის დაკარგვა ტოვებს ჯერ უმრავლესობას, სად ზის ლიდერი, როცა გვირაბი ვარდება, და რა შეუძლია ჯერ გადარჩენილ ადგილს. „არ ვარ დარწმუნებული“ რომელიმეზე ნიშნავს, რომ კლასტერი ჯერ მაღალხელმისაწვდომი არ არის. ეს სამი მანქანაა, რომლებსაც გაუმართლათ.

დაკავშირებული სტატიები