重新启动最高优先级节点时,接管失败,而最低节点正在运行

时间:2013-07-19 11:04:06

标签: erlang distributed

我的应用程序在三个节点pcpc0pc1上运行。首先,当我一起启动它们时,所有启动并且第一个节点开始运行,当我退出第一个节点的shell时,第二个节点(pc0)启动,当我退出第二个节点的shell时,第三个节点(pc1)开始运行。但是如果我在pc1仍在运行时重新启动pc和pc0,则两个节点都崩溃,表示强制节点pc1已关闭。我想知道,pc1正在运行,但其他节点正在说"pc1 is down"

{"Kernel pid terminated",application_controller,"{application_start_failure,kernel,{{shutdown,{failed_to_start_child,kernel_config,{mandatory_nodes_down,['myapp@pc-1']}}},{kernel,start,[normal,[]]}}}"}

可能是什么原因?

1 个答案:

答案 0 :(得分:1)

您的应用程序中是否有全局名称注册商?接管的过程是首先在高优先级节点启动应用程序。然后在其他节点关闭应用程序。这意味着您将有一个短期的全球名称冲突。

默认全局名称冲突解决程序是全局的:random_exit_name()。它会随机拿起pid。因此,它可能会在高优先级节点上终止进程并导致应用程序关闭。

我的解决方案始终是在本地保留进程注册。所以收购没问题。然后使用global:re_register_name()来注册全局名称。