1

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

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

当我在单个节点(非分布式配置)上启动此应用程序时,net_adm:ping/1 后跟节点/0 报告 4 个其他节点(这是正确的)。4个节点在2个不同的物理机上,所以返回的是下面的n1@machine_1, n2@machine_2, n3@machine_2, n4@machine_1(实际返回的是ip地址,不是machine_x)。

当属于双节点分布式应用程序时,在应用程序启动的节点上,net_adm:ping/1 后跟一个节点/0 报告 2 个节点,每台机器一个(n1@machine1,n2@machine2)。在大约 750 毫秒延迟后再次调用 nodes/0 会导致找到正确的 5 个节点。我的应用程序需要三个缺失节点中的两个才能正常工作,因此,如果找不到它们,应用程序就会死掉。

我正在使用 R15B02

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

4

1 回答 1

0

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

sync_nodes_mandatory = [NodeName]

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

sync_nodes_optional = [NodeName]

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

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

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

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

于 2012-12-06T00:32:12.920 回答