rabbitmqctl 错误:无法连接到节点 rabbit@myserver nodedown
Posted
技术标签:
【中文标题】rabbitmqctl 错误:无法连接到节点 rabbit@myserver nodedown【英文标题】:rabbitmqctl Error: unable to connect to node rabbit@myserver nodedown 【发布时间】:2014-10-14 02:25:00 【问题描述】:我在 Windows 2008 R2 上运行带有 Erlang OTP 17.1 的 RabbitMQ v3.3.5。我的 Dev 和 QA 环境是独立的。我的登台和生产环境是集群的。
我发现这个问题经常发生在运行 RabbitMQ 服务的地方,RabbitMQ 管理控制台可以看到所有内容,但是当我尝试从命令行运行 rabbitmqctl 时,它失败并显示节点已关闭(在本地尝试并在远程服务器上)。
如果我重新启动 Windows 服务,这个问题就解决了。
我在 RabbitMQ 错误日志中没有看到任何错误消息。最后一条消息表明节点已启动。
以下是我最近在暂存 Windows 集群的节点 2 上遇到的问题的示例输出:
PS C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.3.5\sbin> .\rabbitmqctl.bat status
Status of node rabbit@MYSERVER2 ...
Error: unable to connect to node rabbit@MYSERVER2: nodedown
DIAGNOSTICS
===========
attempted to contact: [rabbit@MYSERVER2]
rabbit@MYSERVER2:
* connected to epmd (port 4369) on MYSERVER2
* epmd reports: node 'rabbit' not running at all
no other nodes on MYSERVER2
* suggestion: start the node
current node details:
- node name: rabbitmqctl2199771@MYSERVER2
- home dir: C:\Users\RabbitMQ
- cookie hash: mn6OaTX9mS4DnZaiOzg8pA==
此时我重新启动 RabbitMQ 服务,然后再试一次
PS C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.3.5\sbin> .\rabbitmqctl.bat status
Status of node rabbit@MYSERVER2...
[pid,3784,
running_applications,
[rabbitmq_management_agent,"RabbitMQ Management Agent","3.3.5",
rabbit,"RabbitMQ","3.3.5",
os_mon,"CPO CXC 138 46","2.2.15",
mnesia,"MNESIA CXC 138 12","4.12.1",
xmerl,"XML parser","1.3.7",
sasl,"SASL CXC 138 11","2.4",
stdlib,"ERTS CXC 138 10","2.1",
kernel,"ERTS CXC 138 10","3.0.1"],
os,win32,nt,
erlang_version,
"Erlang/OTP 17 [erts-6.1] [64-bit] [smp:4:4] [async-threads:30]\n",
memory,
[total,35960208,
connection_procs,2704,
queue_procs,5408,
plugins,111936,
other_proc,13695792,
mnesia,102296,
mgmt_db,0,
msg_index,21816,
other_ets,884704,
binary,25776,
code,16672826,
atom,602729,
other_system,3834221],
alarms,[],
listeners,[clustering,25672,"::",amqp,5672,"::",amqp,5672,"0.0.0.0"],
vm_memory_high_watermark,0.4,
vm_memory_limit,3435787059,
disk_free_limit,50000000,
disk_free,74911649792,
file_descriptors,
[total_limit,8092,
total_used,4,
sockets_limit,7280,
sockets_used,2],
processes,[limit,1048576,used,139],
run_queue,0,
uptime,5]
...done.
知道是什么原因造成的以及如何自动检测这种情况吗?
这是在 Windows 上运行 RabbitMQ 的具体问题吗?
【问题讨论】:
我已确认错误消息中的 cookie 哈希与日志文件中上次成功重启服务的 cookie 哈希匹配,并且该哈希也与上一次成功重启服务的 cookie 哈希匹配其他节点。 有完全相同的问题。看起来讨论在邮件列表中继续groups.google.com/forum/#!topic/rabbitmq-users/Zn8unuF4bTM 是的,我将继续保持最新信息。到目前为止,我拥有的唯一更可靠的信息是,我能够确认当问题发生时,epmd.exe 进程没有在服务器上运行。我可以在 Windows 任务管理器中看到这一点。一旦我重新启动 RabbitMQ 服务,epmd.exe 进程就会生成并且一切正常。 我遇到了这个问题,通过这个方法解决了:***.com/questions/38523236/… 【参考方案1】:当您尝试解析主机名时,它们不区分大小写。例如,LOCALHOST
和 localhost
是同一个主机。
但是,当 Erlang 构造节点的名称时(例如,rabbit@<hostname>
在 RabbitMQ 的情况下),此名称区分大小写。所以rabbit@LOCALHOST
和rabbit@localhost
是两个不同的节点名,即使它们运行在同一个主机上。
最近,我们(RabbitMQ 团队)发现,on Windows, the node name constructed for RabbitMQ was inconsistent。因此,有时,作为 Windows 服务启动的 RabbitMQ 可以命名为 rabbit@MYHOST
,但 rabbitmqctl
会尝试访问 rabbit@myhost
并失败。
从RabbitMQ 3.6.0开始,节点名要一致。
【讨论】:
在 WIndows 10 Pro 上,rabbitmq 安装程序无法将 RabbitMQ 正确配置为服务。我必须运行rabbitmq-service remove
然后 rabbitmq-service install
才能正常工作。
嗨!你能把这个问题带到 rabbitmq-users 邮件列表吗? groups.google.com/forum/#!forum/rabbitmq-users
看起来问题仍然存在。它试图到达节点rabbit@<hostname>
,而我的系统主机名是小字符。这个问题有解决方案吗?或者有没有办法可以将主机名设置为大写,这能解决我的问题吗?【参考方案2】:
对于遇到此错误的其他人,这是我的修复。我安装了 Erlang,但忽略了设置环境变量的说明。
我正在阅读手动安装页面: https://www.rabbitmq.com/install-windows-manual.html 并发现以下内容:
将 ERLANG_HOME 设置为您实际放置 Erlang 安装的位置, 例如C:\Program Files\erlx.x.x(完整路径)。 RabbitMQ 批处理文件 期望执行 %ERLANG_HOME%\bin\erl.exe。
转到开始 > 设置 > 控制面板 > 系统 > 高级 > 环境变量。创建系统环境变量 ERLANG_HOME 并将其设置为目录的完整路径 包含 bin\erl.exe。
由于某种原因,自动安装为 ERLANG_HOME 变量分配了错误的路径名 - 请参见下图。我只是在最后添加了 \bin 。
【讨论】:
您的报价声明“RabbitMQ 批处理文件期望执行%ERLANG_HOME%\bin\erl.exe
”,因此ERLANG_HOME
应设置为包含 bin\erl.exe
的目录。您已经得出结论,ERLANG_HOME
应该设置为C:\Program Files (x86)\erl7.3\bin
,但扩展后会留下[...]\bin\bin\erl.exe
。对吗?
抱歉,不记得所有问题了。
我尝试了 \bin\erl.exe
和 \bin
并且都找不到返回路径或类似的东西,所以我想这不再是解决方案,或者至少不是 RabbitMQ 3.6和 erl 8.1【参考方案3】:
我在我的 linux 机器上遇到了类似的问题,并在这里发布了答案,因为 windows 上的 rabbitmq 可能会以类似的方式处理事情。
我的帖子和解决方法:rabbtimqadmin - Could not connect: [Errno -2] Name or service not known
核心问题是在配置 rabbitmq 后更改服务器名称。安装后,rabbitmq 引用服务器名称,使其成为其配置的一部分。我可以在 Windows 上看到这是一个类似的问题。
简而言之,你可以将服务器的名称改回你第一次安装rabbitmq时的名称,或者你可以添加一个rabbitmq-env.conf
文件,我不确定它在windows中的位置,但下面给出了详细信息linux:https://www.rabbitmq.com/man/rabbitmq-env.conf.5.man.html
请注意,在 linux 上,服务器的名称是 CaSe SENiTivE!因此,您可能会也可能不会遇到与 Windows 类似的问题。
希望这会有所帮助,祝你好运!
【讨论】:
我发现 epmd 进程正在停止,这最终导致了问题的发生。当我重新启动服务时,该进程重新打开,一切都开始工作了。所以我最终创建了一个服务监视器,它不仅检查以确保 RabbitMQ 服务正在运行,而且还确保 epmd 进程正在运行。如果其中任何一个失败,它会提醒我并重新启动 RabbitMQ 服务。【参考方案4】:如果您使用的是 linux,请尝试更改 /var/lib/rabbitmq/mnesia 文件夹的权限。
【讨论】:
是755
,怎么处理呢?以上是关于rabbitmqctl 错误:无法连接到节点 rabbit@myserver nodedown的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB 错误:连接到 mongo 副本集时无法到达集合 [set_name] 的主节点
无法从节点连接读取描述符:在 Windows 操作系统上使用 ChromeDriver Selenium 连接到系统的设备无法运行错误