RabbitMQ 不会集群(nxdomain)

Posted

技术标签:

【中文标题】RabbitMQ 不会集群(nxdomain)【英文标题】:RabbitMQ wont cluster (nxdomain) 【发布时间】:2018-08-12 21:47:35 【问题描述】:

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

rabbitmqctl join_cluster rabbit@my_rabbit_1.my.domain.namemy_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 不执行 2 种 DNS 查询:IPv6 的 AAAA 和 IPv4 地址的 A,但只有 IPv4 反复失败,nxdomain 因为没有可用的 IPv4 地址。但是,它不会尝试 AAAA DNS 查询,除非尝试运行像 rabbitmq -n rabbit@local.machine.domain.name 这样的命令:然后它会运行 AAAA 查询并成功输出。因此问题。我该如何解决?

【问题讨论】:

【参考方案1】:

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

这可以通过将以下行添加到您的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 建议不要使用此设置(调试除外)。

【讨论】:

【参考方案2】:

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

当 rabbitmq 服务器运行在您认为运行的主机名之外的主机名上时,或者当 hostname 无法解析为您认为的那样时,会引发此错误。

有趣的是,昨晚我遇到了同样的问题,当时我们集群中的一个实例出现故障,返回一个新的主机名,并以某种方式破坏了其内部身份验证存储等。

如果您的设置没有确切的 dns 条目等,我只能提供一般故障排除步骤。

请参阅this *** 问题以获得可能对您有所帮助的解决方案 - 特别是 Kishor Pawar 的回答。

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

【讨论】:

netstat -lntu 返回 epmd 监听 0.0.0.0:4369:::4369rabbitmq 仅使用 IPv6 :::5672。现在我注意到一个有趣的事实:管理端口只有 IPv4,这很奇怪...... 我不能使用IPv4的原因是我必须使用的环境只支持IPv6 我无法理解的部分是当我使用 tcpdump -i my_interface udp port 53 检查 DNS 捕获时,如果我使用 rabbitmqctl -n rabbit@host.in.my.domain status 或其他任何东西,我看不到任何“AAAA”查询。实际上,即使 rabbitmq 尝试连接到 consul 集群,也没有“AAAA”!但是当我尝试ping host.in.my.domainnc -6vz host.in.my.domain 4369 时,会出现“AAAA”查询并且主机名解析工作正常

以上是关于RabbitMQ 不会集群(nxdomain)的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ集群出现网络分区,可能会丢数据

RabbitMQ集群搭建

反向 DNS 不工作,未找到:3(NXDOMAIN)

DNS_PROBE_FINISHED_NXDOMAIN

Chrome DNS_PROBE_FINISHED_NXDOMAIN

单个网站的 DNS_PROBE_FINISHED_NXDOMAIN