有人能给我多种连接两个Erlang节点的方式吗?我知道一种使用erlang:set_cookie/2的方法,但我想知道是否还有其他方法。
有人能给我多种连接两个Erlang节点的方式吗?我知道一种使用erlang:set_cookie/2的方法,但我想知道是否还有其他方法。
1. 使用 -setcookie
。
在 erlang 执行时,您也可以使用 -setcookie
,
在本地机器的第一个终端中,
hyun@hyun-VirtualBox:~$ erl -sname a -setcookie guitar
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
hyun@hyun-VirtualBox:~$ erl -sname b -setcookie guitar
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V7.0 (abort with ^G)
(a@hyun-VirtualBox)1> net_adm:ping('b@hyun-VirtualBox').
pong
2. 复制 $HOME/.erlang.cookie
您可以直接复制$HOME/.erlang.cookie
到其他远程计算机上,以共享相同的cookie值。
此外,您必须考虑安全性。
当运行 erlang:set_cookie(node(), nocookie) 时,Erlang节点完全不受保护。这有时可以适用于通常不联网的系统,或仅用于维护目的的系统。有关安全系统的详细信息,请参阅 auth(3)。
-setcookie
,因为服务器的其他用户可以使用 ps ax | grep erl
查看 cookie。例如,在我的本地计算机上的终端中:zed@blargh:~$ erl -setcookie abc -sname e1
Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V5.10.4 (abort with ^G)
(e1@blargh)1>
然后从第二个终端,以不同的用户身份:
eks@blargh:~$ ps ax | grep erl
2035 pts/7 Sl+ 0:00 /usr/lib/erlang/erts-5.10.4/bin/beam.smp -- -root /usr/lib/erlang -progname erl -- -home /home/zed -- -setcookie abc -sname e1
2065 pts/8 S+ 0:00 grep --color=auto erl
9841 ? S 0:00 /usr/lib/erlang/erts-5.10.4/bin/epmd -daemon
您可以在ps
的输出中清楚地看到cookie。拥有cookie允许第三方加入erlang集群。相反,您应该使用cookie文件方法,并对文件设置限制权限。
您应该设置Cookie(与您编写的控制台或在erl执行中)
另外,如果您设置了shortname(sname),第二个节点应该使用shortname运行
如果您设置了nodename,则第二个节点也可以使用-name运行
有效:
erl -name obsrv@127.0.0.1 -setcookie democookie
erl -name n2@127.0.0.1 -setcookie democookie
不起作用:
erl -name obsrv@127.0.0.1 -setcookie democookie
erl -name n2 -setcookie democookie
如果节点在不同的机器上运行,请检查端口是否开放40293,或在erl执行时设置端口(并设置最小值和最大值)
erl \
-kernel inet_dist_listen_min 40293\
-setcookie democookie\
-name erl_node_1