ืึผืืขื ืืขืืขืจ ืืฆืืื ืืขืฉืขืคื ืึทืคึผืืึทืงืืืฉืึทื ืืืืขืจ ืึธืืขืจ ืฉืคึผืขืืขืจ ืืืื ืืจืืื ืืื ืึท ืคืึทืกืข ืืื ืืึธืจืืืึธื ืืึทื ืกืงืืืืื ื ืืื ืคืืจืืื ืื. ืืื ืคืืืข ืงืึทืกืขืก, ืืืจ ืงืขื ืขื ืคืฉืื ืึธื ืืืืื ืึท ื ืืึทืข ืืืึทืฉืคึผืื ืืื ืจืขืืืฆืืจื ืื ืืึทืกืข ืืืจืืฉื ืืืืขื. ืึธืืขืจ ืขืก ืืขื ืขื ืืืื ืืืืื ืืงืขืจ ืืจืืืืืึทื ืงืึทืกืขืก ืืื ืืืจ ืืึทืจืคึฟื ืฆื ืขื ืฉืืจ ืึทื ืคืึทืจืฉืืืขื ืข ื ืึธืืื ืืืืกื ืืืขืื ืืขืืขืจ ืื ืืขืจืข ืืื ืงืขืจืคืึทืื ืคืึทืจืฉืคึผืจืืืื ืื ืืืขืจืงืืึธืื.
ืขืก ืืื ืืขืืืขื ืึทืืื ืืึทืืืืืง erlang, ืืืึธืก ืืืจ ืืืืกืืขืจืืืืืื ืคึฟืึทืจ ืืืึทื ืึธื ืืขื ืขื ืกืื ืืึทืงืก ืืื ืืืืคึผ ืึทืจืื ืืื, ืืื ืึท ืขืจืฉืืขืจ-ืงืืึทืก
ืึธื ืืึธื ืืืื ืคืืจืืื ืฆืืืืฉื ืคึผืจืึทืกืขืกืึทื ืืืืฃ ืคืึทืจืฉืืืขื ืข ื ืึธืืื, ืืื ืืขืืื ื ืืื ืฆืืืืฉื ืคึฟืึทืจืืื ืืื ืืขื ืืื ืืึธื ืืืึธืจืก, ืืื ืืจืึทื ืกืคึผืขืจืึทื ื [โฆ]
ืืื ืคืืจ, ืึทืืฅ ืืื ืึท ืืืกื ืืขืจ ืงืึธืืคึผืืืฆืืจื. ืคืื ืื ืืขืจืืขืืืืื erlang ืืื ืื ืืืืืงืื ืืขืืืืจื ืืืขื "ืงืื ืืื ืขืจ" ืืื ืืขืืืื ื ื ืืจืืืกืข ืืืืืขืจื ืข ืงืขืกืื ืคืืจ ืฉืืคืื ื, ืืื "ืืืงืืจ" ืืื ืคืฉืื ืืขืืืขื ื ืกืื ืื ืื ืคืืจ ืืื ืืฉืึธืจืืื. ืืื ืืคึผืงืกื ืืืงืก ืขืก ืืขื ืขื ืืขืืืขื ืคืืืข ืึทื ืึทืงืืึทืคึผืืื ืึทืืจืขืกืขืก, ื ืขืฅ ืืจืืืงืก ืืขื ืขื ืืืืฉืึทืืืึทืื ืืขืคึฟืืจื ืืืจื ืจืึทืฅ ืืฉืืื ื ืืืจื ืื ืงืึทืืืข, ืืื ืื ืืืจืืฉื ืืืืขื ืืคึผืืืืข ืคืื โโืื ืคึผืจืึธืืืงืฆืืข ืกืืกืืขื ืืื ืืขืืืกืื ืืื ืืขืงืึทืืขืก.
ืืืฆื ืืืจ ืืขื ืขื ืึทืืข ืื ืงืจืขืืึทืืื ืืื-ืืขื ืื, ืคึผืึทืงืืืืฉื ืืื ืคืืืกื ืืืง ืคืื ืื ืืขืจืืขืืืืื erlang ืืื ืึท ืกืืืืืืข ืืื ืืื ืึทืืืฉ IP ืึทืืจืขืกืขืก ืืขื ืขื ืืึทื ืืื ืืืืก ืืืืฃ ืืขื ืคึผืจืื ืฆืืคึผ ืคืื ืืจืืืก ืจืึทื ืืึทืื ืึทืก, ืืื ื ืึธืืื ืงืขื ืขื ืืขืจืฉืืึทื ืขื ืืื ืคืึทืจืฉืืืื ืื ืืื ืื ืงืึทืคึผืจืื ืคืื ืื ืืื ืงืก ืคึผืืึทืืข ืคืื โโืื ืกืงืขืืืฉืืืขืจ. ืฆื ืืืกืืืึทืื ืืขืจืืื ืคืื ืืืืืขืจืคึผืืึทืืข ืงืึธื ืืื ืืขืืขืจ ืคึผืจืืืขืงื ืคืืืกื ืืืง ืึท ืคืื ืื ืืขืจืืขืืืืื erlang, ืฆื ืงืึทืืืึทื ืื ืคืืึทื ืืืขื ืกืืืืืืข, ืืืืฃ ืืื ืคืืจืืื ืื.
ืืึธื: ืืื ืืื ืึทืืืขืจ ืึทื ืขืก ืืื libcluster
ืืืืขืจืคืขื ืืฉื
ืืืึธืก ืืื ืคึผืขืจืกื ืึทืื ืืืจืฃ ืืื ืืขืืืขื ืึท ืืืืืืึธืืขืง ืืืึธืก ืืืึธืื ื ืขืืขื ืื ืคืึทืจืืืึทืืืื ื ืคืื ืืขื ืงื ืืื ืืื ืืึธืื ืื ืคืืืืขื ืืข ืคึผืจืึธืคึผืขืจืืืขืก:
- ืืจืึทื ืกืคึผืขืจืึทื ื ืึทืจืืขื ืืื ืืืืืข ืึท ืฉืืืขืจ-ืงืึธืืขื ืจืฉืืื ืคืื ื ืึธืืื ืืื ืืื ืึทืืืฉ ืืคืืขืงืื ื ืืืจื ืืึทืืื ืื ืืก erlang;
- ืืึธืจ ืคืึทื ืืงืฉืึทื ืึทื ืงืึทืืืืึทืงืง ืคึฟืึทืจ ืืขืืขืจ ืืึธืคึผืึธืืึธืื ืขื ืืขืจืื ื (ื ืึธืืข ืืึธืจื, ื ืึธืืข ืืึธ, ื ืขืฅ ืื ืกืืึทืืืืืื, ืกืคึผืืืฅ);
- ืืจืึทื ืกืคึผืขืจืึทื ื ืฆืืืื ื ืคึฟืึทืจ ืืึธื ืืฉืื ื ืึท ืงื ืืื ืืื ืืึทื ื ืืื ืงืืจืฅ ื ืขืืขื, ืืื ืืื
:nonode@nohost
; - ืืึธืงืขืจ ืฉืืืฆื ืืืืก ืคืื ืื ืงืขืกืื, ืึธื ืฆื ืฉืจืืึทืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืงืึธื.
ืื ืืขื ืขืจ ืืืื ืึทื ื ืึธื ืืื ืืขืกืืขื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืึธืืงืึทืื ืืื :nonode@nohost
, ืึธืืขืจ ืืื ืึท ืึทืจืืึทืคืืฉืึทืื ืคืื ืื ืืขืจืืขืืืืื ืกืืืืืืข ื ืืฆื test_cluster_task
docker-compose up --scale my_app=3
ืืื ืืขื ืืื ืขืก ืขืงืกืึทืงืืืฅ ืืจืื ืื ืกืืึทื ืกืื ืืื ืืึธืงืขืจ ืึธื ืงืืื ืงืึธื ืขื ืืขืจืื ืืขื. ืืื ืืืื ืืืืื ืึธืคืขื ืืืง ืึทืคึผืืึทืงืืืฉืึทื ื ืืื 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
ืื ืคึผืึทืจืึทืืขืืขืจืก ืืืืื ืืืื ืขื ืืืฉ ืื ืคืืืืขื ืืข: ืงืืึธืืกืืขืจ ืืขื ืืฆื ืคึฟืึทืจ ืึธืืคึผ ืึทืคึผืืึทืงืืืฉืึทื :my_app
, ื ืืฆื ืขืจืืึทื ื ืืื ืกื ืืคืืขืงืื ื ืฆื ืคืึทืจืืื ืื ื ืึธืืื, ืืืึท ืืื ืืกืืขืจ ืืจืืึท, ืืื 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 ืึทืืจืขืกืขืก ืืื ืืขืจืืืขืจ ืื ื ืึธืืข ื ืขืืขื ืืื ืฉืืืึทืื, ืึธืืขืจ ืืื ืืขื ืขื ืืื ืึทืืืงืึทืืื ืึทืกืืื ื / ืืฉืืื ืืืฉื. ืืึธืก ืจืืงืืืืืขืจื ืืขืืึทืืจืข ืงืืื ืกืคึผืขืฆืืขืืข ืืึธืงืงืขืจ ืงืึทื ืคืืืืขืจืืืฉืึทื ืกืขืืืื ืืก ืืื ืคึฟืื ืึท ืึทืคึผืืึทืงืืืฉืึทื ืืขืืืขืืึธืคึผืขืจ ืก ืคืื ื ืคืื ืืืื ืื ื, ืขืก ืืื ืงืืื ืืืืืง ืฆืืืืฉื ืคืืืกื ืืืง ืืื ืึท ืคืื ืื ืืขืจืืขืืืืื ืกืืืืืืข ืึธืืขืจ ืคืืืกื ืืืง ืืื ืึท ืืืืข. :nonode@nohost
. ืืืจ ืงืขื ืขื ืืืืขื ืขื ืืขืจ ืืืขืื ืืขื ืืื
ืืึธืืฉ ืงืึธืืคึผืืขืงืก ืืึทื ืืืื ื ืคืื ืืึธืคึผืึธืืึธืื ืขื ืืขืจืื ืืขื ืืื ืืขืืืขื ืืืจื ืึท ืื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื MyApp.Listener
, ืขืก ืงืขื ืฉืืขื ืืืง ืืืื ืืจืขื ืงืึทืกืขืก ืืื ืื ืืืืืืึธืืขืง ืืืืืืืืฉืึทื ื ืืื ืงืึทื ืคืืืืขืจืืืฉืึทื ืืืืึทืกืื ืืึทืืืืึทืื ืฆื ืืืื ืื ืงืึธืจื ืขืจืกืืึธืื ื ืคืื ืืืคึผืืึทืืขื ืืืืฉืึทื. ืขืก ืืื ืืื, ื ืึธืจ ื ืขืืขื ืื ืืืืื libcluster
, ืืืึธืก ืืื ืืขืจ ืืขื ืขืจืึทื-ืฆืื, ืึธืืขืจ ืืคืืื ืฉืขืคึผื ืื ื ืืืขืจืืง-ืืืจืื ืงื ืืื ืืื. ืืขืจ ืฆืื ืคืื ืืขื ืงืึธื ืืืืืืึธืืขืง ืืื ื ืืฉื ืฆื ืืขืงื ืึทืืข ืืขืืืขื ืกืฆืขื ืึทืจ, ืึธืืขืจ ืฆื ื ืืฆื ืื ืืขืจืกื ืคึผืจืึธืกื ืกืฆืขื ืึทืจ ืึธื ืืื ืืืืืง ืืืืืืืง ืืื ืงืึทืืืขืจืกืึทื ืงืึธืคึผืืข-ืคึผืึทืกืืข.
ืืึทืืขืจืงืื ื: ืืื ืืขื ืคืื ื ืืื ืืขืจ ืึธืจืืืื ืขื ืขืก ืืื ืืขืืืขื ืื ืคืจืึทืืข "ืืื ืงืืึทืกืืขืจืื ื!", ืืื ืืึทื ืืขืงืก, ืืื ืืืึธืก ืืื ืืืืขืจืืขืฆื (ืืื ืืึธื ื ืื ืืึธืื ืฆื ืืืื ืืืจื ืืืงืฉืึทื ืขืจืื ืืื), ืืขืคึฟืื ื ืืืจ ืื ืึธืคึผืฆืืข "ืืื ืงืืึทืกืืขืจืื ื!" ืขืก ืืื ืืึธืืขืจ ืืืืืขืืืขื ืืื ืคึฟืึธืจืฆืืฉืืขืื ืึท ืืขืกืขืจืข ืืืืขืจืืขืฆืื ื, ืืคึฟืจื ืืื ืืืื ืคึฟืื ืืขืจ ืืืฆืืืงืขืจ ืืขืึธืคึผืึธืืืืืฉืขืจ ืกืืืืึทืฆืืข.
ืืงืืจ: www.habr.com