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

Debugging 设置短名称时连接到生产节点,debugging,erlang,elixir,remote-debugging,epmd,Debugging,Erlang,Elixir,Remote Debugging,Epmd,我正在我的3台服务器上运行一个Elixir应用程序。我最近需要连接节点,以便在它们之间同步一些内容,为此,我为每个节点设置了短名称 我正在使用Edeliver/Distillery生成发布和部署。我将var/vm.args复制到每个节点上的release目录,并更改了-nameblah@ip至-snamename@nodename。节点可以看到并相互连接,没有问题 在给每个节点命名之前,当我需要调试我的应用程序时,我使用ssh远程连接到我的节点。我采用了这种方法: ssh节点-L 4369:1

我正在我的3台服务器上运行一个Elixir应用程序。我最近需要连接节点,以便在它们之间同步一些内容,为此,我为每个节点设置了短名称

我正在使用Edeliver/Distillery生成发布和部署。我将
var/vm.args
复制到每个节点上的release目录,并更改了
-nameblah@ip
-snamename@nodename
。节点可以看到并相互连接,没有问题

在给每个节点命名之前,当我需要调试我的应用程序时,我使用ssh远程连接到我的节点。我采用了这种方法:

  • ssh节点-L 4369:127.0.0.1:4369
  • 在我的本地计算机上运行
    epmd-names
    ,查找我的应用程序的端口
  • 杀死最后一个ssh并运行
    ssh节点-L 4399:127.0.0.1:4399-L端口:127.0.0.1:port
    ,以访问我的计算机上正在运行的节点
  • 在我的机器上运行
    iex--hidden--erl'-name debug-setcookie cookie\u like\u 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
后端平台
正确地报告为正在运行的节点。

根据我的经验,如果你想连接到远程节点,你必须传递全名(
--name
),而不是短名(
--sname

因此,在节点A上,使用ip 192.168.1.10,您可以运行:

iex——名称bob@192.168.1.10--cookie秘密

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

iex——名称alice@192.168.1.11--cookie秘密

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

ssh a-L 4369:127.0.0.1:4369

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

iex——名称carol@192.168.1.12——饼干的秘密——remshalice@192.168.1.11

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

关于这一点,Erlang的邮件列表中有一些有趣的流量[1]

[1]

编辑 我做了一些进一步的实验,并成功地用短名称连接到远程节点

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

在节点
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--remshbob@a

之所以这样做有效,而且以前没有,是因为在我的本地计算机上,在
/etc/hosts
文件中,我没有将主机名(短主机名)绑定到远程IP

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


12.12.12.12a

我想
贵族
会帮你的。贵族能帮我什么?它说它用于连接集群上的节点。我已经有了。我希望将shell从系统连接到生产节点,以便有时调试和监视它@蒋:您能为您试图连接的两台计算机提供/etc/hosts文件吗?您在编辑中没有使用短名称,您的意思是
--sname
?啊,是的。这确实是一个打字错误。