17

我在 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 的具体问题吗?

4

4 回答 4

10

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

然而,当 Erlang 构造一个节点的名称时(例如rabbit@<hostname>,在 RabbitMQ 的情况下),这个名称是区分大小写的。所以rabbit@LOCALHOSTrabbit@localhost是两个不同的节点名称,即使它们在同一主机上运行。

最近,我们(RabbitMQ 团队)发现,在 Windows 上,为 RabbitMQ 构建的节点名称不一致。因此,有时,作为 Windows 服务启动的 RabbitMQ 可能会被命名rabbit@MYHOSTrabbitmqctl会尝试访问rabbit@myhost并失败。

从 RabbitMQ 3.6.0 开始,节点名称要保持一致。

于 2016-03-22T16:03:44.993 回答
2

对于其他遇到此错误的人,这是我的解决方法。我安装了 Erlang,但忽略了设置环境变量的说明。

我正在阅读手动安装页面: https ://www.rabbitmq.com/install-windows-manual.html 并发现以下内容:

将 ERLANG_HOME 设置为您实际放置 Erlang 安装的位置,例如 C:\Program Files\erlx.xx(完整路径)。RabbitMQ 批处理文件期望执行 %ERLANG_HOME%\bin\erl.exe。

转到开始 > 设置 > 控制面板 > 系统 > 高级 > 环境变量。创建系统环境变量 ERLANG_HOME 并将其设置为包含 bin\erl.exe 的目录的完整路径。

出于某种原因,自动安装为 ERLANG_HOME 变量分配了错误的路径名 - 请参见下图。我只是在最后添加了 \bin 。 在此处输入图像描述

于 2016-05-11T13:32:20.700 回答
1

我在我的 linux 机器上遇到了类似的问题,并在这里发布了答案,因为 windows 上的 rabbitmq 可能会以类似的方式处理事情。

我的帖子和解决方案:rabbtimqadmin - 无法连接:[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 类似的问题。

希望这会有所帮助,祝你好运!

于 2015-04-07T22:41:34.793 回答
0

如果您使用的是 linux,请尝试更改 /var/lib/rabbitmq/mnesia 文件夹的权限。

于 2017-04-03T10:56:28.960 回答