【问题标题】:Erl cannot connect to local EPMD. Why?Erl 无法连接到本地 EPMD。为什么?
【发布时间】:2012-11-25 05:46:09
【问题描述】:
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,[]]}}})

我在本地机器上工作正常,但在 Amazon EC2 上却不行,我想知道这是否是一些与网络相关的问题。

如何查看? EPMD 日志一直说我的连接来自非本地地址和块。

这会影响我的 RabbitMQ 启动。

【问题讨论】:

    标签: erlang rabbitmq


    【解决方案1】:

    我认为这与您的主机名设置有关。

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

    根据你上面的shell信息,当前主机名是"ip-10-101-61-85 ec2-user",可能是OS安装程序分配的。 尝试重置您的主机名,不要在主机名中使用whitespace,然后重试。

    【讨论】:

    • ip-10-101-61-85 应该是主机名,ec2-user 应该是当前用户名
    【解决方案2】:

    这似乎是 CentOS Ec2 上 erlang R14 或更高版本的错误,我现在在 erlang R13 上工作正常

    【讨论】:

      【解决方案3】:

      这不是错误。默认情况下,较新的 erlang 版本将与 epmd 的连接限制为本地地址。很可能您遇到了路由问题,或者原因是使用 iptables 伪装所有传出流量,而不检查目的地是否为 127.0.0.0/8。

      调整你的 MASQUERADE 规则:

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

      和/或检查您的路由表。

      【讨论】:

      • 我猜这将是一个 ipfw 规则。我目前无法使用 Mac,但 man ipfw 应该可以帮助您入门。
      • 是否有禁用单端口伪装的选项?
      • --dport--sport 选项可以使规则端口特定。
      猜你喜欢
      • 2012-08-28
      • 1970-01-01
      • 2020-02-18
      • 2015-05-22
      • 1970-01-01
      • 2021-03-17
      • 2018-01-07
      • 2015-09-02
      • 1970-01-01
      相关资源
      最近更新 更多