不是直截了当的答案,而是重现您的问题的理论和方法。很复杂,因为涉及到多个节点,看能不能关注我。
TL;DR:SickNode@XXXX在连接到集群后更改了它的 cookie。
所以,这就是我所做的……首先,在终端上我从node1
cookie开始x
……</p>
$ erl -name node1 -setcookie x
(node1@my.computer)1>
然后,在另一个终端上,我从node2
cookie开始x
,将其连接到node1
并将其 cookie 更改为y
……</p>
$ erl -name node2 -setcookie x
(node2@my.computer)1> net_adm:ping('node1@my.computer').
pong
(node2@my.computer)2> erlang:set_cookie(node(), 'y').
true
(node2@my.computer)3>
然后,在另一个终端中,我从node3
cookie开始x
并 ping node1
(这也导致了连接尝试node2
,如下所示),然后明确地尝试连接到node2
……</p>
$ erl -name node3 -setcookie x
(node3@my.computer)1> net_adm:ping('node1@my.computer').
pong
(node3@my.computer)2>
=WARNING REPORT==== 21-Nov-2018::15:09:07 ===
global: 'node3@my.computer' failed to connect to 'node2@my.computer'
=ERROR REPORT==== 21-Nov-2018::15:09:26 ===
** Connection attempt from disallowed node 'node2@my.computer' **
(node3@my.computer)2> net_adm:ping('node2@FERNANDO-BENAVIDES.Conyfero').
pang
到目前为止发生了什么?好吧,既然node1
' 的 cookie 是x
并且node3
' 的 cookiex
也是,他们可以连接。node2
仍然连接到,node1
但由于 cookie 存在y
,node3
无法连接到它。
Erlang 尝试建立一个完全连接的节点网格,因此当您连接到其中一个时,它会自动尝试将您连接到所有其他节点。
但我想彻底,所以我node2
从ping 通node3
,正如预期的那样,我得到了一个pang
. 此外,这些消息弹出node2
:
(node2@my.computer)3>
=ERROR REPORT==== 21-Nov-2018::15:09:07 ===
** Connection attempt from disallowed node 'node3@my.computer' **
=WARNING REPORT==== 21-Nov-2018::15:09:07 ===
global: 'node2@my.computer' failed to connect to 'node3@my.computer'
当然,当我尝试node3
从node2
……ping 通时</p>
(node2@my.computer)3> net_adm:ping('node3@my.computer').
pang
但是……如果我尝试 ping node1
……</p>
(node2@my.computer)4> net_adm:ping('node1@my.computer').
pong
那是因为它们已经连接并且 Erlang 仅在初始握手时验证 cookie 的共享。
最后,如果我尝试从 ping 节点node1
,我会得到预期的结果……</p>
(node1@my.computer)1> net_adm:ping('node2@my.computer').
pong
(node1@my.computer)2> net_adm:ping('node3@my.computer').
pong
(node1@my.computer)3>
希望这可以帮助。