Cloister тЖТ рд╕рд░рд▓ OTP рдХреНрд▓рд╕реНрдЯрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди

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

Cloister тЖТ рд╕рд░рд▓ OTP рдХреНрд▓рд╕реНрдЯрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди

рдпреЛ рдзреЗрд░реИ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдмрд╛рд╣рд┐рд░ рднрдпреЛ рдПрд░рд▓рд╛lang, рдЬреБрди рд╣рд╛рдореАрд▓реЗ рдпрд╕рдХреЛ рд╕реБрдЦрдж рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ рд░ рдпрд╕рдХреЛ рд╡рд░рд┐рдкрд░рд┐ рд╣рд╛рдЗрдкрдХреЛ рд▓рд╛рдЧрд┐ рд░реЛрдЬреНрдпреМрдВ, рдкрд╣рд┐рд▓реЛ-рдХрдХреНрд╖рд╛ рдЫ рд╡рд┐рддрд░рдг рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердиред рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛, рдпреЛ рдкреВрд░реНрдгрддрдпрд╛ рддреБрдЪреНрдЫ рд╕реБрдирд┐рдиреНрдЫ:

рд╡рд┐рднрд┐рдиреНрди рдиреЛрдбрд╣рд░реВрдорд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ, рд╕рд╛рдереИ рд▓рд┐рдЩреНрдХрд╣рд░реВ рд░ рдореЛрдирд┐рдЯрд░рд╣рд░реВ рдмреАрдЪрдХреЛ рд╕рдиреНрджреЗрд╢ рдкрд╛рд░рджрд░реНрд╢реА рдЫ [тАж]

рд╡реНрдпрд╡рд╣рд╛рд░рдорд╛, рд╕рдмреИ рдХреБрд░рд╛ рдЕрд▓рд┐ рдмрдвреА рдЬрдЯрд┐рд▓ рдЫред рд╡рд┐рддрд░рдг рдЧрд░рд┐рдпреЛ рдПрд░рд▓рд╛lang рдЬрдм "рдХрдиреНрдЯреЗрдирд░" рдХреЛ рдЕрд░реНрде рдвреБрд╡рд╛рдиреАрдХреЛ рд▓рд╛рдЧрд┐ рдареВрд▓реЛ рдлрд▓рд╛рдордХреЛ рдмрдХреНрд╕ рд╣реЛ, рд░ "рдбрдХрд░" рдХреЗрд╡рд▓ рд▓рд╛рдореЛ рд╢реЛрд░рдореНрдпрд╛рдирдХреЛ рдкрд░реНрдпрд╛рдпрд╡рд╛рдЪреА рд╢рдмреНрдж рдерд┐рдпреЛред IN IP4 рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдареЗрдЧрд╛рдирд╛рд╣рд░реВ рдерд┐рдП, рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд░реЗрдХрд╣рд░реВ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдХреЗрдмрд▓ рдЪрдкрд╛рдЙрдиреЗ рдореБрд╕рд╛рдХреЛ рдХрд╛рд░рдгрд▓реЗ рднрдПрдХреЛ рдерд┐рдпреЛ, рд░ рдЙрддреНрдкрд╛рджрди рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдФрд╕рдд рдЕрдкрдЯрд╛рдЗрдо рджрд╢рдХрд╣рд░реВрдорд╛ рдорд╛рдкрди рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред

рдЕрдм рд╣рд╛рдореА рд╕рдмреИ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдкрдорд╛ рдЖрддреНрдордирд┐рд░реНрднрд░, рдкреНрдпрд╛рдХреЗрдЬ рдЧрд░рд┐рдПрдХреЛ, рд░ рд╡рд┐рддрд░рд┐рдд рд╡рд┐рддрд░рд┐рдд рдЫреМрдВ рдПрд░рд▓рд╛lang рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдЬрд╣рд╛рдБ рдЧрддрд┐рд╢реАрд▓ IP рдареЗрдЧрд╛рдирд╛рд╣рд░реВ рдЙрддреНрдХреГрд╖реНрдЯ рдЕрдирд┐рдпрдорд┐рддрддрд╛рдХреЛ рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛ рд╣рд╕реНрддрд╛рдиреНрддрд░рдг рдЧрд░рд┐рдиреНрдЫ, рд░ рдиреЛрдбрд╣рд░реВ рджреЗрдЦрд╛ рдкрд░реНрди рд░ рд╢реЗрдбреНрдпреВрд▓рд░рдХреЛ рдмрд╛рдпрд╛рдБ рд╣рд┐рд▓рдХреЛ рд▓рд╣рд░рдорд╛ рдЧрд╛рдпрдм рд╣реБрди рд╕рдХреНрдЫрдиреНред рд╡рд┐рддрд░рдг рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдбрдХреЛ рдвреЗрд░рдмрд╛рдЯ рдмрдЪреНрди рдПрд░рд▓рд╛langрдкреНрд░рддрд┐рдХреВрд▓ рд╡рд╛рддрд╛рд╡рд░рдгрд╕рдБрдЧ рд▓рдбреНрди рдорджреНрджрдд рдЪрд╛рд╣рд┐рдиреНрдЫред

рднрдиреНрдиреБ: рдорд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ рдХрд┐ рддреНрдпрд╣рд╛рдБ рдЫ libclusterред рдпреЛ рд╕рд╛рдБрдЪреНрдЪреИ рд░рд╛рдореНрд░реЛ рдЫ, рдпрд╕рдорд╛ рдПрдХ рд╣рдЬрд╛рд░ рднрдиреНрджрд╛ рдмрдвреА рддрд╛рд░рд╛рд╣рд░реВ рдЫрдиреН, рд▓реЗрдЦрдХ рд╕рдореБрджрд╛рдпрдорд╛ рдкреНрд░рд╕рд┐рджреНрдз рдЫ, рд░ рддреНрдпреЛ рд╕рдмреИред рдпрджрд┐ рдпреЛ рдкреНрдпрд╛рдХреЗрдЬрд▓реЗ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдЙрди рд░ рдХрд╛рдпрдо рд░рд╛рдЦреНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░реЗрдХреЛ рд╡рд┐рдзрд┐рд╣рд░реВ рддрдкрд╛рдИрдВрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдЫрдиреН рднрдиреЗ, рдо рддрдкрд╛рдИрдВрдХреЛ рд▓рд╛рдЧрд┐ рдЦреБрд╕реА рдЫреБред рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдорд▓рд╛рдИ рдзреЗрд░реИ рдЪрд╛рд╣рд┐рдиреНрдЫред рдо рд╕реЗрдЯрдЕрдкрд▓рд╛рдИ рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ рд░ рдХреНрд▓рд╕реНрдЯрд░ рдкреБрдирд░реНрдЧрдардирдХреЛ рдерд┐рдПрдЯрд░рдорд╛ рдмрд╛рд╣рд┐рд░реА рджрд░реНрд╢рдХ рдмрдиреНрди рдЪрд╛рд╣рдиреНрдиред

рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ

рдорд▓рд╛рдИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдкрдорд╛ рдПрдЙрдЯрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЪрд╛рд╣рд┐рдиреНрдЫ рдЬрд╕рд▓реЗ рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд▓рд┐рдиреНрдЫ рд░ рдирд┐рдореНрди рдЧреБрдгрд╣рд░реВ рд╣реБрдиреЗрдЫ:

  • рдиреЛрдбрд╣рд░реВрдХреЛ рд╣рд╛рд░реНрдб-рдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рд╕реВрдЪреА рд░ рд╕реЗрд╡рд╛рд╣рд░реВ рдорд╛рд░реНрдлрдд рдЧрддрд┐рд╢реАрд▓ рдЦреЛрдЬ рджреБрд╡реИрдХреЛ рд╕рд╛рде рдкрд╛рд░рджрд░реНрд╢реА рдХрд╛рд░реНрдп рдПрд░рд▓рд╛lang;
  • рдкреНрд░рддреНрдпреЗрдХ рдЯреЛрдкреЛрд▓реЛрдЬреА рдкрд░рд┐рд╡рд░реНрддрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХрд▓рдмреНрдпрд╛рдХ (рдиреЛрдб рддреНрдпрд╣рд╛рдБ, рдиреЛрдб рдпрд╣рд╛рдБ, рдиреЗрдЯрд╡рд░реНрдХ рдЕрд╕реНрдерд┐рд░рддрд╛, рд╡рд┐рднрд╛рдЬрди);
  • рд▓рд╛рдореЛ рд░ рдЫреЛрдЯреЛ рдирд╛рдорд╣рд░реВрдХреЛ рд╕рд╛рде рдХреНрд▓рд╕реНрдЯрд░ рд╕реБрд░реБ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд╛рд░рджрд░реНрд╢реА рдЗрдиреНрдЯрд░рдлреЗрд╕, рдЬрд╕реНрддреИ :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

рдорд╛рдерд┐рдХрд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдкрдорд╛ рдирд┐рдореНрди рд╣реБрдиреН: рдХреНрд▓рд╕реНрдЯрд░ 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 рдареЗрдЧрд╛рдирд╛рд╣рд░реВ рд░ рддреНрдпрд╕реИрд▓реЗ рдиреЛрдбрдХреЛ рдирд╛рдорд╣рд░реВ рдкрд╣рд┐рд▓реЗ рдиреИ рдерд╛рд╣рд╛ рднрдП рддрд╛рдкрдирд┐, рд╡рд╛ рддрд┐рдиреАрд╣рд░реВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рддреЛрдХрд┐рдПрдХреЛ/рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░рд┐рдПрдХреЛ рдЫред рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдХреБрдиреИ рд╡рд┐рд╢реЗрд╖ рдбрдХрд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрди рд░ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рдХреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ, рд╡рд┐рддрд░рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдЪрд▓реНрдиреЗ рд╡рд╛ рд╕реНрдерд╛рдиреАрдпрдорд╛ рдЪрд▓реНрдиреЗ рдмреАрдЪрдорд╛ рдХреБрдиреИ рднрд┐рдиреНрдирддрд╛ рдЫреИрдиред :nonode@nohostред рддрдкрд╛рдИрдВ рдпрд╕ рдмрд╛рд░реЗ рдердк рдкрдвреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдХрд╛рдЧрдЬрд╛рдд.

рдпрджреНрдпрдкрд┐ рдЯреЛрдкреЛрд▓реЛрдЬреА рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рдЬрдЯрд┐рд▓ рд╣реНрдпрд╛рдиреНрдбрд▓рд┐рдЩ рдЕрдиреБрдХреВрд▓рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд╛рд░реНрдлрдд рд╕рдореНрднрд╡ рдЫ MyApp.Listener, рддреНрдпрд╣рд╛рдБ рд╕рдзреИрдВ рдХрд┐рдирд╛рд░рд╛ рдХреЗрд╕рд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫ рдЬрд╣рд╛рдБ рдпреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реАрдорд┐рддрддрд╛рд╣рд░реВ рд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣рд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рдЖрдзрд╛рд░рд╢рд┐рд▓рд╛ рд╕рд╛рдмрд┐рдд рд╣реБрдиреНрдЫрдиреНред рдпреЛ рдареАрдХ рдЫ, рдХреЗрд╡рд▓ рдорд╛рдерд┐ рд▓рд┐рдиреБрд╣реЛрд╕реН libcluster, рдЬреБрди рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рд╣реЛ, рд╡рд╛ рдирд┐рдореНрди-рд╕реНрддрд░ рдХреНрд▓рд╕реНрдЯрд░ рдЖрдлреИрдВрд▓рд╛рдИ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпрд╕ рдХреЛрдб рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рд▓рдХреНрд╖реНрдп рдкреНрд░рддреНрдпреЗрдХ рд╕рдореНрднрд╛рд╡рд┐рдд рдкрд░рд┐рджреГрд╢реНрдпрд▓рд╛рдИ рдХрднрд░ рдЧрд░реНрдиреБ рд╣реЛрдЗрди, рддрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреАрдбрд╛ рд░ рдЬрдЯрд┐рд▓ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐-рдкреЗрд╕реНрдЯ рдмрд┐рдирд╛ рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рд╣реЛред

рдиреЛрдЯ: рдпрд╕ рдмрд┐рдиреНрджреБрдорд╛ рдореВрд▓рдорд╛ "рд╣реНрдпрд╛рдкреНрдкреА рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ!" рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдерд┐рдпреЛ, рд░ рдпрд╛рдиреНрдбреЗрдХреНрд╕, рдЬрд╕рдХреЛ рд╕рд╛рде рдо рдЕрдиреБрд╡рд╛рдж рдЧрд░реНрдЫреБ (рдо рдЖрдлреИрдВ рд╢рдмреНрджрдХреЛрд╢рд╣рд░реВ рдорд╛рд░реНрдлрдд рдЬрд╛рдиреБ рдкрд░реНрджреИрди), рдорд▓рд╛рдИ "рд╣реНрдпрд╛рдкреНрдкреА рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ!" рд╡рд┐рдХрд▓реНрдк рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░реНтАНрдпреЛред рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рд╡рд░реНрддрдорд╛рди рднреВрд░рд╛рдЬрдиреАрддрд┐рдХ рдЕрд╡рд╕реНрдерд╛рдХреЛ рдкреНрд░рдХрд╛рд╢рдорд╛ рдпреЛ рднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ рдЕрдиреБрд╡рд╛рджрдХреЛ рдХрд▓реНрдкрдирд╛ рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫреИрдиред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди