RabbitMQ不会集群(nxdomain)

时间:2018-03-05 09:25:51

标签: dns rabbitmq rabbitmqctl epmd

我想设置2个rabbitmq服务器在群集中工作。 什么时候试图运行

rabbitmqctl join_cluster rabbit@my_rabbit_1.my.domain.name

上的

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表明,在解析主机名时,rabbitepmd不执行两种类型的DNS查询:AAAA代表IPv6,A代表IPv4地址,但只有IPv4重复失败{ {1}}因为没有可用的IPv4地址。但是,它不会尝试AAAA DNS查询,除非尝试运行nxdomain之类的命令:然后它运行AAAA查询并成功输出。因此问题。我该如何解决?

2 个答案:

答案 0 :(得分:0)

  

无法连接到my_rabbit_2.my.domain.name上的epmd(端口4369):nxdomain(不存在的域)

当rabbitmq服务器运行在您认为正在运行的主机名以外的主机名上,或者hostname没有解析为您的想法时,这是一个错误。

有趣的是,昨晚当我们集群中的一个实例失败时,我又回到了一个新的主机名,并以某种方式破坏了它的内部认证存储等。

如果您的设置没有确切的dns条目等,我可以提供的只是常规故障排除步骤。

请参阅this StackOverflow问题,了解可能对您有所帮助的问题 - 特别是Kishor Pawar的回答。

你确定你配置了rabbitmq来监听IPV6吗?您是否有理由将其绑定到IPV4以及127.0.0.1以进行管理操作?

答案 1 :(得分:0)

终于找到了对我有用的解决方案。 Erlang documentation表示,默认情况下,-proto_dist指定Erlang分发的协议,默认为inet_tcp(TCP over IPv4)。因此,在仅限IPv6的环境中,您必须为-proto_dist inet6_tcp设置erl标记。

可以通过在rabbitmq-env.conf添加以下内容来完成此操作(请参阅RabbitMQ configuration docs):

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

请注意rabbitmqctlrabbitmq-server使用不同的erl设置:我无法使用RABBITMQ_CTL_ERL_ARGS="-proto_dist inet6_tcp"设置rabbitmqctl join_cluster rabbit@host.in.my.domain设置群集。在生产模式中不应该这样。另请注意RabbitMQ configuration docs建议不要使用此设置,除了调试。