You are viewing sidentdv

entries friends calendar profile Previous Previous Next Next
SiDen - И снова о реанимации epmd.
sidentdv
sidentdv
Share
И снова о реанимации epmd.
 На больших и толстых системах не единичны случаи невозможности коннекта к эрланговой ноде.
Это явно указывает на то, что epmd вдруг растерял всю свою информацию.
Если в нормальном своем состоянии он показывает что-то вида

> epmd -names
epmd: up and running on port 4369 with data:
name siden at port 54406

То после "падения":

> epmd -names
epmd: up and running on port 4369 with data:


Существует общеизветсное решение в узких кругах:
допустим у нас пропала нода mynodename@mynode

  • определить порт запущенной эрланговой ноды mynodename@mynode на mynode можно тем же netstat-ом (обычно это что-то между 40k и 60k)

    > netstat -an | grep LIST
    ...
    tcp4 0 0 *.54406 *.* LISTEN
    ...

  • находим ноду из нашего эрлангового кластера, которая "знает" о пропавшей ноде и отвечает на net_adm:ping('mynodename@mynode') понгом (т.е. она уже когда-то коннектилась к пропавшей ноде и данную информацию сохранила)

  • с этой найденной ноды делаем rpc:call('mynodename@mynode', erl_epmd, register_node, ['mynodename', 54406]).


И все хорошо.

Но что же делать когда нет возможности найти такую ноду.

  • находим необходимый порт как в предыдущем решении

  • запускаем эмулятор и выполняем следующее

    > erl
    Erlang R14B02 (erts-5.8.3) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
    Eshell V5.8.3 (abort with ^G)
    1> erl_epmd:start().
    {ok,<0.33.0>}
    2> erl_epmd:register_node(siden, 54406).
    {ok,2}
    3>

  • смотрим что нам говорит epmd

    > epmd -names
    epmd: up and running on port 4369 with data:
    name siden at port 54406

  • если сейчас закрыть этот эмулятор, то и информация из epmd пропадет, и все вернется на круги своя

  • вместо этого мы открываем еще один эмулятор с коннектом на потерявшийся инстанс

    > erl -sname siden2 -remsh 'siden@MacBook-SiDen'
    Erlang R14B02 (erts-5.8.3) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
    Eshell V5.8.3 (abort with ^G)
    (siden@MacBook-SiDen)1>

  • epmd теперь нам говорит

    epmd: up and running on port 4369 with data:
    name siden2 at port 54486
    name siden at port 54406

  • закрываем первый эмулятор и как и следовло ожидать информация о siden в epmd исчезла

    epmd: up and running on port 4369 with data:
    name siden2 at port 54486

  • во втором эмуляторе повторно выполняем

    > erl_epmd:register_node(siden, 54406).

  • статус epmd:

    epmd: up and running on port 4369 with data:
    name siden at port 54406
    name siden2 at port 54486

  • закрываем второй эмулятор

  • статус epmd:

    epmd: up and running on port 4369 with data:
    name siden at port 54406


Ну вот собственно и все.
Конектимся к было пропавшей ноде и успешно начинаем её истязать :)

Tags:

Comments
From: focojowl Date: April 13th, 2011 10:44 pm (UTC) (Link)
Beneficial info and excellent design you got here! I want to thank you for sharing your ideas and putting the time into the stuff you publish! Great work!

bardus From: bardus Date: December 7th, 2011 08:12 am (UTC) (Link)

Огромное спасибо

а то пришлось на виртуалке пересобирать ejabberd :(
2 comments or Leave a comment
profile
SiDen
User: sidentdv
Name: SiDen
calendar
Back October 2011
1
2345678
9101112131415
16171819202122
23242526272829
3031
page summary
tags