Я работаю над распределенным POC RabbitMQ и застрял в основах кластеризации узлов.
Я пытаюсь следовать руководство по кластеризации, так что это мой справочник.
После установки erlang (R14B04) и Rabbit (2.8.2-1) я скопировал содержимое файла .erlang.cookie
с одного узла. к двум другим.
Я не был уверен, как заставить erlang заметить это изменение, и мне пришлось перезапустить сами машины (довольно грубая сила, но я совсем не знаю erlang).
Кроме того Я открыл в iptables 4369 и 5 дополнительных портов для связи и разместил под
/usr/lib64/erlang/bin/sys.config
следующий конфиг:
{kernel,[{inet_dist_listen_min, XX00},{inet_dist_listen_max,XX05}]}]
Затем еще один перезапуск (тупой, я знаю), чтобы убедиться, что erlang учитывает это, но все же, когда я запускаю:
rabbitmqctl cluster rabbit@HostName1
Я получил:
Clustering node rabbit@HostName2 with [rabbit@HostName1] ...
Error: {no_running_cluster_nodes,[rabbit@HostName1],
[rabbit@HostName1]}
Есть шанс, что моя возня с erlang.cookie или с портами не увенчалась успехом, но я не знаю, как их проверить. Я пытался ввести erl
в cmd, а затем erl_epmd:names()
или другие команды, чтобы получить больше информации, но я, вероятно, далеко не в мире erlang.
Был бы очень признателен за любую помощь
Обновление:
Я попытался пропинговать два узла erlang вручную и получил обратно pang
.
Я сделал следующее:
Подключился к двум узлам, остановил rabbitmq (не был уверен, что это необходимо, но чтобы быть уверенным), запустил erlang так (erl -sname dilbert
и erl -sname dilbert2
), когда запустилась командная строка erlang, я запустил node().
на каждом из них и получил dilbert@HostName1
и dilbert2@HostName2
соответственно. Затем я попытался запустить net_adm:ping('dilbert').
и net_adm:ping('dilbert@HostName1').
с одинарными кавычками и без них с обоих узлов (изменив имена, конечно) и получил во всех 8 случаях pang
.
Когда я запустил nodes().
на одной из машин, я получил пустой массив. .
Я также пытался разрешить весь трафик через брандмауэр (сценарий), а затем запустить приведенные выше команды (не волнуйтесь, они снова включены) и по-прежнему возвращаются pang
.
Обновление 2:
По какой-то причине у меня было несоответствие файлов cookie, которое мне нужно было устранить (спасибо, @ kjw0188 за предложение [я запустил erlang:get_cookie().
в командной строке erlang]).
Это не помогло, и мне нужно было полностью остановить iptables (не знаю, почему, но скоро разберусь) и загрузить узел erlang с -name dilbert@my-ip
, потому что у моих стоечных серверов нет DNS-имени. Это, наконец, позволило мне получить pong и увидеть, что узлы видят друг друга (nodes().
возвращает непустой массив после проверки связи).
Проблема, с которой я столкнулся сейчас, заключается в том, как указать RabbitMQ использовать -name вместо - имя при запуске erlang.
sudo /etc/init.d/rabbitmq-server stop
- person kjw0188   schedule 16.06.2012erlang:get_cookie().
наdilbert
иdogbert
или установите файл cookie вручную с помощью параметра командной строки-setcookie
. Если они по-прежнему не могут пропинговать друг друга, похоже, что erlang по какой-то причине не может найти другие узлы. Доступны ли хосты обычнымping
? Используйте имя хоста для машин для проверки связи, а не IP-адрес. - person kjw0188   schedule 16.06.2012pang
. У меня была проблема со связью между узлами не с IP-адресом, и я думаю, что это связано с тем, что они размещены в Rackspace. Я постараюсь проверить это у них и обновить здесь, как только появится что-то новое. Спасибо за вашу помощь и терпение. - person Ittai   schedule 16.06.2012