2016-10-22 10 views
0

Предположим, что есть 2 хоста с IP-адресами 192.168.1.11 и 192.168.1.12.Erlang EPMD подключается к другому хосту с нестандартным портом EPMD

Если я запускаю 2 распределенных узла Erlang (например: [email protected] и [email protected]) с портом 4369 EPMD по умолчанию, они могут нормально соединяться друг с другом после net_adm: ping/1.

Но если я запустил один из них с нестандартным портом EPMD, например 12345, а другой с портом EPMD по умолчанию, они не могут - через net_adm: ping/1.

Что делать в этом случае?

ответ

1

Erlang использует порт EPMD для поиска других узлов, поэтому все серверы должны иметь возможность разговаривать друг с другом на этом порту. В кластере Erlang все узлы соединены со всеми другими узлами в сетке. Erlang epmd (демон ermang port portper) будет использовать два порта, один для обнаружения других узлов 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} 
      ]}, 

убедитесь, что диапазон установить обеспечивает достаточное количество портов для всех узлов в кластере.