В настоящее время я пытаюсь настроить распределенную среду нагрузочного тестирования Tsung, которая использует функциональность подчиненного устройства Erlang, однако мне не удалось заставить узел контроллера запустить подчиненный узел. Например.
(musicglue@load1)1> net:ping(musicglue@load2).
pong
(musicglue@load1)2> slave:start(load2,musicglue,"-setcookie tom").
{error,timeout}
ЗАДНИЙ ПЛАН
Моя среда:
Контроллер — имя хоста: load1, пользователь: musicglue, Ubuntu 10.04 LTS, Erlang R15B01, скомпилированный из исходного кода Ведомый — имя хоста: load2, пользователь: musicglue, Ubuntu 10.04 LTS, Erlang R15B01 соответствует исходному коду Брандмауэр отключен SELinux не установлен
Вещи, которые работают:
- Я могу использовать SSH с load1 на load2 и наоборот
- Я могу запустить сеансы erl на load1 и load2
- Я могу запустить сеанс erl на load2 с load1; ssh load2 ошибка
- Я могу успешно пропинговать load2 из load1 из сеанса erl, используя один и тот же файл cookie на обоих узлах.
Вывод пинга:
musicglue@load1:~$ erl -rsh ssh -sname musicglue -setcookie tom
Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:4:4] [async-threads:
0] [hipe] [kernel-poll:false]
Eshell V5.9.1 (abort with ^G)
(musicglue@load1)1> net:ping(musicglue@load2).
pong
ПРОБЛЕМА
Моя проблема возникает при попытке запустить подчиненный сеанс с load1 на load2:
musicglue@load1:~$ erl -rsh ssh -sname musicglue -setcookie tom
Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:4:4] [async-threads:
0] [hipe] [kernel-poll:false]
Eshell V5.9.1 (abort with ^G)
(musicglue@load1)1> net:ping(musicglue@load2).
pong
(musicglue@load1)2> slave:start(load2,musicglue,"-setcookie
tom").
{error,timeout}
Вот вывод, который я получаю от epmd, когда запускаю команду slave:start:
epmd: Thu May 24 10:01:57 2012: Non-local peer connected
epmd: Thu May 24 10:01:57 2012: opening connection on file descriptor
4
epmd: Thu May 24 10:01:57 2012: got 12 bytes
***** 00000000 00 0a 7a 6d 75 73 69 63 67 6c 75 65
|..zmusicglue|
epmd: Thu May 24 10:01:57 2012: ** got PORT2_REQ
epmd: Thu May 24 10:01:57 2012: got 2 bytes
***** 00000000 77 01 |w.|
epmd: Thu May 24 10:01:57 2012: ** sent PORT2_RESP (error) for
"musicglue"
epmd: Thu May 24 10:01:57 2012: closing connection on file descriptor
4
epmd: Thu May 24 10:01:57 2012: Local peer connected
epmd: Thu May 24 10:01:57 2012: opening connection on file descriptor
4
epmd: Thu May 24 10:01:57 2012: got 24 bytes
***** 00000000 00 16 78 ca d6 4d 00 00 05 00 05 00 09 6d 75 73
|..x..M.......mus|
***** 00000010 69 63 67 6c 75 65 00 00 |
icglue..|
epmd: Thu May 24 10:01:57 2012: ** got ALIVE2_REQ
epmd: Thu May 24 10:01:57 2012: registering 'musicglue:1', port 51926
epmd: Thu May 24 10:01:57 2012: type 77 proto 0 highvsn 5 lowvsn 5
epmd: Thu May 24 10:01:57 2012: got 4 bytes
***** 00000000 79 00 00 01 |
y...|
epmd: Thu May 24 10:01:57 2012: ** sent ALIVE2_RESP for "musicglue"
epmd: Thu May 24 10:01:57 2012: unregistering 'musicglue:1', port
51926
epmd: Thu May 24 10:01:57 2012: closing connection on file descriptor
4
Любая помощь или предложения, которые у кого-либо есть, будут высоко оценены,
Большое спасибо
РЕДАКТИРОВАТЬ
Я также должен упомянуть, что я вижу, что ssh-соединение успешно подтверждается load2, но затем немедленно отключается:
May 30 13:49:27 load2 sshd[16169]: Accepted publickey for musicglue from 173.45.236.182 port 51843 ssh2
May 30 13:49:27 load2 sshd[16171]: Received disconnect from 173.45.236.182: 11: disconnected by user
В ответ на комментарии ниже я также попытался запустить подчиненное устройство, используя разные имена узлов для подчиненного устройства:
musicglue@load1:~$ erl -rsh ssh -sname musicglue -setcookie tom
Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.9.1 (abort with ^G)
(musicglue@load1)1> slave:start(load2,bar,"-setcookie tom").
{error,timeout}
и для контроллера:
musicglue@load1:~$ erl -rsh ssh -sname foo -setcookie tom
Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.9.1 (abort with ^G)
(foo@load1)1> slave:start(load2,musicglue,"-setcookie tom").
{error,timeout}
и для обоих:
musicglue@load1:~$ erl -rsh ssh -sname foo -setcookie tom
Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.9.1 (abort with ^G)
(foo@load1)1> slave:start(load2,bar,"-setcookie tom").
{error,timeout}
Но безрезультатно
РЕШЕНИЕ
Оказывается, моя проблема заключалась в том, что мой ведомый не мог подключиться к контроллеру по SSH и, следовательно, не мог отвечать ни на какие команды.
После исправления этого порта связи между двумя узлами все заработало отлично.
load2
с тем же именем,musicglue
, что и у существующего узла. Имена ваших имен должны быть уникальными на машине. - person rvirding   schedule 30.05.2012