Debugging 设置短名称时连接到生产节点
我正在我的3台服务器上运行一个Elixir应用程序。我最近需要连接节点,以便在它们之间同步一些内容,为此,我为每个节点设置了短名称 我正在使用Edeliver/Distillery生成发布和部署。我将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
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
、ip12.12.12.12
和FQDNA.example.com
上,我生成了一个shell:
iex--sname bob--cookie secret
在我的本地机器L
、ip5.5.5.5
和FQDNL.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
?啊,是的。这确实是一个打字错误。