【发布时间】:2019-01-15 08:39:35
【问题描述】:
我正在我的 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 正确报告为正在运行的节点。
【问题讨论】:
-
我认为
peerage会帮助你。 -
peerage有什么可以帮助我的吗?它说它用于连接集群上的节点。我已经有了。我想将系统中的 shell 连接到生产节点,以便有时对其进行调试和监控。 @JiangYD -
您能否为您尝试连接的两台机器提供 /etc/hosts 文件?
标签: debugging erlang elixir remote-debugging epmd