如何连接两个erlang节点?

时间:2016-12-09 01:06:31

标签: erlang

有人可以给我一些关于如何连接两个Erlang节点的可能性。 我知道使用erlang的一种方法:set_cookie / 2并且如果有另一种方式则很好奇。

3 个答案:

答案 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值。

另外,你必须考虑安全性。

getting_started

  

运行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