рд▓рдЧрднрдЧ рд╣рд░ рд╕рдлрд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рджреЗрд░-рд╕рдмреЗрд░ рдПрдХ рдРрд╕реЗ рдЪрд░рдг рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рдмрд╕ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓реЛрдб рдФрд╕рдд рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдРрд╕реЗ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рднреА рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдиреЛрдбреНрд╕ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВ рдФрд░ рдХрд╛рд░реНрдпрднрд╛рд░ рдХреЛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВред
рдпрд╣ рдЗрддрдирд╛ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдирд┐рдХрд▓рд╛ Erlang, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЗрд╕рдХреЗ рд╕реБрдЦрдж рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдкреНрд░рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рд╣реИ, рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХрд╛ рд╣реИ
рд╡рд┐рднрд┐рдиреНрди рдиреЛрдбреНрд╕ рдкрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ, рд╕рд╛рде рд╣реА рд▓рд┐рдВрдХ рдФрд░ рдореЙрдирд┐рдЯрд░ рдХреЗ рдмреАрдЪ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ [тАж]
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рд╡рд┐рддрд░рд┐рдд Erlang рддрдм рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм "рдХрдВрдЯреЗрдирд░" рдХрд╛ рдорддрд▓рдм рд╢рд┐рдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рд▓реЛрд╣реЗ рдХрд╛ рдмрдХреНрд╕рд╛ рдерд╛, рдФрд░ "рдбреЙрдХрд░" рдмрд╕ рд▓реЙрдиреНрдЧрд╢реЛрд░рдореИрди рдХрд╛ рдкрд░реНрдпрд╛рдп рдерд╛ред рдореЗрдВ IP4 рдХрдИ рдЦрд╛рд▓реА рдкрддреЗ рдереЗ, рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд░реЗрдХ рдЖрдорддреМрд░ рдкрд░ рдЪреВрд╣реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреЗрдмрд▓ рдЪрдмрд╛рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рдерд╛, рдФрд░ рдЙрддреНрдкрд╛рджрди рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдФрд╕рдд рдЕрдкрдЯрд╛рдЗрдо рджрд╢рдХреЛрдВ рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рдерд╛ред
рдЕрдм рд╣рдо рд╕рднреА рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЖрддреНрдордирд┐рд░реНрднрд░ рд╣реИрдВ, рдкреИрдХреЗрдЬреНрдб рд╣реИрдВ рдФрд░ рд╡рд┐рддрд░рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ Erlang рдРрд╕реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЬрд╣рд╛рдВ рдЧрддрд┐рд╢реАрд▓ рдЖрдИрдкреА рдкрддреЗ рдорд╣рд╛рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдиреЛрдбреНрд╕ рд╢реЗрдбреНрдпреВрд▓рд░ рдХреА рдмрд╛рдИрдВ рдПрдбрд╝реА рдХреА рдЗрдЪреНрдЫрд╛ рдкрд░ рдкреНрд░рдХрдЯ рдФрд░ рдЧрд╛рдпрдм рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рддрд░рд┐рдд рдЪрд▓ рд░рд╣реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЗ рдвреЗрд░ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП 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
рдЙрдбрд╝рддреЗ-рдЙрдбрд╝рддреЗ
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн рдорда рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЯреЛрдкреЛрд▓реЙрдЬреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ. рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рд╡рд┐рддрд░рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдиреЛрдбреНрд╕ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╣рдо рдЖрдИрдкреА рдкрддреЗ рдФрд░ рдЗрд╕рд▓рд┐рдП рдиреЛрдб рдирд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реЛрдВ, рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЕрд╕рд╛рдЗрди/рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдбреЙрдХрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╡рд┐рддрд░рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рдиреЗ рдпрд╛ рд╕реНрдерд╛рдиреАрдп рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рдиреЗ рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред :nonode@nohost
. рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ
рдпрджреНрдпрдкрд┐ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреЛрдкреЛрд▓реЙрдЬреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЬрдЯрд┐рд▓ рдкреНрд░рдмрдВрдзрди рд╕рдВрднрд╡ рд╣реИ MyApp.Listener
, рд╣рдореЗрд╢рд╛ рдРрд╕реЗ рдХрд┐рдирд╛рд░реЗ рд╡рд╛рд▓реЗ рдорд╛рдорд▓реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реАрдорд╛рдПрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрдзрд╛рд░рд╢рд┐рд▓рд╛ рд╕рд╛рдмрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдареАрдХ рд╣реИ, рдмрд╕ рдКрдкрд░ рд╡рд╛рд▓рд╛ рд▓реЗ рд▓реЛ libcluster
, рдЬреЛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рд╣реИ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рд╕реНрд╡рдпрдВ рднреА рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд▓рдХреНрд╖реНрдп рд╣рд░ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рджрд░реНрдж рдФрд░ рдмреЛрдЭрд┐рд▓ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рдмрд┐рдирд╛ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред
рдиреЛрдЯ: рдореВрд▓ рдореЗрдВ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ "рд╣реИрдкреНрдкреА рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ!" рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдерд╛, рдФрд░ рдпрд╛рдВрдбреЗрдХреНрд╕, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реВрдВ (рдореБрдЭреЗ рд╕реНрд╡рдпрдВ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ), рдиреЗ рдореБрдЭреЗ "рд╣реИрдкреНрдкреА рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ!" рд╡рд┐рдХрд▓реНрдк рдХреА рдкреЗрд╢рдХрд╢ рдХреАред рдЗрд╕рд╕реЗ рдмреЗрд╣рддрд░ рдЕрдиреБрд╡рд╛рдж рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рд╢рд╛рдпрдж рдЕрд╕рдВрднрд╡ рд╣реИ, рдЦрд╛рд╕рдХрд░ рд╡рд░реНрддрдорд╛рди рднреВ-рд░рд╛рдЬрдиреАрддрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрд▓реЛрдХ рдореЗрдВред
рд╕реНрд░реЛрдд: www.habr.com