如何在互通的Linux主机间连接两个Erlang节点?
嘿,这个问题我熟!既然两台Linux主机已经能正常互通,连接Erlang节点其实只需要几个关键步骤,我给你一步步说清楚:
连接两台Linux主机上的Erlang节点步骤
1. 先确保两台主机的Erlang版本一致
Erlang节点对版本兼容性要求很高,版本不一致大概率会连接失败。在两台主机的终端分别执行:
erl -version
确认输出的版本号完全匹配,比如都是Erlang/OTP 26 [erts-14.0.2]这种格式。
2. 设置完全相同的Erlang Cookie
Erlang节点之间靠Cookie做身份验证,这是连接成功的核心前提!有两种设置方式:
方式一:临时设置(仅当前会话有效)
在主机A启动Erlang节点时直接指定Cookie:
erl -name node_a@192.168.137.1 -setcookie my_erlang_cookie
在主机B启动节点时用完全一样的Cookie:
erl -name node_b@192.168.137.2 -setcookie my_erlang_cookie
注意Cookie是区分大小写的,别写错字母!
方式二:永久设置(所有会话生效)
如果不想每次启动都输Cookie,可以修改Erlang的全局Cookie文件。两台主机都执行以下命令(确保文件权限是600,否则Erlang会拒绝使用):
# 写入Cookie内容,两台机器要完全一样 echo "my_erlang_cookie" > ~/.erlang.cookie # 设置严格的文件权限 chmod 600 ~/.erlang.cookie
之后启动节点时只需要指定名称即可:
# 主机A erl -name node_a@192.168.137.1 # 主机B erl -name node_b@192.168.137.2
3. 发起连接并验证
现在在任意一个节点的Ershell里发起连接,比如在主机A的Ershell中执行:
net_adm:ping(node_b@192.168.137.2).
如果返回pong,说明连接成功!如果返回pang,可以排查这几个点:
- 两台主机的防火墙有没有放行Erlang端口(默认用4369端口+随机高端口,临时关闭防火墙测试最快)
- Cookie是否完全一致(包括大小写、空格)
- 节点名称格式是否正确:必须是
节点名@IP地址,如果用主机名的话,两台机器得能互相解析对方主机名(比如修改/etc/hosts)
4. 确认连接状态
连接成功后,你可以执行以下命令查看已连接的节点列表:
nodes().
比如在主机A上执行会返回[node_b@192.168.137.2]。
还可以跨节点执行命令测试连通性,比如在主机A调用主机B的命令:
rpc:call(node_b@192.168.137.2, os, cmd, ["hostname"]).
会返回主机B的主机名,证明跨节点调用正常。
内容的提问来源于stack exchange,提问作者aeon
相关产品推荐
相关产品推荐

