Erlang 分布式应用程序配置对通过net_adm:ping/0发现节点的影响

Erlang 分布式应用程序配置对通过net_adm:ping/0发现节点的影响,erlang,distributed,distributed-system,Erlang,Distributed,Distributed System,在分布式应用程序的上下文中执行net_adm:ping/1时,我遇到了不同的行为 我有一个应用程序,它在启动时ping一个众所周知的节点,并以这种方式发现连接节点网格中的所有节点 当我在单个节点(非分布式配置)上启动此应用程序时,netadm:ping/1后跟nodes/0报告4个其他节点(这是正确的)。这4个节点位于2台不同的物理机器上,因此返回的内容如下n1@machine_1, n2@machine_2, n3@machine_2, n4@machine_1(实际返回的是ip地址,而不是机

在分布式应用程序的上下文中执行net_adm:ping/1时,我遇到了不同的行为

我有一个应用程序,它在启动时ping一个众所周知的节点,并以这种方式发现连接节点网格中的所有节点

当我在单个节点(非分布式配置)上启动此应用程序时,netadm:ping/1后跟nodes/0报告4个其他节点(这是正确的)。这4个节点位于2台不同的物理机器上,因此返回的内容如下n1@machine_1, n2@machine_2, n3@machine_2, n4@machine_1(实际返回的是ip地址,而不是机器x)

作为两节点分布式应用程序的一部分时,在应用程序启动的节点上,net_adm:ping/1后跟节点/0报告2个节点,每台机器一个节点(n1@machine1, n2@machine2). 在大约750毫秒的延迟后,对nodes/0的第二次调用将导致找到正确的5个节点。缺少的三个节点中有两个是我的应用程序工作所必需的,因此,如果找不到它们,应用程序就会死亡

我使用的是R15B02


当mesh中的一些节点参与分布式应用程序配置时,是否已知可传递节点发现过程的延迟不同?

内核应用程序提到了同步节点的方法,以便停止启动阶段,直到准备好向前移动并且一切就绪。以下是选项:

sync\u nodes\u mandatory=[NodeName]

指定哪些其他节点必须处于活动状态才能正确启动此节点。如果列表中的某个节点未在指定时间内启动,则此节点也不会启动。如果此参数未定义,则默认为[]

sync\u nodes\u optional=[NodeName]

指定哪些其他节点可以处于活动状态,以便此节点正确启动。如果此列表中的某个节点未在指定时间内启动,则此节点仍将启动。如果此参数未定义,则默认为空列表

使用它们的文件可以如下所示:

[{kernel,
  [{sync_nodes_mandatory, [b@ferdmbp, c@ferdmbp]},
   {sync_nodes_timeout, 30000}]
}].

启动节点
a@ferdmbp
通过调用上面的
erl-sname a-config文件
。这种方法的缺点是每个节点都需要自己的配置文件。

是的,我就是这么做的。在这个场景中,我看到了节点发现行为的不同。这就好像,在分布式应用程序的情况下,当应用程序(主节点之一)启动或执行接管时,会出现大量延迟。在分布式应用程序控制器之间为分布式应用程序执行一些同步工作。我不确定网格连接设置的内部工作方式,但我认为可能会有一些影响。是的,这也是我的想法。我希望有人能给我一些信息,使这有点可预测,这样我就可以想出如何补偿。谢谢你的帮助/想法。没问题。对不起,误解了这个问题。你在开玩笑吗?我爱你的网站,它给了我很大的帮助。我感谢任何帮助的尝试。