一、启动四个cmd
-erl -sname a -setcookie abc
-erl -sname b -setcookie abc
-erl -sname c -setcookie abc
-erl -sname d -setcookie efg
二、节点互联
1 nodes/0 %获得和当前node连接的所有node 2 net_adm:ping(Node) %ping一个node 成功后就返回pong,表示当前节点连接上了Node节点,加入了Node所在的集群,失败返回pang(也许还有出错信息)
测试可以按照下图红色数字的顺序输入
1.在a下输入net_adm:ping(b),当a连接上b的时候返回了pong表示成功,
可以在a输入nodes(),可以看见当前节点已经连接的节点集群[[email protected]],
可以在b输入nodes(),可以看见当前节点已经连接的节点集群[[email protected]],
2.在a下输入net_adm:ping(c),当a连接上c的时候返回了pong表示成功,
此时:
在a输入nodes(),可以看见当前节点已经连接的节点集群[[email protected],[email protected]],
在b输入nodes(),可以看见当前节点已经连接的节点集群[[email protected],[email protected]],
在c输入nodes(),可以看见当前节点已经连接的节点集群[[email protected],[email protected]],
说明:erlang默认情况下使用的是全连接的方式,当任意节点加入集群的时候,该集群内的所有节点相互之间都已经建立了连接
3.当在a连接d节点的时候返回pang表示失败,因为a节点和b节点所使用的cookie不同,要想建立连接,必需使用相同的cookie
ps:如果想让d节点加入到集群,就需要修改d节点的cookie值,可以使用auth:set_cookie/1来修改当前node的cookie,使用auth:get_cookie/1获取当前node的cookie
当d修改cookie之后,则可以成功加入到集群
总结命令:
erl -sname 名字 %建立一个node
erl -sname 名字 -setcookie Value %建立一个cookie值为Value的node
net_adm:ping/1 %ping一个node pong就连接 pang表失败
auth:get_cookie/1 %获得当前node的cookie值
auth:set_cookie/1 %修改当前的node的cookie值(已连接下不会断开和其他node的连接)
auth:set_cookie/2 %第一个参数是另外一个node(node和cookie都是原子 用‘ ‘)第二个参数是那个node的cookie 用来让不同cookie的两个node连接