我想设置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
不执行两种类型的DNS查询:AAAA代表IPv6,A代表IPv4地址,但只有IPv4重复失败{ {1}}因为没有可用的IPv4地址。但是,它不会尝试AAAA DNS查询,除非尝试运行nxdomain
之类的命令:然后它运行AAAA查询并成功输出。因此问题。我该如何解决?
答案 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"
请注意rabbitmqctl
和rabbitmq-server
使用不同的erl
设置:我无法使用RABBITMQ_CTL_ERL_ARGS="-proto_dist inet6_tcp"
设置rabbitmqctl join_cluster rabbit@host.in.my.domain
设置群集。在生产模式中不应该这样。另请注意RabbitMQ configuration docs建议不要使用此设置,除了调试。