Erlang:不允许的节点/也许 Cookie 问题

Posted

技术标签:

【中文标题】Erlang:不允许的节点/也许 Cookie 问题【英文标题】:Erlang : Disallowed Nodes / Maybe Cookie question 【发布时间】:2010-10-01 21:11:21 【问题描述】:

试图让两个 erlang 节点相互通信:一个在 Ubuntu 机器上,一个在 Windows XP 上。

我们收到“来自不允许节点的连接尝试”消息,该消息阻止一个节点接收来自另一个节点的消息。

他们都使用 5.XXX 版本的 Erlang OTP。

两个节点都有相同的 cookie (.erlang.cookie)

我们开始接收节点:

erl -name fred@ipaddress

并使用“fred@ipaddress”(单引号)对其调用函数

我们已关闭防火墙。

那么还有什么可能会阻止连接?

更新:我们使用 erlang:get_cookie() 来检查两个节点上的 cookie,并且值不同。这就是问题所在。我们认为我们通过将相同的 .erlang.cookie 文件放在我们在两台机器上运行 erlang 的目录中来设置 cookie。但也许这是错误的地方?

更新2:感谢大家的回答。我们选择 Ranok 作为我们的答案,因为它对我们很有效。我相信一些设置 cookie 的替代方法也可以。

【问题讨论】:

【参考方案1】:

另外,当你启动 Erlang 系统时,有一个命令行标志 -setcookie 可以让你在启动时指定 cookie。

erl -name fred@ipaddress -setcookie FOOBAR

希望对您有所帮助, 雅各布

【讨论】:

【参考方案2】:

首先检查每个节点的 cookie。从外壳:

erlang:get_cookie().

如果它们不相同,则更改节点的其中一个 cookie 以匹配另一个:

erlang:set_cookie(node(), "newcookie").

如果一切正常,您需要查看为什么没有从配置文件或命令行参数中选择 cookie 设置。

【讨论】:

不应该从erl而不是shell运行吗?【参考方案3】:

Erlang cookie 应该在 users 目录中。不是应用程序目录。

所以你的是这样的:

C:\Documents and Settings\InterstarUser\.erlang.cookie

如果我没记错的话,你可以在命令行中使用命令env 查看 HOME 的位置。

【讨论】:

【参考方案4】:

net_adm:ping()

从两个节点尝试 net_adm:ping()。

http://www.erlang.org/documentation/doc-5.4.13/lib/kernel-2.10.13/doc/html/net_adm.html

【讨论】:

【参考方案5】:
erlang:set_cookie(node(), 'newcookie').

不是

erlang:set_cookie(node(), "newcookie").

【讨论】:

【参考方案6】:

我想到了几件事:

    您是否尝试过在两个节点上通过 erlang:set_cookie 设置 cookie? 如果在 $HOME 目录中没有找到 .erlang.cookie 文件,将创建一个。可能是 .erlang.cookie 文件之一不在一台机器上的正确位置?您可以在硬盘驱动器中搜索该文件,如果找到的文件不止您创建的文件,erlang 可能已将其放在那里并正在使用它。

【讨论】:

以上是关于Erlang:不允许的节点/也许 Cookie 问题的主要内容,如果未能解决你的问题,请参考以下文章

Erlang 通过 cookie 提供的安全性是不是足够?

rabbitmq node join cluster

使用 unix 批处理自动化 Erlang shell 节点

RabbitMQ概念及环境搭建RabbitMQ cluster

Erlang Mnesia数据库迁移方法

基于 Erlang 的聊天(负载平衡和通知分发)