RabbitMQ 不会集群(nxdomain)
RabbitMQ wont cluster (nxdomain)
我想设置 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
是一样的,hosts解析的很好:我可以ping
两个方向,nmap -6 -p 4369 my_rabbit_2.my.domain.nam
returns4369/tcp open epmd
编辑:
tcpdump
表明在解析主机名时,rabbit
或 epmd
不执行 2 种类型的 DNS 查询:IPv6 的 AAAA 和 IPv4 地址的 A,但只有 IPv4 反复失败nxdomain
因为没有可用的 IPv4 地址。但是,它不会尝试 AAAA DNS 查询,除非尝试 运行 命令,如 rabbitmq -n rabbit@local.machine.domain.name
:然后它 运行s AAAA 查询并成功输出。因此问题。我该如何解决?
unable to connect to epmd (port 4369) on my_rabbit_2.my.domain.name: nxdomain (non-existing domain)
这是一个错误,当 rabbitmq 服务器 运行 在一个主机名上而不是你认为的 运行 上,或者当 hostname
没有解析到什么你认为是的。
有趣的是,昨晚我遇到了这个完全相同的问题,当时我们集群中的一个实例失败,返回一个新的主机名,并以某种方式破坏了它的内部身份验证存储等。
如果您的设置没有确切的 dns 条目等,我只能提供一般的故障排除步骤。
请参阅 this Whosebug 问题以获得可能对您有帮助的解决方案 - 特别是 Kishor Pawar 的回答。
您确定将 rabbitmq 配置为侦听 IPV6 吗?有什么原因不能在 127.0.0.1
上将它绑定到 IPV4 以进行管理操作?
终于找到适合我的解决方案。 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
设置:如果没有使用 rabbitmqctl join_cluster rabbit@host.in.my.domain
的 RABBITMQ_CTL_ERL_ARGS="-proto_dist inet6_tcp"
设置,我无法创建集群。在生产模式下应该没有必要。另请注意,RabbitMQ configuration docs 建议不要使用此设置,调试除外。
我想设置 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
是一样的,hosts解析的很好:我可以ping
两个方向,nmap -6 -p 4369 my_rabbit_2.my.domain.nam
returns4369/tcp open epmd
编辑:
tcpdump
表明在解析主机名时,rabbit
或 epmd
不执行 2 种类型的 DNS 查询:IPv6 的 AAAA 和 IPv4 地址的 A,但只有 IPv4 反复失败nxdomain
因为没有可用的 IPv4 地址。但是,它不会尝试 AAAA DNS 查询,除非尝试 运行 命令,如 rabbitmq -n rabbit@local.machine.domain.name
:然后它 运行s AAAA 查询并成功输出。因此问题。我该如何解决?
unable to connect to epmd (port 4369) on my_rabbit_2.my.domain.name: nxdomain (non-existing domain)
这是一个错误,当 rabbitmq 服务器 运行 在一个主机名上而不是你认为的 运行 上,或者当 hostname
没有解析到什么你认为是的。
有趣的是,昨晚我遇到了这个完全相同的问题,当时我们集群中的一个实例失败,返回一个新的主机名,并以某种方式破坏了它的内部身份验证存储等。
如果您的设置没有确切的 dns 条目等,我只能提供一般的故障排除步骤。
请参阅 this Whosebug 问题以获得可能对您有帮助的解决方案 - 特别是 Kishor Pawar 的回答。
您确定将 rabbitmq 配置为侦听 IPV6 吗?有什么原因不能在 127.0.0.1
上将它绑定到 IPV4 以进行管理操作?
终于找到适合我的解决方案。 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
设置:如果没有使用 rabbitmqctl join_cluster rabbit@host.in.my.domain
的 RABBITMQ_CTL_ERL_ARGS="-proto_dist inet6_tcp"
设置,我无法创建集群。在生产模式下应该没有必要。另请注意,RabbitMQ configuration docs 建议不要使用此设置,调试除外。