2016-10-22 51 views
0

假设有2台主机的IP为192.168.1.11和192.168.1.12。Erlang EPMD使用非默认的EPMD端口连接到其他主机

如果我使用默认EPMD端口4369启动2个Erlang分布式节点(例如:[email protected][email protected]),则可以在net_adm:ping/1之后相互正常连接。

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

在这种情况下该怎么办?

回答

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} 
      ]}, 

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

相关问题