Erl cannot connect to local EPMD. Why?

扶醉桌前 提交于 2019-12-11 02:22:31

问题


erl Erlang R14B04 (erts-5.8.5) [source] [64-bit] [rq:1] [async-threads:0] [kernel-poll:false] Eshell V5.8.5 (abort with ^G)

[root@ip-10-101-61-85 ec2-user]# erl -sname foo
{error_logger,{{2012,12,7},{3,17,8}},"Protocol: ~p: register error: ~p~n",["inet_tcp",{{badmatch,{error,epmd_close}},[{inet_tcp_dist,listen,1},{net_kernel,start_protos,4},{net_kernel,start_protos,3},{net_kernel,init_node,2},{net_kernel,init,1},{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}]}
{error_logger,{{2012,12,7},{3,17,8}},crash_report,[[{initial_call,{net_kernel,init,['Argument__1']}},{pid,<0.20.0>},{registered_name,[]},{error_info,{exit,{error,badarg},[{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}},{ancestors,[net_sup,kernel_sup,<0.9.0>]},{messages,[]},{links,[#Port<0.55>,<0.17.0>]},{dictionary,[{longnames,false}]},{trap_exit,true},{status,running},{heap_size,377},{stack_size,24},{reductions,453}],[]]}
{error_logger,{{2012,12,7},{3,17,8}},supervisor_report,[{supervisor,{local,net_sup}},{errorContext,start_error},{reason,{'EXIT',nodistribution}},{offender,[{pid,undefined},{name,net_kernel},{mfargs,{net_kernel,start_link,[[foo,shortnames]]}},{restart_type,permanent},{shutdown,2000},{child_type,worker}]}]}
{error_logger,{{2012,12,7},{3,17,8}},supervisor_report,[{supervisor,{local,kernel_sup}},{errorContext,start_error},{reason,shutdown},{offender,[{pid,undefined},{name,net_sup},{mfargs,{erl_distribution,start_link,[]}},{restart_type,permanent},{shutdown,infinity},{child_type,supervisor}]}]}
{error_logger,{{2012,12,7},{3,17,8}},std_info,[{application,kernel},{exited,{shutdown,{kernel,start,[normal,[]]}}},{type,permanent}]}
{"Kernel pid terminated",application_controller,"{application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}}"}

Crash dump was written to: erl_crash.dump
Kernel pid terminated (application_controller) ({application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}})

I am working fine on my localmachine but not on ec2, i wonder if it is some network related problem. How can I check it? the EPMD log keep say my connection is from non-local address and block.

This would affect my rabbitmq start.

help!!~


回答1:


This is not a bug. Newer erlang versions restrict connections to epmd to local addresses by default. Most likely you have had routing issues or the reason is to masquerade all outgoing traffic with iptables without checking if the destination is 127.0.0.0/8.

Adjust your MASQUERADE rule:

iptables -t nat -A POSTROUTING ! -d 127.0.0.0/8 -j MASQUERADE

And/Or check your routing table.




回答2:


I think it is related to your hostname setting.

[root@ip-10-101-61-85 ec2-user]# erl -sname foo

According to your above shell information, the current host name is "ip-10-101-61-85 ec2-user", it may be allocated by the OS installation program. Try to reset your hostname, and not use whitespace in the host name and try again.




回答3:


It seems that it is a bug for erlang R14 or above on CentOS Ec2, i am working fine on erlang R13 now



来源:https://stackoverflow.com/questions/13756463/erl-cannot-connect-to-local-epmd-why

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!