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】:

当您尝试解析主机名时,它们不区分大小写。例如,LOCALHOSTlocalhost 是同一个主机。

但是,当 Erlang 构造节点的名称时(例如,rabbit@<hostname> 在 RabbitMQ 的情况下),此名称区分大小写。所以rabbit@LOCALHOSTrabbit@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的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ 集群:无法连接到节点:nodedown

MongoDB 错误:连接到 mongo 副本集时无法到达集合 [set_name] 的主节点

无法从节点连接读取描述符:在 Windows 操作系统上使用 ChromeDriver Selenium 连接到系统的设备无法运行错误

由于 URI 错误,无法连接到 MongoDB

无法从另一台机器连接到 Geth 节点 RPC

无法连接到节点http:// localhost:8545