Erlang EPMD 使用非默认 EPMD 端口连接到其他主机

Posted

技术标签:

【中文标题】Erlang EPMD 使用非默认 EPMD 端口连接到其他主机【英文标题】:Erlang EPMD connects to other host with non-default EPMD port 【发布时间】:2017-03-04 12:00:03 【问题描述】:

假设有 2 台主机,IP 分别为 192.168.1.11 和 192.168.1.12。

如果我用默认的 EPMD 端口 4369 启动 2 个 Erlang 分布式节点(例如:abc@192.168.1.11 和 def@192.168.1.12),在 net_adm:ping/1 之后,它们可以正常连接。

但是,如果我使用非默认 EPMD 端口(例如 12345)启动其中一个,而另一个使用默认 EPMD 端口,则它们不能 - 通过 net_adm:ping/1。

在这种情况下我该怎么办?

【问题讨论】:

【参考方案1】:

Erlang 使用 EPMD 端口来查找其他节点,因此所有服务器必须能够在此端口上相互通信。在 Erlang 集群中,所有节点都连接到网格中的所有其他节点。 Erlang epmd(erlang 端口映射器守护进程)将使用两个端口,一个用于发现其他 erlang 节点(默认端口 4369)和用于实际通信的动态范围。

集群中的所有节点都必须使用相同的 epmd 端口号进行监听

另外,请注意 Epmd 会跟踪哪个 Erlang 节点正在使用本地机器上的哪些端口。如果您想将 Erlang 用于 Erlang 节点间通信的端口范围限制为 9100-9105,您可以在 app.config 中添加以下行,设置内核变量 'inet_dist_listen_min ' 和 'inet_dist_listen_max'。

示例:

 kernel, [
              inet_dist_listen_min, 9100,
              inet_dist_listen_max, 9105
             ],

确保您设置的范围为集群中的所有节点提供足够的端口。

【讨论】:

以上是关于Erlang EPMD 使用非默认 EPMD 端口连接到其他主机的主要内容,如果未能解决你的问题,请参考以下文章

Erlang EPMD

有没有办法阻止 Erlang 服务器自动启动 epmd?

在erlang中向远程节点端口发送消息

Erlang epmd官方文档中文翻译

在没有 epmd 的情况下启动 erlang VM

从二进制安装 Erlang 和 epmd 具有循环依赖关系