Cloister → энгийн OTP кластерын удирдлага

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

Cloister → энгийн OTP кластерын удирдлага

Энэ нь үнэхээр азтай зүйл болсон эрлан, бидний аятайхан синтакс, шуугиан тарьсан тул сонгосон нь нэгдүгээр зэрэглэлийн тархсан системүүдийн дэмжлэг. Онолын хувьд энэ нь маш энгийн сонсогдож байна:

Өөр өөр зангилаа дээрх процессууд, түүнчлэн холбоосууд болон мониторуудын хооронд дамжих мессеж нь ил тод [...]

Практикт бүх зүйл арай илүү төвөгтэй байдаг. Тархсан эрлан "контейнер" гэдэг нь тээвэрлэлтийн зориулалттай том төмөр хайрцаг, "докер" гэдэг нь ердөө л урт эрэгчин гэсэн утгатай ижил утгатай байх үед бүтээгдсэн. IN IP4 Олон тооны эзэнгүй хаягууд байсан, сүлжээний тасалдал нь ихэвчлэн хархнууд кабелийг зажлахаас үүдэлтэй байдаг бөгөөд үйлдвэрлэлийн системийн дундаж ажиллах хугацааг хэдэн арван жилээр хэмждэг.

Одоо бид бүгдээрээ гайхалтай бие дааж, савлаж, тарааж ажиллаж байна эрлан Динамик IP хаягууд нь маш санамсаргүй байдлын зарчмаар тараагддаг, зангилаанууд нь төлөвлөгчийн зүүн өсгийт дур зоргоороо гарч ирэх ба алга болдог орчинд. Түгээмэл ажиллаж байгаа төсөл болгонд овоолсон кодоос зайлсхийхийн тулд эрлан, дайсагнасан орчинтой тэмцэхийн тулд тусламж шаардлагатай.

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

шаардлага

Би хувьдаа кластерын удирдлагыг хариуцах, дараах шинж чанаруудтай номын сан хэрэгтэй байсан.

  • зангилааны хатуу кодлогдсон жагсаалт болон үйлчилгээгээр дамжуулан динамик нээлтийн аль алинд нь ил тод ажиллах эрлан;
  • топологийн өөрчлөлт болгонд бүрэн ажиллагаатай буцаан дуудлага хийх (зангилаа энд, зангилаа энд, сүлжээний тогтворгүй байдал, хуваагдал);
  • -тэй адил урт ба богино нэртэй кластер эхлүүлэхэд зориулсан ил тод интерфейс :nonode@nohost;
  • Докерын дэмжлэг нь дэд бүтцийн код бичих шаардлагагүй.

Сүүлийнх нь би програмыг дотооддоо туршиж үзсэний дараа гэсэн үг юм :nonode@nohost, эсвэл зохиомлоор тархсан орчинд ашиглан test_cluster_task, Би зүгээр л гүймээр байна docker-compose up --scale my_app=3 ямар ч кодын өөрчлөлтгүйгээр docker дээр гурван тохиолдлыг хэрхэн гүйцэтгэж байгааг хараарай. Би мөн адил хамааралтай програмуудыг хүсч байна mnesia - топологи өөрчлөгдөхөд хөшигний ард тэд кластерыг програмаас нэмэлт цохилтгүйгээр шууд сэргээдэг.

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

Сонгосон хандлага

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

Аппликейшн хэлбэрээр ажиллуулахад номын сан үүнд тулгуурладаг config, үүнээс дараах үндсэн утгуудыг уншина:

config :cloister,
  otp_app: :my_app,
  sentry: :"cloister.local", # or ~w|n1@foo n2@bar|a
  consensus: 3,              # number of nodes to consider
                             #    the cluster is up
  listener: MyApp.Listener   # listener to be called when
                             #    the ring has changed

Дээрх параметрүүд нь шууд утгаараа дараахь утгатай. Хумсчин OTP програмд ​​ашигладаг :my_app, ашигладаг erlang үйлчилгээний нээлт зангилааг холбохын тулд дор хаяж гурваас доошгүй ба MyApp.Listener модуль (хэрэгжүүлж байна @behaviour Cloister.Listener) нь топологийн өөрчлөлтийн талаарх мэдэгдэл хүлээн авахаар тохируулагдсан. Бүрэн тохиргооны дэлгэрэнгүй тайлбарыг эндээс олж болно баримт бичиг.

Энэхүү тохиргооны тусламжтайгаар програм Хумсчин байх болно үе шаттайгаар эхлүүлэх, зөвшилцөлд хүрэх хүртэл үндсэн програмыг эхлүүлэх үйл явцыг хойшлуулах (дээрх жишээн дээрх гурван зангилаа холбогдож, холбогдсон байна.) Энэ нь үндсэн програмыг эхлүүлэх үед кластер аль хэдийн бэлэн болсон гэж үзэх боломжийг олгодог. Топологи өөрчлөгдөх бүрт (зангилаанууд нь бүрэн синхроноор эхэлдэггүй тул тэдгээрийн олонх байх болно) зохицуулагчийг дуудах болно. MyApp.Listener.on_state_change/2. Ихэнх тохиолдолд бид статусын мессеж хүлээн авахдаа ямар нэгэн үйлдэл хийдэг %Cloister.Monitor{status: :up}, энэ нь: "Сайн уу, кластер угсарч байна" гэсэн үг.

Ихэнх тохиолдолд суурилуулалт consensus: 3 оновчтой, учир нь бид илүү олон зангилаа холбогдоно гэж найдаж байсан ч буцаан залгалт дамжих болно status: :rehashingstatus: :up шинээр нэмэгдсэн эсвэл устгасан аливаа зангилаа дээр.

Хөгжүүлэлтийн горимд эхлэх үед та зүгээр л тохируулах хэрэгтэй consensus: 1 и Хумсчин түүнийг хараад кластерын угсралтыг хүлээхийг баяртайгаар алгасах болно :nonode@nohostболон :node@hostболон :[email protected] - зангилаа хэрхэн тохируулагдсанаас хамаарна (:none | :shortnames | :longnames).

Түгээмэл хэрэглээний менежмент

Вакуумд байдаггүй тархсан програмууд нь ихэвчлэн тархсан хамаарлыг агуулдаг, тухайлбал mnesia. Бидэнд ижил дуудлагаас тэдний дахин тохиргоог хийхэд хялбар байдаг on_state_change/2. Жишээлбэл, энд хэрхэн дахин тохируулах талаар дэлгэрэнгүй тайлбарласан болно mnesia нисэх үед баримт бичиг Хумсчин.

Ашиглалтын гол давуу тал Хумсчин Энэ нь топологийн өөрчлөлтийн дараа кластерыг дахин бүтээхэд шаардлагатай бүх үйлдлүүдийг гүйцэтгэдэг хамар доор. Аппликейшн нь IP хаягууд болон зангилааны нэрийг урьдчилан мэдэж байгаа эсэх, эсвэл динамикаар хуваарилагдсан/өөрчлөгдсөн эсэхээс үл хамааран бүх зангилаа холбогдсон, аль хэдийн бэлтгэсэн тархсан орчинд ажилладаг. Энэ нь докерын тохиргооны тусгай тохиргоог огт шаарддаггүй бөгөөд програм хөгжүүлэгчийн үүднээс авч үзвэл тархсан орчинд ажиллах эсвэл дотоод орчинд ажиллах хоёрын хооронд ялгаа байхгүй. :nonode@nohost. Та энэ талаар дэлгэрэнгүй уншиж болно баримт бичиг.

Хэдийгээр өөрчлөн хэрэгжүүлснээр топологийн өөрчлөлтийг нарийн төвөгтэй зохицуулах боломжтой MyApp.Listener, эдгээр номын сангийн хязгаарлалтууд болон тохиргооны хэвийсэн байдал нь хэрэгжилтийн тулгын чулуу болж нотлогдох захын тохиолдол үргэлж байж болно. Зүгээр дээ, дээрхийг л ав libcluster, энэ нь илүү ерөнхий зориулалттай, эсвэл бүр доод түвшний кластерийг өөрөө зохицуулдаг. Энэхүү кодын номын сангийн зорилго нь боломжит бүх хувилбарыг хамрах биш, харин хамгийн түгээмэл хувилбарыг шаардлагагүй өвдөлт, хуулж буулгах үйлдлүүдгүйгээр ашиглах явдал юм.

Тайлбар: Энэ үед эх хувилбарт "Аз жаргалтай кластер!" гэсэн хэллэг байсан бөгөөд миний орчуулдаг Yandex (би өөрөө толь бичгүүдийг үзэх шаардлагагүй) надад "Аз жаргалтай кластер!" гэсэн сонголтыг санал болгосон. Ялангуяа өнөөгийн геополитикийн нөхцөл байдлаас харахад илүү сайн орчуулгыг төсөөлөхийн аргагүй юм.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх