Проблема с подключением узла Erlang - PullRequest
2 голосов
/ 12 сентября 2010

Борьба с подключением 2 узлов, работающих на отдельных блоках. Пытался убедитесь, что нет обычных проблем с синхронизацией файлов cookie, DNS или брандмауэр.

Сначала я запускаю epmd в режиме отладки в соответствии с рекомендациями Erlang docs:

epmd -d -d

Затем в графе № 1:
erl -name xmpp1@server1.net -kernel inet_dist_listen_min 6000 inet_dist_listen_max 6050 -setcookie testcookie

и в рамке № 2:
erl -name xmpp2@server2.net -kernel inet_dist_listen_min 6000 inet_dist_listen_max 6050 -setcookie testcookie

Не повезло с пингом. Например, в поле № 2:

Erlang (BEAM) emulator version 5.6.4 [source] [64-bit] [smp:4] [async-threads:0] [kernel-poll:false] Eshell V5.6.4 (abort with ^G)<br> (xmpp2@server2.net)1> net_adm:ping('xmpp1@server1.net').<br> pang

epmd на server1.net показывает следующее:

epmd: Sun Sep 12 01:40:32 2010: opening connection on file descriptor 6<br> epmd: Sun Sep 12 01:40:32 2010: got 8 bytes<br> ***** 00000000 00 06 7a 78 6d 70 70 31 |..zxmpp1|<br> epmd: Sun Sep 12 01:40:32 2010: ** got PORT2_REQ<br> epmd: Sun Sep 12 01:40:32 2010: got 18 bytes<br> ***** 00000000 77 00 17 70 4d 00 00 05 00 05 00 05 78 6d 70 70 |w..pM.......xmpp|<br> ***** 00000010 31 00 |1.|<br> epmd: Sun Sep 12 01:40:32 2010: ** sent PORT2_RESP (ok) for "xmpp1"<br> epmd: Sun Sep 12 01:40:32 2010: closing connection on file descriptor 6

Т.е., кажется, что получает запрос пинга от второго узла и отвечает ок.

Tshark, прослушивающий порт epmd (TCP 4369), выдает следующее (я заменил реальные IP-адреса именами серверов):

1 0.000000 server2.net -> server1.net TCP 43809 > epmd [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 TSV=776213773 TSER=0 WS=5<br> 2 0.000433 server1.net -> server2.net TCP epmd > 43809 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 SACK_PERM=1 TSV=1595930818 TSER=776213773 WS=6<br> 3 0.000483 server2.net -> server1.net TCP 43809 > epmd [ACK] Seq=1 Ack=1 Win=5856 Len=0 TSV=776213773 TSER=1595930818<br> 4 0.000545 server2.net -> server1.net EPMD 43809 > epmd [PSH, ACK] Seq=1 Ack=1 Win=5856 Len=8 TSV=776213773 TSER=1595930818<br> 5 0.001445 server1.net -> server2.net TCP epmd > 43809 [ACK] Seq=1 Ack=9 Win=5824 Len=0 TSV=1595930818 TSER=776213773<br> 6 0.001466 server1.net -> server2.net EPMD epmd > 43809 [PSH, ACK] Seq=1 Ack=9 Win=5824 Len=18 TSV=1595930818 TSER=776213773<br> 7 0.001474 server2.net -> server1.net TCP 43809 > epmd [ACK] Seq=9 Ack=19 Win=5856 Len=0 TSV=776213773 TSER=1595930818<br> 8 0.001481 server1.net -> server2.net TCP epmd > 43809 [FIN, ACK] Seq=19 Ack=9 Win=5824 Len=0 TSV=1595930818 TSER=776213773<br> 9 0.001623 server2.net -> server1.net TCP 43809 > epmd [FIN, ACK] Seq=9 Ack=20 Win=5856 Len=0 TSV=776213773 TSER=1595930818<br> 10 0.001990 server1.net -> server2.net TCP epmd > 43809 [ACK] Seq=20 Ack=10 Win=5824 Len=0 TSV=1595930818 TSER=776213773

Так что мне кажется, что нет проблем с брандмауэром, так как экземпляры epmd общаются друг с другом. Чего мне не хватает?

Ваш совет очень ценится!

С уважением, Борис

Ответы [ 2 ]

0 голосов
/ 27 ноября 2014

Я также новичок в erlang

Мои первые несколько экспериментов были с привязкой абсолютного IP-адреса.

  1. Erl -name coder@192.168.1.2 -setcookie suchismadness
  2. Erl -name dumb@192.168.1.3 -setcookie theseismadness

Если вы подключаетесьчерез Интернет убедитесь, что вы открыли порты, указанные в inet_dist_listen_min & inet_dist_listen_max в вашем маршрутизаторе (порт приложения) + порт epmd.

Сервер1 -> порты router1 открыты для порта epmd & app Server2 -> порты router2 открыты для epmd &Порт приложения. Прежде чем использовать пространство имен, необходимо сначала выполнить привязку к IP-адресу.

0 голосов
/ 12 сентября 2010

Оказывается, проблема с брандмауэром.Большое спасибо Майклу Сантосу, который показал мне правильное направление.Проверьте его ответ здесь .

...