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 端口连接到其他主机的主要内容,如果未能解决你的问题,请参考以下文章