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.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
表明,在解析主机名时,rabbit
或 epmd
不执行 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"
请注意rabbitmqctl
和rabbitmq-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
和 :::4369
,rabbitmq
仅使用 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.domain
或nc -6vz host.in.my.domain 4369
时,会出现“AAAA”查询并且主机名解析工作正常以上是关于RabbitMQ 不会集群(nxdomain)的主要内容,如果未能解决你的问题,请参考以下文章