我在我的 3 台服务器上运行 Elixir 应用程序。我最近需要连接节点,以便我可以在它们之间同步一些东西,为此我为每个节点设置了短名称。
我正在使用 Edeliver/Distillery 生成发布和部署。我复制var/vm.args
到每个节点上的发布目录并更改-name blah@ip
为-sname name@nodename
. 节点可以毫无问题地看到并相互连接。
在为每个节点命名之前,当我需要调试我的应用程序时,我使用 ssh 远程连接到我的节点。我使用了这种方法:
ssh node -L 4369:127.0.0.1:4369
- 在我的本地机器上运行
epmd -names
以找出我的应用程序的端口 - 杀死最后一个 ssh 并运行
ssh node -L 4369:127.0.0.1:4369 -L port:127.0.0.1:port
以访问我机器上正在运行的节点 iex --hidden --erl '-name debug -setcookie cookie_like_server'
在我的机器上运行- 现在我可以访问远程节点,例如我可以
observer
用来查看我的远程节点
现在同样的程序行不通了。
首先,我看到一个错误,说使用短名称和长名称的节点显然无法相互连接。
我将iex
命令更改iex --hidden --erl '-sname debug -setcookie cookie_like_server'
为使用短名称。当我尝试连接到远程节点时,这种方式连接超时observer
。
我真的不明白这个问题。难道我做错了什么?这里有另一种访问使用短名称的正在运行的节点的方法吗?
顺便说一句,我使用 ssh 来加密我的流量。请告诉我是否有使我的连接不加密的解决方案,尽管我可能不会使用它,或者以某种方式通过 ssh 将其隧道化。
更新
我尝试了@christophe-de-troyer 建议的方法。TLDR,没有用。
vahid@arch-adtube ~/ % iex --sname debug --cookie 'cookie' --remsh backend-platform@prod-1
Erlang/OTP 20 [erts-9.0.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]
Could not contact remote node backend-platform@prod-1, reason: :nodedown. Aborting...
ssh prod-1 -L 4369:127.0.0.1:4369
正在运行,并正确epmd -names
报告backend-platform
为正在运行的节点。