简体   繁体   English

Erlang节点连接问题

[英]Erlang node connectivity problem

Struggling with connecting 2 nodes running on separate boxes. 难以连接2个运行在不同盒子上的节点。 Tried to make sure that there is no usual problems with cookie synchronization, DNS or firewall. 尝试确保Cookie同步,DNS或防火墙没有常见问题。

First, I run epmd in debug mode as recommended by Erlang docs: 首先,按照Erlang文档的建议,以调试模式运行epmd:

epmd -d -d epmd -d -d

Then on box #1: 然后在方框1上:
erl -name xmpp1@server1.net -kernel inet_dist_listen_min 6000 inet_dist_listen_max 6050 -setcookie testcookie erl-名称xmpp1@server1.net-内核inet_dist_listen_min 6000 inet_dist_listen_max 6050 -setcookie testcookie

and on box #2: 并在方框2上:
erl -name xmpp2@server2.net -kernel inet_dist_listen_min 6000 inet_dist_listen_max 6050 -setcookie testcookie erl-名称xmpp2@server2.net-内核inet_dist_listen_min 6000 inet_dist_listen_max 6050 -setcookie testcookie

No luck with ping. 没有运气平。 For example, on box #2: 例如,在方框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)
(xmpp2@server2.net)1> net_adm:ping('xmpp1@server1.net').
pang

epmd on server1.net shows following: server1.net上的epmd显示如下:

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

ie, appears to receive ping request from second node and respond with ok. 即,似乎从第二个节点接收到ping请求并以ok响应。

Tshark listening on epmd port (TCP 4369) gives following (I replaced real IPs with server names): 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
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
3 0.000483 server2.net -> server1.net TCP 43809 > epmd [ACK] Seq=1 Ack=1 Win=5856 Len=0 TSV=776213773 TSER=1595930818
4 0.000545 server2.net -> server1.net EPMD 43809 > epmd [PSH, ACK] Seq=1 Ack=1 Win=5856 Len=8 TSV=776213773 TSER=1595930818
5 0.001445 server1.net -> server2.net TCP epmd > 43809 [ACK] Seq=1 Ack=9 Win=5824 Len=0 TSV=1595930818 TSER=776213773
6 0.001466 server1.net -> server2.net EPMD epmd > 43809 [PSH, ACK] Seq=1 Ack=9 Win=5824 Len=18 TSV=1595930818 TSER=776213773
7 0.001474 server2.net -> server1.net TCP 43809 > epmd [ACK] Seq=9 Ack=19 Win=5856 Len=0 TSV=776213773 TSER=1595930818
8 0.001481 server1.net -> server2.net TCP epmd > 43809 [FIN, ACK] Seq=19 Ack=9 Win=5824 Len=0 TSV=1595930818 TSER=776213773
9 0.001623 server2.net -> server1.net TCP 43809 > epmd [FIN, ACK] Seq=9 Ack=20 Win=5856 Len=0 TSV=776213773 TSER=1595930818
10 0.001990 server1.net -> server2.net TCP epmd > 43809 [ACK] Seq=20 Ack=10 Win=5824 Len=0 TSV=1595930818 TSER=776213773

So it looks to me that there is no firewall issues, as epmd instances talk to each other. 因此在我看来,没有任何防火墙问题,因为epmd实例相互交谈。 What am I missing? 我想念什么?

Your advise is very much appreciated! 非常感谢您的建议!

Best regards, Boris 最好的问候,鲍里斯

I am also a newbie to erlang 我也是erlang的新手

My first few experiments were with binding absolute IP address. 我最初的几个实验是绑定绝对IP地址。

  1. Erl -name coder@192.168.1.2 -setcookie thusismadness Erl -name coder@192.168.1.2 -setcookie行为
  2. Erl -name dumb@192.168.1.3 -setcookie thusismadness 错误-name dumb@192.168.1.3 -setcookie

If you are connecting over internet make sure that you open ports specified in inet_dist_listen_min & inet_dist_listen_max in your router (app port) + epmd port. 如果要通过Internet连接,请确保在路由器(应用程序端口)+ epmd端口中打开inet_dist_listen_min和inet_dist_listen_max中指定的端口。

Server1 -> router1 ports open for epmd & app port Server2 -> router2 ports open for epmd & app port Please bind over IP address first before using namespace. Server1-> router1端口为epmd和应用程序端口打开Server2-> router2端口为epmd和应用程序端口打开在使用名称空间之前,请先通过IP地址进行绑定。

Turns out to be a firewall issue. 原来是防火墙问题。 Big thanks to Michael Santos who showed me the right direction. 非常感谢Michael Santos,他向我展示了正确的方向。 Check out his answer here . 在这里查看他的答案。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM