自动连接到erlang群集

自动连接到erlang群集,erlang,cluster-computing,distributed,Erlang,Cluster Computing,Distributed,我有一个erlang应用程序,需要以分布式方式运行 现在,要形成集群,erlang节点需要共享相同的cookie值,并且要连接,可以采用以下任一方法- 网络行政:ping/1 net\u内核:连接\u节点/1 但这样做,我将需要维护节点列表,并以自定义方式处理故障切换。即使是在故障转移的情况下,如何知道要连接到哪个节点,因为在此之前,起始节点列表可能已经更改 因此,任何人都可以建议如何以最小的努力形成一个erlang集群,并且未来的节点可以自动加入集群,而无需给出实际的节点列表。对于这一点,没有

我有一个erlang应用程序,需要以分布式方式运行

现在,要形成集群,erlang节点需要共享相同的cookie值,并且要连接,可以采用以下任一方法-

网络行政:ping/1

net\u内核:连接\u节点/1

但这样做,我将需要维护节点列表,并以自定义方式处理故障切换。即使是在故障转移的情况下,如何知道要连接到哪个节点,因为在此之前,起始节点列表可能已经更改


因此,任何人都可以建议如何以最小的努力形成一个erlang集群,并且未来的节点可以自动加入集群,而无需给出实际的节点列表。

对于这一点,没有多少100%的傻瓜式解决方案。我们中的许多人时不时地实施自己的解决方案。我一生中至少做过三次

其中2个,我使用了一个外部数据库(Redis once,MySQL once),在那里我注册和注销了当前的活动节点

另一个机会,我使用了
net\u adm:world()
.erlang.hosts
。看看这个


我也知道有一些项目致力于这类工具的推广:我认为Erlang解决方案在其中一个工具中发挥了作用,我不确定是LASP还是Partisan或Chris Meiklejohn的其他工具。你应该去看看。

谢谢你的回答。正如您在自定义解决方案中提到的,您在Redis/Mysql和register/de-register活动节点中维护了节点列表。成功注册后,您是否使用net_kernel:connect_node/1/net_adm:ping/1连接当前节点,每个节点遍历所有已注册的活动节点,或者采取任何不同的方法。您是否也对注销进行了清理?您是否使用了netu内核:monitor\u nodes/1来捕获节点状态更改。实际上,在取消订阅时,我需要更新一个Mnesia表。成功注册时,我只使用了
net\u adm:ping
到一个节点…这就是连接到所有节点所需的全部功能。取消注册时无需清理,但是…所有使用的节点
net\u内核:监视节点(true,[nodedown\u原因])
检测其他节点何时断开连接,以便从数据库中的节点列表中删除。谢谢。明白了,您说过在取消注册时,您刚刚从列表中删除了节点,但是在取消注册时,订阅了et_kernel:monitor_节点的所有节点(true,[nodedown_reason])都将接收事件并尝试从节点列表中删除节点。那么你是如何同步的呢?另外,您能否告诉我,您是如何确保群集的高可用性和故障转移的。因为如果有任何节点出现故障,我将需要补足并加入集群。是的,所有节点都会收到消息,并尝试将其从表中删除。一个成功了,其他的只是发出一些无用的删除。没什么大不了的。