ืืืขื ืื ืืคืืืงืฆืื ืขืกืงืืช ืืฆืืืื ื ืื ืกืช ืืืืงืื ืื ืืืืืืจ ืืฉืื ืฉืื ื ืืจืฉืช ืงื ื ืืืื ืืืคืงื. ืืืงืจืื ืจืืื, ืืชื ืืืื ืคืฉืื ืืืชืืื ืืืคืข ืืืฉ ืืืืคืืืช ืืช ืืืืฆืข ืืขืืืก. ืืื ืืฉ ืื ืืงืจืื ืคืืืช ืืจืืืืืืืืื ืฉืืื ืื ืื ื ืฆืจืืืื ืืืืืื ืฉืฆืืชืื ืฉืื ืื ืืืขื ืื ืขื ืื ืืืืืง ืืืืืจืืช ืืช ืขืืืก ืืขืืืื.
ืื ืืฆื ืื ืื ืืจ ืืื ืฉ erlang, ืฉืืืจื ื ืืฉื ืืชืืืืจ ืื ืขืื ืืืืืืค ืกืืืื, ืืฉ ืื ืืืจืื ืจืืฉืื ื
ืืขืืจืช ืืืืขืืช ืืื ืชืืืืืื ืืฆืืชืื ืฉืื ืื, ืืื ืื ืืื ืงืืฉืืจืื ืืฆืืื, ืืื ืฉืงืืคื [โฆ]
ืืคืืขื, ืืื ืงืฆืช ืืืชืจ ืืกืืื. ืืืคืฅ erlang ืคืืชื ืืืฉืจ "ืืืื" ืคืืจืืฉื ืงืืคืกืช ืืจืื ืืืืื ืืืฉืืื, ื"ืืืงืจ" ืืื ืคืฉืื ืืืื ื ืจืืคืช ื-longshoreman. IN IP4 ืืื ืืจืื ืืชืืืืช ืื ืชืคืืกืืช, ืืคืกืงืืช ืจืฉืช ื ืืจืื ืืืจื ืืื ืขื ืืื ืขืืืจืืฉืื ืฉืืขืกื ืืจื ืืืื, ืืืื ืืคืขืืื ืืืืืฆืข ืฉื ืืขืจืืช ืืืืฆืืจ ื ืืื ืืขืฉืจืืช ืฉื ืื.
ืขืืฉืื ืืืื ื ืขืฆืืืืื ืืืคืืื, ืืจืืืื ืืคืืขืืื ืืืืืจืื erlang ืืกืืืื ืฉืื ืืชืืืืช IP ืืื ืืืืช ืืืืืงืืช ืขื ืคื ืขืงืจืื ืืืงืจืืืืช ืืืืืื, ืืฆืืชืื ืืืืืื ืืืืคืืข ืืืืืขืื ืืืืื ืฉื ืืขืงื ืืฉืืืื ืฉื ืืืชืืื. ืืื ืืื ืืข ืขืจืืืืช ืฉื ืงืื ืืื ืืื ืคืจืืืงื ืฉืืจืืฅ ืงืืืฅ ืืืืืจ erlang, ืืื ืืืืืื ืืกืืืื ืืขืืื ืช, ื ืืจืฉืช ืขืืจื.
ืฉืื ืื: ืื ื ืืืืข ืืื ืฉืืฉ libcluster
ืืจืืฉืืช
ืื ืฉืืืืชื ืฆืจืื ืืืืคื ืืืฉื ืื ืกืคืจืืื ืฉืชืฉืชืื ืขื ืื ืืืื ืฉื ืืืฉืืื ืืชืืื ืื ืืช ืืืืคืืื ืื ืืืืื:
- ืขืืืื ืฉืงืืคื ืขื ืจืฉืืื ืืงืืืืช ืฉื ืฆืืชืื ืืืืืื ืืื ืื ืืืืฆืขืืช ืฉืืจืืชืื erlang;
- ืืชืงืฉืจืืช ืืืืจืช ืคืื ืงืฆืืื ืืืช ืืืื ืขืืืจ ืื ืฉืื ืื ืืืืคืืืืืื (ืฆืืืช ืฉื, ืฆืืืช ืืื, ืืืกืจ ืืฆืืืืช ืืจืฉืช, ืคืืฆืืืื);
- ืืืฉืง ืฉืงืืฃ ืืืคืขืืช ืืฉืืื ืขื ืฉืืืช ืืจืืืื ืืงืฆืจืื, ืืื ืขื
:nonode@nohost
; - ืชืืืืช Docker ืืืืฅ ืืงืืคืกื, ืืื ืฆืืจื ืืืชืืืช ืงืื ืชืฉืชืืช.
ืื ืืืืจืื ืืืืจ ืฉืืืืจ ืฉืืืงืชื ืืช ืืืคืืืงืฆืื ืืืืคื ืืงืืื ื :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: :rehashing
โ status: :up
ืขื ืื ืฆืืืช ืฉื ืืกืฃ ืื ืืืกืจ ืืืืจืื ื.
ืืฉืืชื ืืชืืื ืืืฆื ืคืืชืื, ืืชื ืจืง ืฆืจืื ืืืืืืจ consensus: 1
ะธ ืงืืืกืืจ ืืืื ืืฉืืื ืขื ืืืืชื ื ืืืจืืืช ืืืฉืืื ืืฉืืื ืืจืื :nonode@nohost
ืื :node@host
ืื :[email protected]
- ืชืืื ืืื ืืฆืืืช ืืืืืจ (:none | :shortnames | :longnames
).
ื ืืืื ืืคืืืงืฆืืืช ืืืืืจืืช
ืืืฉืืืื ืืืืืจืื ืฉืืื ื ืืืืืงืื ืืืืืื ืืืจื ืืื ืชืืืช ืืืืืจืช, ืืืื mnesia
. ืงื ืื ื ืืืคื ืืืืืจื ืืืืฉ ืฉืืื ืืืืชื ืืชืงืฉืจืืช ืืืืจืช on_state_change/2
. ืื ื, ืืืฉื, ืชืืืืจ ืืคืืจื ืืืฆื ืืืืืืจ ืืืืฉ mnesia
ืชืื ืืื ืชื ืืขื
ืืืชืจืื ืืขืืงืจื ืืฉืืืืฉ ืงืืืกืืจ ืืื ืฉืืื ืืืฆืข ืืช ืื ืืคืขืืืืช ืืืจืืฉืืช ืืื ืืื ืืช ืืืืฉ ืืช ืืืฉืืื ืืืืจ ืฉืื ืื ืืืคืืืืืื ืืชืืช ืืืืกืช ืืื ืืข. ืืืคืืืงืฆืื ืคืฉืื ืคืืขืืช ืืกืืืื ืืืืืจืช ืืืื ื ืืืจ, ืืืฉืจ ืื ืืฆืืชืื ืืืืืจืื, ืืื ืงืฉืจ ืื ืื ื ืืืืขืื ืืช ืืชืืืืช ื-IP ืืืื ืืช ืฉืืืช ืืฆืืชืื ืืจืืฉ, ืื ืฉืื ืืืงืฆื/ืฉืื ื ืืืืคื ืืื ืื. ืื ืื ืืฆืจืื ืืืืจืืช ืืืืืืืช ืฉื ืชืฆืืจืช Docker ืืื ืงืืืช ืืืื ืฉื ืืคืชื ืืืฉืืืื, ืืื ืืืื ืืื ืจืืฆื ืืกืืืื ืืืืืจืช ืื ืจืืฆื ืืกืืืื ืืงืืืืช. :nonode@nohost
. ืืชื ืืืื ืืงืจืื ืขืื ืขื ืื ื
ืืืจืืช ืฉืืืคืื ืืืจืื ืืฉืื ืืืื ืืืืคืืืืืื ืืคืฉืจื ืืืืฆืขืืช ืืืฉืื ืืืชืื ืืืฉืืช MyApp.Listener
, ืชืืื ืืืชืื ื ืืงืจื ืงืฆื ืฉืืื ืืืืืืช ืืกืคืจืืื ืืืืืืช ืืชืฆืืจื ืืืื ืืชืืืืช ืืืื ื ืืืกืื ืฉื ืืืืฉืื. ืื ืืกืืจ, ืคืฉืื ืงื ืืช ืืืืืจ ืืขืื libcluster
, ืฉืืื ืืืชืจ ืืืืจืืช ืืืืืืช, ืื ืืคืืื ืืืคื ืืืฉืืื ืืจืื ื ืืืื ืืขืฆืื. ืืืืจื ืฉื ืกืคืจืืืช ืงืื ืื ืืื ืื ืืืกืืช ืื ืชืจืืืฉ ืืคืฉืจื, ืืื ืืืฉืชืืฉ ืืชืจืืืฉ ืื ืคืืฅ ืืืืชืจ ืืื ืืื ืืืืชืจ ืืืขืชืง-ืืืืง ืืกืืจืื.
ืืขืจื: ืืฉืื ืื ืืืงืืจ ืืื ืืืฉืคื "ืืฉืืื ืฉืื!", ืืืื ืืงืก, ืฉืืืชื ืื ื ืืชืจืื (ืื ื ืื ืฆืจืื ืืขืืืจ ืขื ืืืืื ืื ืืขืฆืื), ืืฆืืขื ืื ืืช ืืืคืฉืจืืช "ืืฉืืื ืฉืื!" ืืืื ืื ืืคืฉืจ ืืืืืื ืชืจืืื ืืื ืืืชืจ, ืืืืืื ืืืืจ ืืืฆื ืืืืืืคืืืืื ืื ืืืื.
ืืงืืจ: www.habr.com