Cloister → iṣakoso iṣupọ OTP ti o rọrun

Fere gbogbo ohun elo iṣowo aṣeyọri laipẹ tabi ya wọ ipele kan nibiti o nilo iwọn petele. Ni ọpọlọpọ igba, o le jiroro bẹrẹ apẹẹrẹ tuntun kan ati dinku apapọ fifuye. Ṣugbọn awọn ọran ti ko ṣe pataki tun wa nibiti a nilo lati rii daju pe awọn apa oriṣiriṣi mọ nipa ara wọn ati pinpin kaakiri iṣẹ ṣiṣe.

Cloister → iṣakoso iṣupọ OTP ti o rọrun

O wa ni jade ki orire wipe aṣiṣe, eyi ti a yàn fun awọn oniwe-didùn sintasi ati aruwo ni ayika, ni o ni a akọkọ-kilasi support fun pin awọn ọna šiše. Ni imọran, eyi dun patapata:

Ifiranṣẹ ti nkọja laarin awọn ilana lori awọn apa oriṣiriṣi, ati laarin awọn ọna asopọ ati awọn diigi, jẹ gbangba […]

Ni iṣe, ohun gbogbo jẹ diẹ idiju. Pinpin aṣiṣe ni idagbasoke nigba ti "eiyan" tumo si kan ti o tobi irin apoti fun sowo, ati "docker" je nìkan a synonym fun longshoreman. IN IP4 ọpọlọpọ awọn adirẹsi ti a ko lo, awọn ijade nẹtiwọọki nigbagbogbo ni o fa nipasẹ awọn eku jijẹ nipasẹ awọn kebulu, ati pe apapọ akoko akoko ti eto iṣelọpọ jẹ iwọn ni awọn ewadun.

Bayi gbogbo wa ni iyalẹnu ti ara ẹni to, ti kojọpọ, ati ṣiṣiṣẹ kaakiri aṣiṣe ni agbegbe nibiti awọn adirẹsi IP ti o ni agbara ti wa ni fifun lori ipilẹ ti aileto nla, ati awọn apa le han ati farasin ni ifẹ ti igigirisẹ osi ti oluṣeto. Lati yago fun piles ti boilerplate koodu ni gbogbo ise agbese nṣiṣẹ a pin aṣiṣe, lati dojuko ayika ọta, iranlọwọ nilo.

Daakọ: Mo mọ pe o wa libcluster. O dara gaan, o ni diẹ sii ju ẹgbẹrun awọn irawọ, onkọwe jẹ olokiki ni agbegbe, ati gbogbo iyẹn. Ti awọn ọna ti a funni nipasẹ package yii fun ṣiṣẹda ati mimu iṣupọ kan ba to fun ọ, Mo dun fun ọ. Laanu, Mo nilo pupọ diẹ sii. Mo fẹ lati ṣakoso iṣeto ni awọn alaye ati kii ṣe oluwoye ita ni itage ti atunto iṣupọ.

awọn ibeere

Ohun ti Emi funrarami nilo ni ile-ikawe kan ti yoo gba iṣakoso ti iṣupọ ati pe yoo ni awọn ohun-ini wọnyi:

  • iṣẹ ṣiṣafihan pẹlu mejeeji atokọ koodu-lile ti awọn apa ati iṣawari ti o ni agbara nipasẹ awọn iṣẹ aṣiṣe;
  • Ipe ipe iṣẹ ni kikun fun gbogbo iyipada topology (ipade nibẹ, ipade nibi, aisedeede nẹtiwọọki, awọn pipin);
  • wiwo sihin fun ifilọlẹ iṣupọ kan pẹlu awọn orukọ gigun ati kukuru, bi pẹlu :nonode@nohost;
  • Docker ṣe atilẹyin jade kuro ninu apoti, laisi nini lati kọ koodu amayederun.

Ikẹhin tumọ si pe lẹhin ti Mo ṣe idanwo ohun elo ni agbegbe ni :nonode@nohost, tabi ni agbegbe ti a ti pin pẹlu atọwọdọwọ nipa lilo test_cluster_task, Mo kan fẹ lati ṣiṣe docker-compose up --scale my_app=3 ati ki o wo bi o ṣe n ṣe awọn iṣẹlẹ mẹta ni docker laisi awọn iyipada koodu eyikeyi. Mo tun fẹ awọn ohun elo ti o gbẹkẹle bi mnesia - nigbati topology yipada, lẹhin awọn iṣẹlẹ wọn tun ṣe iṣupọ laaye laisi tapa eyikeyi lati inu ohun elo naa.

Aṣọ ko pinnu lati jẹ ile-ikawe ti o lagbara fun ohun gbogbo lati atilẹyin iṣupọ kan si ṣiṣe kofi. Kii ṣe ọta ibọn fadaka ti o ni ero lati bo gbogbo awọn ọran ti o ṣeeṣe, tabi jẹ ojutu pipe ti ẹkọ ni ori ti awọn onimọran lati CS fi sinu oro yi. Ile-ikawe yii jẹ apẹrẹ lati ṣe iṣẹ idi ti o han gedegbe, ṣugbọn ṣe iṣẹ ti ko tobi ju ni pipe. Ibi-afẹde yii yoo jẹ lati pese akoyawo pipe laarin agbegbe idagbasoke agbegbe ati agbegbe rirọ ti o pin ti o kun fun awọn apoti ọta.

Ọna ti a yan

Aṣọ ti pinnu lati ṣiṣẹ bi ohun elo, botilẹjẹpe awọn olumulo to ti ni ilọsiwaju le ṣiṣẹ pẹlu apejọ ati itọju iṣupọ pẹlu ọwọ nipasẹ ṣiṣe taara Cloister.Manager ninu igi alabojuto ohun elo afojusun.

Nigbati o ba ṣiṣẹ bi ohun elo, ile-ikawe gbarale config, lati inu eyiti o ti ka awọn iye ipilẹ wọnyi:

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

Awọn paramita ti o wa loke tumọ si gangan ni atẹle: Aṣọ ti a lo fun ohun elo OTP :my_app, awọn lilo Awari iṣẹ erlang lati so apa, o kere mẹta, ati MyApp.Listener module (imuse @behaviour Cloister.Listener) ti tunto lati gba awọn iwifunni nipa awọn iyipada topology. A alaye apejuwe ti awọn pipe iṣeto ni le ri ni iwe.

Pẹlu iṣeto yii, ohun elo naa Aṣọ yoo jẹ ifilọlẹ ni awọn ipele, idaduro ilana ti bẹrẹ ohun elo akọkọ titi ti iṣọkan yoo fi de (awọn ọna mẹta ti wa ni asopọ ati ti a ti sopọ, gẹgẹbi ninu apẹẹrẹ loke.) Eyi yoo fun ohun elo akọkọ ni anfani lati ro pe nigbati o bẹrẹ, iṣupọ ti wa tẹlẹ. Nigbakugba ti topology yipada (ọpọlọpọ ninu wọn yoo wa, nitori awọn apa ko bẹrẹ patapata ni iṣọkan), oluṣakoso yoo pe. MyApp.Listener.on_state_change/2. Pupọ julọ igba a ṣe iṣe nigba ti a ba gba ifiranṣẹ ipo kan %Cloister.Monitor{status: :up}, tí ó túmọ̀ sí: “Kaabo, a ti kó ìdìpọ̀ náà jọpọ̀.”

Ni ọpọlọpọ igba, fifi sori ẹrọ consensus: 3 jẹ aipe nitori paapaa ti a ba nireti awọn apa diẹ sii lati sopọ, ipe pada yoo kọja status: :rehashingstatus: :up lori eyikeyi titun kun tabi kuro ipade.

Nigbati o ba bẹrẹ ni ipo idagbasoke, o kan nilo lati ṣeto consensus: 1 и Aṣọ yoo fi ayọ foo idaduro fun apejọ iṣupọ nigbati o ba rii :nonode@nohosttabi :node@hosttabi :[email protected] - da lori bii a ṣe tunto ipade naa (:none | :shortnames | :longnames).

Pinpin elo Management

Awọn ohun elo ti a pin kii ṣe ni igbale nigbagbogbo pẹlu awọn igbẹkẹle pinpin, gẹgẹbi mnesia. O rorun fun a mu wọn atunto lati kanna callback on_state_change/2. Nibi, fun apẹẹrẹ, jẹ apejuwe alaye bi o ṣe le tunto mnesia lori fo ni iwe Aṣọ.

Awọn anfani akọkọ ti lilo Aṣọ ni pe o ṣe gbogbo awọn iṣẹ pataki lati tun iṣupọ naa ṣe lẹhin iyipada topology kan labẹ awọn Hood. Ohun elo naa n ṣiṣẹ ni agbegbe ti a ti pese tẹlẹ, pẹlu gbogbo awọn apa ti a ti sopọ, laibikita boya a mọ awọn adirẹsi IP ati nitori naa awọn orukọ ipade ni ilosiwaju, tabi wọn ti pin ni agbara / yipada. Eyi nilo Egba ko si awọn eto atunto docker pataki ati lati oju wiwo olupilẹṣẹ ohun elo, ko si iyatọ laarin ṣiṣiṣẹ ni agbegbe pinpin tabi ṣiṣiṣẹ ni agbegbe kan. :nonode@nohost. O le ka diẹ sii nipa eyi ni iwe.

Botilẹjẹpe mimu mimu eka ti awọn iyipada topology ṣee ṣe nipasẹ imuse aṣa MyApp.Listener, awọn ọran eti le nigbagbogbo wa nibiti awọn idiwọn ile-ikawe wọnyi ati awọn aiṣedeede atunto jẹri lati jẹ awọn igun igun ti imuse. O dara, kan gba awọn loke libcluster, eyiti o jẹ idi gbogbogbo diẹ sii, tabi paapaa mu iṣupọ ipele kekere funrararẹ. Ibi-afẹde ti ile-ikawe koodu yii kii ṣe lati bo gbogbo oju iṣẹlẹ ti o ṣeeṣe, ṣugbọn lati lo oju iṣẹlẹ ti o wọpọ julọ laisi irora ti ko wulo ati daakọ-lẹẹmọ.

akiyesi: ni aaye yii ninu atilẹba ti o wa ni gbolohun ọrọ “Iṣupọ Ayọ!”, ati Yandex, pẹlu eyiti MO tumọ (Emi ko ni lati lọ nipasẹ awọn iwe-itumọ funrarami), fun mi ni aṣayan “Ṣijọpọ Ayọ!” Boya ko ṣee ṣe lati fojuinu itumọ ti o dara julọ, paapaa ni ina ti ipo geopolitical lọwọlọwọ.

orisun: www.habr.com

Fi ọrọìwòye kun