2013-04-20 18 views
8

Erlang ver: R 16bErlang zgłaszane epmd_closed błąd

OS: Fedora17

erl -name a i erl -sname a wszystkie zgłoszone następujący błąd:

{error_logger,{{2013,4,20},{14,50,20}},"Protocol: ~tp: register/listen error: ~tp~n",["inet_tcp",epmd_close]} 
{error_logger,{{2013,4,20},{14,50,20}},crash_report,[[{initial_call,{net_kernel,init,['Argument__1']}},{pid,<0.21.0>},{registered_name,[]},{error_info,{exit,{error,badarg},[{gen_server,init_it,6,[{file,"gen_server.erl"},{line,320}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,239}]}]}},{ancestors,[net_sup,kernel_sup,<0.10.0>]},{messages,[]},{links,[#Port<0.56>,<0.18.0>]},{dictionary,[{longnames,true}]},{trap_exit,true},{status,running},{heap_size,376},{stack_size,27},{reductions,728}],[]]} 
{error_logger,{{2013,4,20},{14,50,20}},supervisor_report,[{supervisor,{local,net_sup}},{errorContext,start_error},{reason,{'EXIT',nodistribution}},{offender,[{pid,undefined},{name,net_kernel},{mfargs,{net_kernel,start_link,[[s,longnames]]}},{restart_type,permanent},{shutdown,2000},{child_type,worker}]}]} 
{error_logger,{{2013,4,20},{14,50,20}},supervisor_report,[{supervisor,{local,kernel_sup}},{errorContext,start_error},{reason,{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}},{offender,[{pid,undefined},{name,net_sup},{mfargs,{erl_distribution,start_link,[]}},{restart_type,permanent},{shutdown,infinity},{child_type,supervisor}]}]} 
{error_logger,{{2013,4,20},{14,50,20}},crash_report,[[{initial_call,{application_master,init,['Argument__1','Argument__2','Argument__3','Argument__4']}},{pid,<0.9.0>},{registered_name,[]},{error_info,{exit,{{shutdown,{failed_to_start_child,net_sup,{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}}},{kernel,start,[normal,[]]}},[{application_master,init,4,[{file,"application_master.erl"},{line,138}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,239}]}]}},{ancestors,[<0.8.0>]},{messages,[{'EXIT',<0.10.0>,normal}]},{links,[<0.8.0>,<0.7.0>]},{dictionary,[]},{trap_exit,true},{status,running},{heap_size,376},{stack_size,27},{reductions,117}],[]]} 
{error_logger,{{2013,4,20},{14,50,20}},std_info,[{application,kernel},{exited,{{shutdown,{failed_to_start_child,net_sup,{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}}},{kernel,start,[normal,[]]}}},{type,permanent}]} 
{"Kernel pid terminated",application_controller,"{application_start_failure,kernel,{{shutdown,{failed_to_start_child,net_sup,{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}}},{kernel,start,[normal,[]]}}}"} 

Crash dump was written to: erl_crash.dump 
Kernel pid terminated (application_controller) ({application_start_failure,kernel,{{shutdown,{failed_to_start_child,net_sup,{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}}},{k 

Poniżej znajduje iptables:

> iptables --list 
Chain INPUT (policy ACCEPT) 
target  prot opt source    destination 
DROP  icmp -- anywhere    anywhere 

Chain FORWARD (policy ACCEPT) 
target  prot opt source    destination 

Chain OUTPUT (policy ACCEPT) 
target  prot opt source    destination 

Poniżej znajduje erl:

> erl 
Erlang R16B (erts-5.10.1) [source] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] 

Eshell V5.10.1 (abort with ^G) 
1> 

Jest na Linode VPS i kiedyś było dobrze. Nie wiem, co jest przyczyną tego problemu.

Odpowiedz

9

Prawdopodobnie problem dotyczy konfiguracji iptables.

Domyślnie Erlang nie zezwala na połączenia z epmd z adresów nielokalnych. Jeśli się nie mylę, to zachowanie jest prawdziwe w nowych wersjach Erlanga. Wygląda na to, że masz problemy z iptables związane z NAT/MASQUERADING - Twój ruch wychodzący jest maskowany na zewnętrzny adres IP przez iptables (włączając w to ruch z/do 127.0.0.1).

Przykład

Maskarada cały ruch wychodzący

-A POSTROUTING -j SNAT --to-source x.x.x.x 

To wyjście 'iptables -t nat --list'

Chain POSTROUTING (policy ACCEPT) 
target  prot opt source    destination 
SNAT  all -- anywhere    anywhere    to:x.x.x.x 

Sprawdź 'Erl -snazwa a' - nie działa, dokładnie ten sam błąd

Teraz maskarady cały ruch wychodzący z wyjątkiem skierowany do 127.0.0.0/8

-A POSTROUTING ! -d 127.0.0.0/8 -j SNAT --to-source x.x.x.x 

zwrócić uwagę na dodanej "! -d 127.0.0.0/8 '

Sprawdź iptables ponownie

#iptables -t nat --list 
Chain POSTROUTING (policy ACCEPT) 
target  prot opt source    destination 
SNAT  all -- anywhere   !127.0.0.0/8   to:x.x.x.x 

I ponownie sprawdzić Erlang:

#erl -sname a 
Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false] 

Eshell V5.9.1 (abort with ^G) 
([email protected])1> q(). 
ok 
([email protected])2> % 

To działa doskonale.

Spróbuj więc sprawdzić konfigurację NAT/MASQUERADING w systemie iptables/firewall.

UPDATE

celu realizacji NAT/maskarady można użyć jednego z tych reguł iptables:

-A POSTROUTING ! -d 127.0.0.0/8 -j SNAT --to-source x.x.x.x 

i

-A POSTROUTING ! -d 127.0.0.0/8 -j MASQUERADE 

W pierwszym przypadku ("source NAT) powinieneś wyraźnie wskazać zewnętrzny adres IP. Można wiedzieć się, że za pomocą tego polecenia:

#ifconfig 

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 
    options=3<RXCSUM,TXCSUM> 
    inet 127.0.0.1 netmask 0xff000000 
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 
    ether 70:56:81:98:d1:b9 
    inet X.X.X.X netmask 0xffffff00 broadcast Y.Y.Y.Y 
    media: autoselect 
    status: active 

inet XXXX maska ​​0xffffff00 broadcast YYYY

tutaj XXXX jest zewnętrzny adres IP należy wskazać na polecenie '--SNAT xxxx'

W drugim przypadku ("maskarada") nie wskazuje się wyraźnie zewnętrznego adresu IP - serwer zrobi to automatycznie.

+0

Dziękuję bardzo. Znalazłem MASARARADING w moim iptables. Jest używany przez mój ipsec. Po ponownym uruchomieniu mojego iptables, problem zniknął. – goofansu

+0

Czy wytłumaczysz, co powinien ustawić ipaddr na '--to-source'? – goofansu

+0

Po przeczytaniu reguł iptable, postanawiam użyć 'iptables -t nat -A POSTROUTING! -d 127.0.0.0/8 -j MASARARADING' i teraz jest OK. – goofansu

1

Problem polega na tym, że epmd nie może wykonać swojej pracy. Wszystko inne wydaje się być wynikiem tego problemu. Skoncentruję się na epmd i najpierw to zrobię i pracuję w VPS, a potem skupię się na węźle Erlang.

Z jakiegoś powodu nie dostajesz epmd do góry, a potem wszystko zawodzi w wyniku awarii.

+0

Dziękuję za radę, spróbuję jeszcze raz. – goofansu