我在Windows 2008 R2上运行带有Erlang OTP 17.1的RabbitMQ v3.3.5。我的Dev和QA环境是独立的。我的分段和生产环境已经聚集在一起。
我发现RabbitMQ服务正在运行时经常发生这一问题,RabbitMQ管理控制台正在查看所有内容,但是当我尝试从命令行运行rabbitmqctl时,它会失败,并显示该节点已关闭的错误(在本地尝试)并在远程服务器上。)
如果我重新启动Windows服务,则会解决此问题。
我在RabbitMQ错误日志中看不到任何错误消息。最后一条消息表明节点已启动。
以下是我最近在登台窗口群集的节点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的问题?
答案 0 :(得分:9)
当您尝试解析主机名时,主机名不区分大小写。例如,LOCALHOST
和localhost
是同一个主机。
但是,当Erlang构造节点的名称时(例如,在RabbitMQ的情况下为rabbit@<hostname>
),此名称区分大小写。因此,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起,节点名称应保持一致。
答案 1 :(得分: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。
转到开始&gt;设置&gt;控制面板&gt;系统&gt;高级&gt; 环境变量。创建系统环境变量 ERLANG_HOME并将其设置为目录的完整路径 包含bin \ erl.exe。
答案 2 :(得分:1)
我的linux盒子上有类似的问题,我在这里发布了答案,因为windows上的rabbitmq可能会处理类似的问题。
我的帖子和解决方案:rabbtimqadmin - Could not connect: [Errno -2] Name or service not known
核心问题是在配置rabbitmq后更改servername。安装后,rabbitmq引用服务器名称,使其成为其配置的一部分。我可以在Windows上看到这是一个类似的问题。
简而言之,您可以将服务器名称更改回您第一次安装rabbitmq时的名称,或者您可以添加rabbitmq-env.conf
文件,我不确定它的位置windows,但以下提供了linux的详细信息:https://www.rabbitmq.com/man/rabbitmq-env.conf.5.man.html
请注意,在linux上,服务器的名称是CaSe SENiTivE!因此,您可能会或可能不会遇到与Windows类似的问题。
希望这会有所帮助并祝你好运!
答案 3 :(得分:0)
如果您使用的是linux,请尝试更改/ var / lib / rabbitmq / mnesia文件夹的权限。