Aneane e komo koke nā palapala ʻoihana kūleʻa i kahi manawa e koi ʻia ai ka hoʻonui ʻana. I nā manawa he nui, hiki iā ʻoe ke hoʻomaka i kahi manawa hou a hoʻemi i ka awelika ukana. Akā aia kekahi mau hihia liʻiliʻi e pono ai mākou e hōʻoia i ka ʻike ʻana o nā node ʻē aʻe e pili ana i kekahi a e puʻunaue pono i ka hana.
Laki loa ia erlang, a mākou i koho ai no kāna syntax ʻoluʻolu a me ka hype a puni ia, he papa mua
ʻO ka hele ʻana o ka memo ma waena o nā kaʻina hana ma nā node like ʻole, a ma waena o nā loulou a me nā mākaʻikaʻi, maopopo […]
Ma ka hoʻomaʻamaʻa, ʻoi aku ka paʻakikī o nā mea a pau. Hoʻolaha ʻia erlang Ua hoʻomohala ʻia ka "container" i ka pahu hao nui no ka hoʻouna ʻana, a ʻo ka "docker" kahi huaʻōlelo like no ka longshoreman. IN IP4 he nui nā ʻōlelo i noho ʻole ʻia, ʻo ka hoʻomaha ʻana o ka pūnaewele ma muli o ka ʻai ʻana o nā ʻiole i ke kaula, a ua ana ʻia ka awelika o ka manawa hana o ka ʻōnaehana hana i nā makahiki.
I kēia manawa ua lawa mākou a pau iā mākou iho, hoʻopaʻa ʻia, a hāʻawi ʻia erlang i loko o kahi kaiapuni kahi e hāʻawi ʻia ai nā helu IP koʻikoʻi ma ke kumu o ka randomness nui, a hiki ke ʻike ʻia nā nodes a nalowale i ka makemake o ka kuʻekuʻe hema o ka mea hoʻonohonoho. No ka pale ʻana i nā puʻu o ka boilerplate code i kēlā me kēia pāhana e holo ana i kahi māhele erlang, no ka hakakā ʻana i ka ʻāina ʻino, pono ke kōkua.
i hoʻopuka: Ua ike au aia libcluster
koi
ʻO kaʻu mea i makemake ai he hale waihona puke nāna e hoʻomalu i ka pūʻulu a loaʻa iā ia nā waiwai penei:
- hana akaka me ka papa inoa paʻakikī o nā nodes a me ka ʻike ikaika ma o nā lawelawe erlang;
- ka hoʻihoʻi ʻana i ka hana piha no kēlā me kēia hoʻololi topology (node ma laila, node ma aneʻi, paʻa ʻole o ka pūnaewele, ʻokiʻoki);
- kaʻana like no ka wehe ʻana i kahi pūʻulu me nā inoa lōʻihi a pōkole, e like me
:nonode@nohost
; - Kākoʻo ʻo Docker ma waho o ka pahu, me ka ʻole e kākau i ka code infrastructure.
ʻO ka mea hope ma hope o koʻu hoʻāʻo ʻana i ka noi ma ka wahi :nonode@nohost
, a i ʻole ma kahi kaiapuni i hoʻolaha ʻia me ka hoʻohana ʻana test_cluster_task
docker-compose up --scale my_app=3
a ʻike pehea e hoʻokō ai i ʻekolu mau manawa ma docker me ka ʻole o nā loli code. Makemake au i nā noi hilinaʻi like mnesia
- i ka wā e loli ai ka topology, ma hope o nā hiʻohiʻona e kūkulu hou lākou i ka pūʻulu e ola me ka ʻole o nā kī hou mai ka noi.
Hui ʻAʻole i manaʻo ʻia e lilo i hale waihona puke e hiki ai i nā mea āpau mai ke kākoʻo ʻana i kahi hui a hiki i ka hana kope. ʻAʻole ia he pōkā kālā e manaʻo ana e uhi i nā hihia āpau, a i ʻole he hopena hoʻonaʻauao piha i ka manaʻo o nā theorists mai CS hookomo i keia huaolelo. Hoʻolālā ʻia kēia waihona e lawelawe i kahi kumu maopopo loa, akā e hana pono i kāna hana ʻaʻole nui loa. ʻO kēia pahuhopu ka hāʻawi ʻana i ka ʻike piha ma waena o ke kaiapuni hoʻomohala kūloko a me kahi kaiapuni elastic i hāʻawi ʻia i piha i nā ipu ʻenemi.
ʻO ke ala koho
Hui manaʻo ʻia e holo ʻia ma ke ʻano he noi, ʻoiai hiki i nā mea hoʻohana kiʻekiʻe ke hana me ka hui ʻana a me ka mālama ʻana i ka pūʻulu me ka lima ma ka holo pololei ʻana Cloister.Manager
i loko o ka lāʻau luna o ka noi.
Ke holo ʻia ma ke ʻano he noi, hilinaʻi ka waihona config
, mai laila e heluhelu ai i nā waiwai kumu:
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
ʻO nā ʻāpana ma luna ke ʻano maoli kēia: Hui hoʻohana ʻia no ka noi OTP :my_app
, hoʻohana ʻike lawelawe erlang e hoʻohui i nā node, ʻekolu paha, a MyApp.Listener
module (hoʻokō @behaviour Cloister.Listener
Me kēia hoʻonohonoho, ka noi Hui e e MyApp.Listener.on_state_change/2
%Cloister.Monitor{status: :up}
, ʻo ia hoʻi: “Aloha, ua ʻākoakoa ka hui.”
I ka hapanui o nā hihia, hoʻokomo consensus: 3
ʻoi aku ka maikaʻi no ka mea inā mākou e manaʻo e hoʻopili hou aku nā nodes, e hele ka callback status: :rehashing
→ status: :up
ma kekahi node hou i hoʻohui ʻia a wehe ʻia paha.
Ke hoʻomaka i ke ʻano hoʻomohala, pono ʻoe e hoʻonohonoho consensus: 1
и Hui hauʻoli ʻo ia i ke kali ʻana no ka hui puʻupuʻu ke ʻike ʻo ia :nonode@nohost
ole :node@host
ole :[email protected]
- ma muli o ke ʻano i hoʻonohonoho ʻia ai ka node (:none | :shortnames | :longnames
).
Hoʻoponopono Noi Hoʻolaha
ʻO nā noi i hāʻawi ʻia ʻaʻole i loko o kahi ʻūhā maʻamau e loaʻa nā hilinaʻi puʻupuʻu, e like me mnesia
. He mea maʻalahi iā mākou ke mālama i kā lākou hoʻonohonoho hou ʻana mai ka callback like on_state_change/2
. Eia, no ka laʻana, he wehewehe kikoʻī o ka hoʻonohonoho hou ʻana mnesia
ma ka lele i loko
ʻO ka pono nui o ka hoʻohana Hui ʻo ia ka hana i nā hana e pono ai e kūkulu hou i ka hui ma hope o kahi loli topology ma lalo o ka pāpale. Ke holo wale nei ka palapala noi ma kahi kaiapuni i hoʻomākaukau mua ʻia, me nā nodes a pau e pili ana, me ka ʻike ʻole i ka helu IP a no laila nā inoa node ma mua, a i ʻole ua hoʻololi ʻia lākou. ʻAʻole pono kēia i nā hoʻonohonoho hoʻonohonoho docker kūikawā a mai ka manaʻo o ka mea hoʻomohala noi, ʻaʻohe ʻokoʻa ma waena o ka holo ʻana i kahi kaiapuni a i ʻole ka holo ʻana i kahi kūloko. :nonode@nohost
. Hiki iā ʻoe ke heluhelu hou aʻe e pili ana i kēia ma
ʻOiai hiki ke hoʻololi i ka topology ma o ka hoʻokō maʻamau MyApp.Listener
, aia paha nā hihia lihi i hōʻike ʻia kēia mau palena waihona a me nā hoʻonohonoho hoʻonohonoho i nā pōhaku kihi o ka hoʻokō. Ua maikaʻi, e lawe wale i ka mea i luna libcluster
, ʻoi aku ka manaʻo maʻamau, a i ʻole e hoʻopaʻa i ka puʻupuʻu haʻahaʻa haʻahaʻa iā ʻoe iho. ʻO ka pahuhopu o kēia waihona code ʻaʻole ia e uhi i kēlā me kēia hiʻohiʻona hiki, akā e hoʻohana i ke ʻano maʻamau me ka ʻole o ka ʻeha a me ka paʻakikī paʻakikī.
'Ōlelo Aʻo: I kēia manawa i loko o ka mea kumu, aia ka huaʻōlelo "Happy clustering!", a ʻo Yandex, kahi aʻu e unuhi ai (ʻaʻole pono iaʻu e hele i nā puke weheweheʻōlelo), hāʻawi mai iaʻu i ke koho "Happy clustering!" ʻAʻole hiki ke noʻonoʻo i kahi unuhi ʻoi aku ka maikaʻi, ʻoi aku ka maikaʻi o ke kūlana geopolitical o kēia manawa.
Source: www.habr.com