Erlang 集群互连测试
Erlang节点相同cookie全互联成为一个集群(cluster).
如果2个集群不同cookie, 然后其中有节点连接到对方集群的节点,
这2个集群会合并成一个集群吗?
连接到另一个集群时,需要先设置cookie,不然会被拒绝。
erlang:set_cookie(Node2, DiffCookie)集群aaaa有节点a1, a2, cookie为 cookie_aaaa.
集群bbbb有节点b1, b2, cookie为 cookie_bbbb.
>erl -sname a1 -setcookie cookie_aaaa...
>erl -sname a2 -setcookie cookie_aaaa
Eshell V6.3 (abort with ^G)
(a2@jinqing)3> net_adm:ping(a1@jinqing).
pong
(a2@jinqing)4> nodes().
[a1@jinqing]>erl -sname b1 -setcookie cookie_bbbb...
>erl -sname b2 -setcookie cookie_bbbb
(b2@jinqing)2> net_adm:ping(b1@jinqing).
pong
(b2@jinqing)3> nodes().
[b1@jinqing]bbbb节点无法直接连aaaa节点
(b2@jinqing)4> net_adm:ping(a1@jinqing).
pangb2节点更改cookie后,仍保持与b1的连接。
(b2@jinqing)6> erlang:get_cookie().
cookie_bbbb
(b2@jinqing)7> erlang:set_cookie(node(), abcd).
true
(b2@jinqing)8> erlang:get_cookie().
abcd
(b2@jinqing)9> nodes().
[b1@jinqing]
(b2@jinqing)10>b2设置cookie并连接a2后,b2进入了aaaa集群, 同时又在bbbb集群。
(b2@jinqing)10> erlang:set_cookie(node(), cookie_aaaa).
true
(b2@jinqing)11> erlang:get_cookie().
cookie_aaaa
(b2@jinqing)12> nodes().
[b1@jinqing]
(b2@jinqing)13> net_adm:ping(a2@jinqing).
pong
(b2@jinqing)14> nodes().
[b1@jinqing,a2@jinqing,a1@jinqing]
(b2@jinqing)15>实际上是aaaa集群现有3个节点:a1, a2, b2.
bbbb集群仍然是2个节点:b1, b2.
(a1@jinqing)2> nodes().
[a2@jinqing,b2@jinqing](a2@jinqing)5> nodes().
[a1@jinqing,b2@jinqing](b1@jinqing)3> nodes().
[b2@jinqing]
此时 a2 ping b2 是通的,但是不会加入 bbbb 集群。
(a2@jinqing)6> net_adm:ping(b2@jinqing).
pong
(a2@jinqing)7> nodes().
[a1@jinqing,b2@jinqing]
(a2@jinqing)8>结果是2个集群可以有交集。