假设有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。
在这种情况下我该怎么做?
答案 0 :(得分:1)
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}
]},
确保您设置的范围为群集中的所有节点提供了足够的端口。