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

时间:2012-12-05 18:18:40

标签: erlang distributed distributed-system

我遇到与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) 。在大约750ms延迟之后对节点/ 0的第二次调用导致找到正确的5个节点。我的应用程序需要三个缺失节点中的两个才能工作,因此,找不到它们,应用程序就会死掉。

我正在使用R15B02

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

1 个答案:

答案 0 :(得分:0)

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

  

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。这种方法的缺点是每个节点都需要自己的配置文件。