设置短名称后连接到生产节点

时间:2018-08-08 07:13:53

标签: debugging erlang elixir remote-debugging epmd

我正在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 -namesbackend-platform报告为正在运行的节点。

1 个答案:

答案 0 :(得分:0)

根据我的经验,如果要连接到远程节点,则必须传递全名(--name)而不是简称(--sname)。

因此,在IP为192.168.1.10的节点A上,运行:

iex --name bob@192.168.1.10 --cookie secret

在IP为192.168.1.11的节点B上,运行:

iex --name alice@192.168.1.11 --cookie secret

然后在您的计算机上,使用ip 192.168.1.12,可以使用附加到这些远程Shell。首先,必须通过SSH隧道将其本地EPMD端口(4369)绑定到远程服务器的EPMD端口。

ssh a -L 4369:127.0.0.1:4369

然后,您可以使用以下方法将远程Shell连接到这些节点:

iex --name carol@192.168.1.12 --cookie secret --remsh alice@192.168.1.11

我在机器上做了一些实验,发现它仅适用于IP地址。如果远程计算机上的名称不符合其IP地址或域名的要求,则我的计算机在machine.example.com上运行,主机名为machine。而且我必须将其与我连接的客户端上的DNS名称或IP地址匹配。

Erlang的邮件列表上有一些有趣的信息[1]。

[1] http://erlang.org/pipermail/erlang-questions/2006-December/024270.html

编辑

我做了一些进一步的实验,并成功连接了带有短名称的远程节点。

正如您已经提到的,您确实需要两个节点以相同的命名模式运行(即,两个都短,或者都完全合格)。

在节点A上,使用ip 12.12.12.12和FQDN a.example.com,我生成了一个这样的shell:

iex --sname bob --cookie secret

在我的本地计算机L上,使用ip 5.5.5.5和FQDN l.notanexample.com,生成了一个这样的shell:

ssh a -L 4369:127.0.0.1:4369

iex --sname alice --cookie secret --remsh bob@a

之所以可行,之所以可行,是因为在我的本地计算机上的/etc/hosts文件中,我没有在主机名(简称主机名)上绑定一行到远程IP。

因此,在本地计算机上的/etc/hosts中,现在有以下行:

12.12.12.12 a