有人可以给我一些关于如何连接两个Erlang节点的可能性。 我知道使用erlang的一种方法:set_cookie / 2并且如果有另一种方式则很好奇。
答案 0 :(得分:6)
<强> 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
复制到其他远程PC即可共享相同的Cookie值。
另外,你必须考虑安全性。
运行erlang时,Erlang节点完全不受保护:set_cookie(node(),nocookie)。这有时适用于通常不联网的系统,或仅适用于维护目的的系统。有关安全系统的详细信息,请参阅auth(3)。
答案 1 :(得分:2)
根据NCC Group的“Erlang Security 101”(https://www.nccgroup.trust/globalassets/our-research/uk/whitepapers/2014/erlang_security_101_v1-0.pdf),您不应该使用-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文件方法,对文件具有限制性权限。
答案 2 :(得分:1)
您应该设置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时设置端口(并设置min,max)
erl \
-kernel inet_dist_listen_min 40293\
-setcookie democookie\
-name erl_node_1