Erlang节点间ping失败原因分析

手册/FAQ (542) 2016-04-14 10:01:09

Erlang节点间ping失败原因分析

今天在部署新系统的时候发现节点间ping不成功的情况,类似
    1> net_adm:ping(‘xx@ip1′).
     pang
     这个问题比较普遍,我就记录下一步步的排除步骤.
    首先从原理上分析下!由于erlang节点间通讯是透过tcp来进行的,所以我们确保以下几点:
     1. 确保网络连接是通的,可以透过ping来查看。
     2. 确保网络连接上tcp是可以通的,可以透过netcat在二个节点所在的机器上分别开个服务器端和客户端进行验证。
     3. 确保端口是防火墙友好的。erlang的节点是登记在epmd服务上的,所以4369端口要能访问,其次节点的动态端口是可以访问的。
    epmd -names
     epmd: up and running on port 4369 with data:
     name xx at port 46627
     … 
    同样可以用netcat来验证。
     4. erlang节点的cookie是一样的,可以透过setcookie来解决。
    这几点确认无误后,就可以开始排查问题了。
     交代下环境,二台机器IP分别是10.1.150.12,10.232.31.89, 上面分别运行Erlang版本R16B和R14B04,cookie统一设置为456789。
    我们来演习下,首先我们10.1.150.12在节点A上起个节点’xx@10.1.150.12′,如下:
     # erl -name xx@`hostname -i` --setcookie 456789
Erlang R16B (erts-5.10) 1 [64-bit] [smp:24:24] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.10  (abort with ^G)
(xx@10.1.150.12)1>
=ERROR REPORT==== 28-Mar-2012::13:25:42 ===
** Connection attempt from disallowed node \'yy@10.232.31.89\' **

    同时我们在10.232.31.89上运行另外一个节点’yy@10.232.31.89′进行节点间连接,如下:$erl -name yy@`hostname -i` --setcookie 456789
Erlang R14B04 (erts-5.8.5) 1 [64-bit] [smp:16:16] [rq:16] [async-threads:0] [hipe] [kernel-poll:false]
 

THE END