1

假设有 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。

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

4

1 回答 1

3

Erlang 使用 EPMD 端口来查找其他节点,因此所有服务器必须能够在此端口上相互通信。在 Erlang 集群中,所有节点都连接到网格中的所有其他节点。Erlang epmd(erlang port mapper daemon)将使用两个端口,一个用于发现其他 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}
             ]},

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

于 2016-10-22T09:38:05.993 回答