【问题标题】:RabbitMQ, Erlang: How to "make sure the erlang cookies are the same"RabbitMQ,Erlang:如何“确保 erlang cookie 相同”
【发布时间】:2012-03-29 05:06:25
【问题描述】:

我正在使用带有 Grails 的 RabbitMQ,今天早上出现了一个问题。当我运行rabbitmqctl status 它告诉我:

C:\Users\BuildnTest2>rabbitmqctl status
Status of node 'rabbit@BUILDNTEST2-PC' ...
Error: unable to connect to node 'rabbit@BUILDNTEST2-PC': nodedown diagnostics:
- nodes and their ports on BUILDNTEST2-PC: [{rabbit,49164},
                                        {rabbitmqctl27693,49286}]
- current node: 'rabbitmqctl27693@BuildnTest2-PC'
- current node home dir: C:\Users\BuildnTest2
- current node cookie hash: cSYB8tsT4mGGZHSUGQi08w==

当我去找兔子troubleshooting page 时,他们说:

then you should make sure the Erlang cookies are the same.

这是什么意思,它是如何实现的?

谷歌搜索发现这个论坛thread声称有解决此问题的说明,但可惜它只是重定向回没有答案的兔子网站。

【问题讨论】:

  • 检查节点 home dir 并为每个节点修改一个名为 .erlang.cookie 的文件并让该文件包含相同的值,例如echo mycookie > $NODE_HOME_DIR/.erlang.cookie 每个节点。
  • 如果人们没有运行集群,他们可能有兴趣阅读this very similar issue

标签: cookies erlang rabbitmq


【解决方案1】:

就我而言,出于某种原因,存储在 C:\Windows\ 下的 cookie (.erlang.cookie) 与我存储在我家下的 cookie (%HOMEDRIVE% %HOMEPATH%,对我来说是 C:\) 不同。

一旦我将 cookie 从 C:\Windows 复制到我的主文件夹中,一切都开始工作了。

【讨论】:

【解决方案2】:

不管怎样,在 2018 年,文档是错误的。在 Windows 10 中,cookie 文件的默认位置似乎是:

C:\Windows\System32\config\systemprofile

不是

C:\Windows

正如文档所说。

最好的办法是查看日志文件,该文件通常位于您的用户%AppData%\Roaming\RabbitMQ\log 目录中。

日志文件包含这个条目,它帮助我确定了 cookie 的位置:

node           : rabbit@computername
home dir       : C:\WINDOWS\system32\config\systemprofile

【讨论】:

  • 是的,这适用于我遇到同样问题的 Windows 10。
  • 这绝对是 Windows 10 的问题,而不是升级到 Erlang 20.2 的结果吗?来自rabbitmq.com/clustering.html:对于 RabbitMQ Windows 服务 - %USERPROFILE%\\.erlang.cookie(通常是 C:\\WINDOWS\\system32\\config\\systemprofile)
  • 同样适用于2008R2,我通过chocolatey同时安装了erlang(20.3)和rabbitmq(3.7.3)。
  • 可以确认这也是 Windows Server 2016 中 cookie 的正确位置。
  • rabbitmqctl status 正在返回 身份验证失败(被远程节点拒绝)effective user's home directory: C:\Users\Administrator 我将 .erlang 复制到 C:\WINDOWS\system32\config\systemprofile 并且它有效。
【解决方案3】:

对于那些在谷歌上搜索的人,当您在环境配置中缺少 HOME 参数时,可能会发生同样的 erlang cookie 错误。例如,在默认 ArchLinux 安装的 rabbitmq 上。

在这种情况下,服务以systemctl start rabbitmq 启动并生成一个cookie,但像rabbitmqctl status 这样的cli 工具将无法开箱即用,因为它们不知道主位置。

默认 /etc/rabbitmq/rabbitmq-env.conf

NODENAME=rabbit
NODE_IP_ADDRESS=0.0.0.0
NODE_PORT=5672

LOG_BASE=/var/log/rabbitmq
MNESIA_BASE=/var/lib/rabbitmq/mnesia

修改 /etc/rabbitmq/rabbitmq-env.conf

NODENAME=rabbit
NODE_IP_ADDRESS=127.0.0.1
NODE_PORT=5672

HOME=/var/lib/rabbitmq
LOG_BASE=/var/log/rabbitmq
MNESIA_BASE=/var/lib/rabbitmq/mnesia

参考https://bbs.archlinux.org/viewtopic.php?id=191587

【讨论】:

  • 这是正确答案。非常感谢,你让我免于痛苦。
【解决方案4】:

RabbitMQ 网站上您的具体问题的最终答案是http://www.rabbitmq.com/clustering.html

但是,从您的状态转储来看,这似乎不是您的问题。看起来好像您的节点已关闭。假设您没有运行集群,我是否正确?您无法连接到的节点与您从中运行命令的节点相同这一事实表明了这一点。

如果 RabbitMQ 服务正在运行,则运行 rabbitmqctl start 如果它没有运行,则转到服务并启动它,然后执行上述操作。 erlang cookie 与非集群配置无关。

【讨论】:

  • 啊,所以服务可以在不运行兔子的情况下运行?
  • 确实如此。该服务是 RabbitMQ 服务器的主机,可以启动和停止。很像 IIS 和其中的托管网站。
【解决方案5】:

在运行erlang进程的用户的home目录下,有一个隐藏文件.erlang.cookie。它包含负责 erlang 集群拓扑的字符串。确保字符串 (cookie) 在您要连接的所有节点中都相同。如果没有 cookie,则创建一个。

【讨论】:

  • 我尝试过,但仍然验证失败...但仅在我的机架空间虚拟机上
【解决方案6】:

同步 Erlang Cookies(运行手动安装的 Windows 服务时) 服务帐户和运行 rabbitmqctl.bat 的用户使用的 Erlang 安全 Cookie 必须同步才能使 rabbitmqctl.bat 正常工作。 要确保 Erlang cookie 文件包含相同的字符串,请从 Windows 目录(通常为 C:\WINDOWS.erlang.cookie)复制 .erlang.cookie 文件以替换用户 .erlang.cookie。用户 cookie 将位于用户的主目录 (%HOMEDRIVE%%HOMEPATH%),例如C:\Documents and Settings\%USERNAME%.erlang.cookie 或 C:\Users\%USERNAME%.erlang.cookie(Windows Vista 及更高版本)。

https://www.rabbitmq.com/install-windows-manual.html

【讨论】:

    【解决方案7】:

    我将 cookie 从 C:\Windows 复制到我的主文件夹 (C:\Users\Current User\.erlang.cookie) 中,一切正常。

    【讨论】:

      【解决方案8】:

      如果你在 OSX 上运行 MacPorts 版本的 rabbitmq-server,你需要检查 ~rabbitmq/.erlang.cookie 文件。它必须与/opt/local/var/lib/rabbitmq/.erlang.cookie中的匹配,否则“rabbitmqctl”无法连接。

      【讨论】:

        【解决方案9】:

        我试图集群,即使 cookie 匹配它也对我不起作用......最终唯一起作用的是在我的环境变量中设置 ERLANG_HOME 变量。

        设置后,我可以将 cookie 从我的主代理复制到我想要集群的那个,并且加入工作正常。

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

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

        https://www.rabbitmq.com/install-windows-manual.html

        【讨论】:

          【解决方案10】:

          确保 rabbitmq erlang.cookie 与你的用户目录中的 erlang.cookie 匹配:

          rabbitmq erlang cookie...

          ...通常位于 /var/lib/rabbitmq/.erlang.cookie 上 Unix 系统和 C:\Users\Current User.erlang.cookie 或 C:\Documents 和 Windows 系统上的 Settings\Current User.erlang.cookie。 (http://www.rabbitmq.com/clustering.html#setup)

          确保与 ~/.erlang.cookie 匹配。

          【讨论】:

            【解决方案11】:

            当克隆服务器通过名称更改激活时,我观察到了这个问题。干净的rabbitmq和erlang安装后问题解决了。

            【讨论】:

              猜你喜欢
              • 2018-09-22
              • 2018-06-17
              • 2020-03-06
              • 2014-02-10
              • 1970-01-01
              • 2014-07-17
              • 2018-04-05
              • 2017-07-29
              • 2015-12-05
              相关资源
              最近更新 更多