2017-02-09 2 views

ответ

2

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

Или при запуске узла Эрланга с помощью ядра переменных 'inet_dist_listen_min' и 'inet_dist_listen_max'.

Пример:

erl -sname foo -kernel inet_dist_listen_min 9100 inet_dist_listen_max 9105 

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

+0

Будет ли работать этот пример 'set_env'? Я подозреваю, что порт выбран, прежде чем вы сможете изменить любые переменные среды. – legoscia

+1

@legoscia изменила причину ответа, поскольку set_env задает переменные ядра, но узел продолжает использовать исходные номера портов. Очень странно. – byaruhaf

Смежные вопросы