net_adm: сбой проверки связи очень странный - PullRequest
0 голосов
/ 19 ноября 2018

Dears,

У меня проблема с кластером Эрланг. После долгого времени работы моего кластера, однажды я не могу больше подключиться к определенному узлу (например, SickNode@X.X.X.X) в кластере, net_adm: ping (SickNode@X.X.X.X) возвращает ответ pang. Даже используя:

erlang -name abc@X.X.X.X -setcookie MYCOOKIE -remsh SickNode@X.X.X.X

также возвращает результат ошибки.

Странно, SickNode@X.X.X.X хорошо работает с другими узлами в кластере . Проблема только что возникла, когда новый узел присоединяется к кластеру и отправляет эхо-запрос на SickNode.

Здесь нет брандмауэра, потому что все узлы хорошо работают в кластере. Есть ли у кого такая плохая ситуация? Erlang не стабилен для использования кластера?

PS: я использую Erlang / OTP 20 с Centos 6.8

Большое спасибо !!!

1 Ответ

0 голосов
/ 21 ноября 2018

Не прямой ответ, а теория и способ воспроизвести вашу проблему. Это сложно, потому что включает в себя несколько узлов, но давайте посмотрим, сможете ли вы следовать за мной.

TL; DR: SickNode@X.X.X.X изменил свой файл cookie после подключения к кластеру.

Итак, это то, что я сделал ... Сначала на терминале я запустил node1 с cookie x

$ erl -name node1 -setcookie x
(node1@my.computer)1> 

Затем на другом терминале я запустил node2 с cookie x, подключил его к node1 и изменил его cookie на y

$ erl -name node2 -setcookie x
(node2@my.computer)1> net_adm:ping('node1@my.computer').
pong
(node2@my.computer)2> erlang:set_cookie(node(), 'y').
true
(node2@my.computer)3>

Затем в еще одном терминале я запустил node3 с cookie x и пропинговал node1 (что также привело к попытке подключения к node2, как вы увидите ниже), а затем явно попытался подключиться до node2

$ erl -name node3 -setcookie x
(node3@my.computer)1> net_adm:ping('node1@my.computer').
pong
(node3@my.computer)2>
=WARNING REPORT==== 21-Nov-2018::15:09:07 ===
global: 'node3@my.computer' failed to connect to 'node2@my.computer'

=ERROR REPORT==== 21-Nov-2018::15:09:26 ===
** Connection attempt from disallowed node 'node2@my.computer' **
(node3@my.computer)2> net_adm:ping('node2@FERNANDO-BENAVIDES.Conyfero').
pang

Что случилось до сих пор? Ну, поскольку node1 cookie был x, а node3 cookie также был x, они могли подключиться. node2 все еще был подключен к node1, но, поскольку файл cookie был y, node3 не смог подключиться к нему.

Эрланг пытается установить полностью подключенную сетку узлов, поэтому при подключении к одному из них он автоматически пытается подключить вас ко всем остальным.

Но я хотел быть внимательным, поэтому набрал node2 с node3 и, как и ожидалось, получил pang. Также эти сообщения выскакивают на node2:

(node2@my.computer)3>
=ERROR REPORT==== 21-Nov-2018::15:09:07 ===
** Connection attempt from disallowed node 'node3@my.computer' **

=WARNING REPORT==== 21-Nov-2018::15:09:07 ===
global: 'node2@my.computer' failed to connect to 'node3@my.computer'

И, конечно же, когда я пытался пинговать node3 с node2

(node2@my.computer)3> net_adm:ping('node3@my.computer').
pang

Но ... если я попытаюсь пинговать node1

(node2@my.computer)4> net_adm:ping('node1@my.computer').
pong

Это потому, что они уже подключены, и Эрланг проверяет только совместное использование куки при первом рукопожатии.

Наконец, если я попытаюсь пропинговать узлы с node1, я получу ожидаемые результаты ...

(node1@my.computer)1> net_adm:ping('node2@my.computer').
pong
(node1@my.computer)2> net_adm:ping('node3@my.computer').
pong
(node1@my.computer)3>

Надеюсь, это поможет.

...