RabbitMQ не будет кластеризоваться (nxdomain)

Я хочу настроить 2 сервера rabbitmq для работы в кластере. Когда при попытке запустить

rabbitmqctl join_cluster rabbit@my_rabbit_1.my.domain.name on my_rabbit_1

я получаю unable to connect to epmd (port 4369) on my_rabbit_2.my.domain.name: nxdomain (non-existing domain)

Я использую rabbitmq:latest (debian), .erlang.cookie то же самое, хосты разрешаются нормально: я могу ping в обе стороны, nmap -6 -p 4369 my_rabbit_2.my.domain.nam возвращает 4369/tcp open epmd

РЕДАКТИРОВАТЬ:

tcpdump показывает, что при разрешении имени хоста rabbit или epmd выполняют не два типа DNS-запросов: AAAA для IPv6 и A для IPv4-адреса, а только IPv4, который неоднократно терпит неудачу с nxdomain, так как нет доступного IPv4-адреса. Однако он не пытается выполнить DNS-запрос AAAA, за исключением случаев, когда он пытается запустить команду типа rabbitmq -n [email protected]: затем он выполняет запрос AAAA и успешно выводит. Отсюда и проблема. Как мне это решить?


person Seer.The    schedule 05.03.2018    source источник


Ответы (2)


Наконец-то нашел решение, которое сработало для меня. В документации Erlang говорится, что по умолчанию -proto_dist указывает протокол для распространения Erlang, который по умолчанию равен inet_tcp (TCP через IPv4). Таким образом, в среде только для IPv6 вы должны установить флаг -proto_dist inet6_tcp для erl.

Это можно сделать, добавив следующие строки в ваш rabbitmq-env.conf (см. документацию по настройке RabbitMQ):

# For rabbitmq-server
RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-proto_dist inet6_tcp"
# For rabbitmqctl
RABBITMQ_CTL_ERL_ARGS="-proto_dist inet6_tcp"

Обратите внимание, что rabbitmqctl и rabbitmq-server используют разные настройки erl: мне не удалось создать кластер без настройки RABBITMQ_CTL_ERL_ARGS="-proto_dist inet6_tcp" с помощью rabbitmqctl join_cluster [email protected]. Это не должно быть необходимо в производственном режиме. Также обратите внимание, что документация по настройке RabbitMQ не рекомендует использовать этот параметр, кроме как для отладки.

person Seer.The    schedule 07.03.2018

невозможно подключиться к epmd (порт 4369) на my_rabbit_2.my.domain.name: nxdomain (несуществующий домен)

Эта ошибка возникает, когда сервер rabbitmq работает на имени хоста, отличном от того, на котором, по вашему мнению, он работает, или когда hostname не разрешается так, как вы думаете.

Как ни странно, прошлой ночью у меня была точно такая же проблема, когда один экземпляр в нашем кластере вышел из строя, вернулся на новое имя хоста и каким-то образом повредил свое внутреннее хранилище аутентификации и т. д.

Без точных записей DNS и т. Д. Для вашей настройки все, что я могу предложить, — это общие шаги по устранению неполадок.

См. этот вопрос StackOverflow для решения, которое может вам помочь - в частности, ответ Кишора Павара.

Вы уверены, что настроили rabbitmq для прослушивания IPV6? Есть ли причина, по которой вы не можете привязать его к IPV4, а также на 127.0.0.1 для операций управления?

person mcfinnigan    schedule 06.03.2018
comment
netstat -lntu возвращает, что epmd прослушивает как 0.0.0.0:4369, так и :::4369, rabbitmq использует только IPv6 :::5672. Теперь я заметил интересный факт: порты управления только IPv4, это странно... - person Seer.The; 06.03.2018
comment
Причина, по которой я не могу использовать IPv4, заключается в том, что среда, которую я должен использовать, поддерживает только IPv6. - person Seer.The; 06.03.2018
comment
Часть, которую я не могу понять, заключается в том, что когда я проверяю захват DNS с помощью tcpdump -i my_interface udp port 53, я не вижу никаких запросов «AAAA», если я использую rabbitmqctl -n [email protected] status или что-то еще. На самом деле, «AAAA» нет, даже когда rabbitmq пытается подключиться к кластеру консула! Но когда я пытаюсь выполнить ping host.in.my.domain или nc -6vz host.in.my.domain 4369, возникает запрос «AAAA», и разрешение имени хоста работает нормально. - person Seer.The; 06.03.2018