更改 cookie 文件后 RabbitMQ 节点身份验证失败

Posted

技术标签:

【中文标题】更改 cookie 文件后 RabbitMQ 节点身份验证失败【英文标题】:RabbitMQ node authentification failed after changing cookie file 【发布时间】:2017-03-24 13:12:40 【问题描述】:

我有多个 RabbitMQ 节点在不同的机器上运行。安装每个节点后,我未能为每个节点指定一个通用 cookie,因此我不得不返回并手动更改文件 .erlang.cookie 。我的问题是,这样做之后,我收到了相互矛盾的错误消息。如果我做 rabbitmqctl status 我收到以下错误:

诊断

尝试联系:['rabbit@nc-mso-test01']

rabbit@nc-mso-test01: * 连接到 epmd (端口 4369) on nc-mso-test01 * epmd 报告节点“兔子”在端口 25672 上运行 * TCP 连接成功但 Erlang 分发失败

身份验证失败(被远程节点拒绝),请检查 Erlang cookie

当前节点详情: - 节点名称:'rabbitmq-cli-45@nc-mso-test01' - 主目录:C:\Users\jol - cookie 哈希:9/Hx6l+wLQv3NkmSDFqBog==

无论我调用什么脚本,都会遇到同样的错误。我尝试重新启动服务,通过rabbitmq-service删除和安装它。错误仍然存​​在。根据我从其他帖子中收集到的信息,原因可能是节点和 erlang 代理在不同的用户上运行,并且每个用户都有不同版本的 cookie,其中一个被旧版本卡住了。

如何让服务器和节点重启,让它们都使用新的cookie文件?

【问题讨论】:

【参考方案1】:

我解决了我的问题。我错过了 RabbitMQ 设置有两个 cookie 文件的事实,一个在 c:\Windows 中用于 erlang 组件,另一个在 C:\Users\%USER%。据我了解,如果 erlan VM 是在它自己的应用程序用户上启动的,而 RabbitMQ 节点是在另一个用户上启动的,这就是我的情况,那么这两个 cookie 文件是不同的,我必须在同步之前同步它们集群 cookie。

【讨论】:

消除 50/50 的机会...同步:复制 C:\Windows cookie 以覆盖 C:\Users\%USER% cookie rabbitmq.com/install-windows-manual.html,这里也描述了这个问题,给出了两个cookie的路径。 @William 是的,当有人问我有关 rabbitmq 的问题时,我得到的最根本的建议是“阅读文档至少 3 次”。我遇到的所有问题,我通过仔细阅读文档找到了解决方案。 也帮助了我。同步 cookie 后需要重启 RabbitMQ 服务器(如果不明显)。【参考方案2】:

文档说:

Windows 服务帐户使用的 cookie 文件和运行 CLI 工具的用户必须同步。 RabbitMQ-Clustering Guide

在从 20.2 开始的 Erlang 版本中,cookie 文件的位置是:

对于运行 CLI 工具的用户 - 通常是 C:\Users\%USERNAME%\.erlang.cookie 对于用户 %USERNAME% 对于 RabbitMQ Windows 服务 - %USERPROFILE%\.erlang.cookie (通常是C:\WINDOWS\system32\config\systemprofile

在 20.2 之前的 Erlang 版本(例如 19.3 或 20.1)上,cookie 文件的位置是:

对于运行 CLI 工具的用户 - 通常是 C:\Users\%USERNAME%\.erlang.cookie 对于用户 %USERNAME% 对于 RabbitMQ Windows 服务 - %WINDIR%\.erlang.cookie(通常是 C:\Windows\.erlang.cookie

【讨论】:

以上是关于更改 cookie 文件后 RabbitMQ 节点身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章

rabbitmq node join cluster

RabbitMQ cluster

更改文件描述符限制rabbitmq不起作用

认证失败(被远程节点拒绝),请检查 Erlang cookie

RabbitMQ-rabbitmqctl集群搭建

rabbitmq 启动问题整理