рдХреНрд▓реЛрд╕реНрдЯрд░ тЖТ рд╕рд░рд▓ рдУрдЯреАрдкреА рдХреНрд▓рд╕реНрдЯрд░ рдкреНрд░рдмрдВрдзрди

рд▓рдЧрднрдЧ рд╣рд░ рд╕рдлрд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рджреЗрд░-рд╕рдмреЗрд░ рдПрдХ рдРрд╕реЗ рдЪрд░рдг рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рдмрд╕ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓реЛрдб рдФрд╕рдд рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдРрд╕реЗ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рднреА рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдиреЛрдбреНрд╕ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВ рдФрд░ рдХрд╛рд░реНрдпрднрд╛рд░ рдХреЛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВред

рдХреНрд▓реЛрд╕реНрдЯрд░ тЖТ рд╕рд░рд▓ рдУрдЯреАрдкреА рдХреНрд▓рд╕реНрдЯрд░ рдкреНрд░рдмрдВрдзрди

рдпрд╣ рдЗрддрдирд╛ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдирд┐рдХрд▓рд╛ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ