1

我想设置 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也是一样,hosts解析很好:我可以ping双向,nmap -6 -p 4369 my_rabbit_2.my.domain.nam返回4369/tcp open epmd

编辑:

tcpdump表明在解析主机名时,rabbit或者epmd不执行两种类型的 DNS 查询:IPv6 的 AAAA 和 IPv4 地址的 A,但只有 IPv4 重复失败,nxdomain因为没有可用的 IPv4 地址。但是,它不会尝试 AAAA DNS 查询,除非尝试运行如下命令rabbitmq -n rabbit@local.machine.domain.name:然后它会运行 AAAA 查询并成功输出。因此问题。我该如何解决?

4

2 回答 2

1

终于找到了对我有用的解决方案。Erlang 文档说,默认情况下,-proto_dist指定 Erlang 分发的协议,默认为inet_tcp(TCP over IPv4)。因此,在纯 IPv6 环境中,您必须-proto_dist inet6_tcperl.

这可以通过将以下几行添加到您的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"

请注意rabbitmqctlrabbitmq-server使用不同的erl设置:如果不RABBITMQ_CTL_ERL_ARGS="-proto_dist inet6_tcp"使用rabbitmqctl join_cluster rabbit@host.in.my.domain. 在生产模式下应该没有必要。另请注意,RabbitMQ 配置文档建议不要使用此设置,但调试除外。

于 2018-03-07T09:23:22.273 回答
0

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

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

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

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

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

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

于 2018-03-06T10:30:05.853 回答