【问题标题】:Erlang EPMD connects to other host with non-default EPMD portErlang EPMD 使用非默认 EPMD 端口连接到其他主机
【发布时间】: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。

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

【问题讨论】:

    标签: erlang distributed epmd


    【解决方案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}
                 ]},
    

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

    【讨论】:

      猜你喜欢
      • 2011-08-07
      • 2021-05-06
      • 2015-05-22
      • 2020-02-18
      • 2016-11-15
      • 2014-09-07
      • 2018-07-03
      • 2014-12-05
      • 2019-02-26
      相关资源
      最近更新 更多