Cloister β†’ oddiy OTP klasterini boshqarish

Deyarli har bir muvaffaqiyatli biznes ilovasi ertami-kechmi gorizontal o'lchov talab qilinadigan bosqichga kiradi. Ko'p hollarda siz shunchaki yangi misolni boshlashingiz va o'rtacha yukni kamaytirishingiz mumkin. Ammo turli tugunlarning bir-biri haqida bilishini va ish yukini ehtiyotkorlik bilan taqsimlashini ta'minlashimiz kerak bo'lgan kamroq ahamiyatsiz holatlar ham mavjud.

Cloister β†’ oddiy OTP klasterini boshqarish

Bu juda omadli bo'lib chiqdi erlang, biz o'zining yoqimli sintaksisi va atrofidagi shov-shuv uchun tanlagan, birinchi darajaga ega taqsimlangan tizimlarni qo'llab-quvvatlash. Nazariy jihatdan, bu mutlaqo ahamiyatsiz ko'rinadi:

Turli tugunlardagi jarayonlar o'rtasida, shuningdek havolalar va monitorlar o'rtasida o'tadigan xabar shaffof [...]

Amalda, hamma narsa biroz murakkabroq. Tarqalgan erlang "konteyner" yuk tashish uchun katta temir qutini anglatganda ishlab chiqilgan va "doker" oddiygina dengiz qirg'oqchisining sinonimi edi. IN IP4 ko'plab bo'sh manzillar bor edi, tarmoqdagi uzilishlar odatda kalamushlar kabel orqali chaynash tufayli yuzaga kelgan va ishlab chiqarish tizimining o'rtacha ish vaqti o'nlab yillar davomida o'lchangan.

Endi biz hammamiz o'zimizni nihoyatda ta'minlaymiz, paketlanganmiz va taqsimlanamiz erlang dinamik IP-manzillar katta tasodifiylik printsipi asosida uzatiladigan muhitda va tugunlar rejalashtiruvchining chap tovonining xohishiga ko'ra paydo bo'lishi va yo'qolishi mumkin. Taqsimlangan har bir loyihada qoziq kodlarining to'planishiga yo'l qo'ymaslik uchun erlang, dushman muhitga qarshi kurashish uchun yordam kerak.

nota: Men borligini bilaman libcluster. Bu juda zo'r, uning mingdan ortiq yulduzlari bor, muallif jamiyatda mashhur va bularning barchasi. Agar klaster yaratish va unga xizmat ko'rsatish uchun ushbu paket tomonidan taqdim etilgan usullar siz uchun etarli bo'lsa, men siz uchun xursandman. Afsuski, menga ko'proq narsa kerak. Men sozlashni batafsil nazorat qilishni va klasterni qayta tashkil etish teatrida tashqi tomoshabin bo'lmaslikni xohlayman.

talablar

Menga shaxsan kerak bo'lgan narsa klasterni boshqarishni o'z zimmasiga oladigan va quyidagi xususiyatlarga ega bo'lgan kutubxona edi:

  • qattiq kodlangan tugunlar ro'yxati va xizmatlar orqali dinamik kashfiyot bilan shaffof ish erlang;
  • har bir topologiya o'zgarishi uchun to'liq funktsional qayta qo'ng'iroq qilish (u erda tugun, bu erda tugun, tarmoqning beqarorligi, bo'linishlar);
  • kabi uzun va qisqa nomlar bilan klasterni ishga tushirish uchun shaffof interfeys :nonode@nohost;
  • Infratuzilma kodini yozmasdan Docker qo'llab-quvvatlashi qutidan tashqarida.

Ikkinchisi, dasturni mahalliy sifatida sinab ko'rganimdan so'ng, degan ma'noni anglatadi :nonode@nohost, yoki sun'iy ravishda tarqatilgan muhitda foydalanish test_cluster_task, Men shunchaki yugurishni xohlayman docker-compose up --scale my_app=3 va hech qanday kodni o'zgartirmasdan dockerda uchta misolni qanday bajarishini ko'ring. Men shunga o'xshash qaram ilovalarni ham xohlayman mnesia - topologiya o'zgarganda, ular sahna ortida klasterni ilovadan qo'shimcha zarbalarsiz jonli ravishda qayta quradilar.

Monastir Klasterni qo'llab-quvvatlashdan tortib kofe tayyorlashgacha bo'lgan hamma narsaga qodir kutubxona bo'lish uchun mo'ljallanmagan. Bu barcha mumkin bo'lgan holatlarni qamrab olishni maqsad qilgan kumush o'q emas yoki nazariyotchilarning fikricha, akademik jihatdan to'liq yechim bo'lishi mumkin. CS ushbu atamaga kiriting. Ushbu kutubxona juda aniq maqsadga xizmat qilish uchun mo'ljallangan, lekin unchalik katta bo'lmagan ishini mukammal bajaring. Bu maqsad mahalliy rivojlanish muhiti va dushman konteynerlar bilan to'la taqsimlangan elastik muhit o'rtasida to'liq shaffoflikni ta'minlash bo'ladi.

Tanlangan yondashuv

Monastir Ilg'or foydalanuvchilar to'g'ridan-to'g'ri ishga tushirish orqali klasterni yig'ish va texnik xizmat ko'rsatish bilan qo'lda ishlashlari mumkin bo'lsa-da, dastur sifatida ishga tushirish uchun mo'ljallangan. Cloister.Manager maqsadli ilovaning supervayzer daraxtida.

Ilova sifatida ishga tushirilganda, kutubxona tayanadi config, undan quyidagi asosiy qiymatlarni o'qiydi:

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

Yuqoridagi parametrlar tom ma'noda quyidagilarni anglatadi: Monastir OTP ilovasi uchun ishlatiladi :my_app, foydalanadi erlang xizmati kashfiyoti tugunlarni ulash uchun, kamida uchta, va MyApp.Listener modul (amalga oshirish @behaviour Cloister.Listener) topologiya o'zgarishlari haqida bildirishnomalarni olish uchun tuzilgan. To'liq konfiguratsiyaning batafsil tavsifi bilan tanishishingiz mumkin hujjatlar.

Ushbu konfiguratsiya bilan dastur Monastir bo'ladi bosqichma-bosqich ishga tushirish, konsensusga erishilgunga qadar asosiy dasturni ishga tushirish jarayonini kechiktirish (yuqoridagi misolda bo'lgani kabi uchta tugun ulanadi va ulanadi.) Bu asosiy dasturga u ishga tushganda, klaster allaqachon mavjud deb taxmin qilish imkoniyatini beradi. Topologiya har doim o'zgarganda (ularning ko'pi bo'ladi, chunki tugunlar to'liq sinxron ishga tushmaydi), ishlov beruvchi chaqiriladi. MyApp.Listener.on_state_change/2. Ko'pincha biz holat xabarini olganimizda harakat qilamiz %Cloister.Monitor{status: :up}, bu: "Salom, klaster yig'ildi" degan ma'noni anglatadi.

Ko'pgina hollarda, o'rnatish consensus: 3 optimal hisoblanadi, chunki ko'proq tugunlar ulanishini kutsak ham, qayta qo'ng'iroq amalga oshiriladi status: :rehashing β†’ status: :up har qanday yangi qo'shilgan yoki olib tashlangan tugunlarda.

Rivojlanish rejimini ishga tushirganda, siz shunchaki sozlashingiz kerak consensus: 1 ΠΈ Monastir ko'rganida, klaster yig'ilishini kutishni xursandchilik bilan o'tkazib yuboradi :nonode@nohostyoki :node@hostyoki :[email protected] - tugun qanday tuzilganiga qarab (:none | :shortnames | :longnames).

Tarqalgan ilovalarni boshqarish

Vakuumda bo'lmagan taqsimlangan ilovalar odatda taqsimlangan bog'liqliklarni o'z ichiga oladi, masalan mnesia. Biz uchun bir xil qayta qo'ng'iroq orqali ularning qayta konfiguratsiyasini boshqarish oson on_state_change/2. Bu erda, masalan, qanday qilib qayta konfiguratsiya qilishning batafsil tavsifi mnesia parvozda hujjatlar Monastir.

Foydalanishning asosiy afzalligi Monastir topologiyani o'zgartirgandan so'ng klasterni qayta tiklash uchun barcha kerakli operatsiyalarni bajarishidir kaput ostida. Ilova oddiygina oldindan tayyorlab qo'yilgan taqsimlangan muhitda ishlaydi, barcha tugunlar ulangan, biz IP-manzillar va shuning uchun tugun nomlarini oldindan bilishimiz yoki ular dinamik ravishda tayinlangan/o'zgartirilganligidan qat'i nazar. Bu mutlaqo maxsus docker konfiguratsiya sozlamalarini talab qilmaydi va dastur ishlab chiqaruvchisi nuqtai nazaridan, taqsimlangan muhitda ishlash yoki mahalliy muhitda ishlash o'rtasida hech qanday farq yo'q. :nonode@nohost. Bu haqida ko'proq ma'lumotni o'qishingiz mumkin hujjatlar.

Garchi topologiya o'zgarishlarini murakkab ishlov berish maxsus dastur orqali mumkin bo'lsa-da MyApp.Listener, kutubxonaning ushbu cheklovlari va konfiguratsiyaning noto'g'riligi amalga oshirishning asosi bo'lib qoladigan holatlar har doim bo'lishi mumkin. Yaxshi, yuqoridagini oling libcluster, bu umumiy maqsadli yoki hatto past darajadagi klasterni o'zingiz boshqaring. Ushbu kodlar kutubxonasining maqsadi barcha mumkin bo'lgan stsenariyni qamrab olish emas, balki keraksiz og'riqlar va noqulay nusxa ko'chirish-joylashsiz eng keng tarqalgan stsenariydan foydalanishdir.

Eslatma: Bu vaqtda asl nusxada "Happy klastering!" iborasi bor edi va men tarjima qiladigan Yandex (men o'zim lug'atlarni ko'rib chiqishga majbur emasman) menga "Happy klastering!" variantini taklif qildi. Ayniqsa, hozirgi geosiyosiy vaziyat nuqtai nazaridan yaxshiroq tarjimani tasavvur qilishning iloji yo'q.

Manba: www.habr.com

a Izoh qo'shish