【问题标题】:Erlang Observer crashes when connecting to remote nodeErlang Observer 在连接到远程节点时崩溃
【发布时间】:2013-11-29 09:37:51
【问题描述】:

按照本教程,我使用 rebar 创建了一个简单的 erlang 版本:http://www.metabrew.com/article/erlang-rebar-tutorial-generating-releases-upgrades

我可以通过进入 dummynode/bin 文件夹并运行来安装和启动 dummynode:

dummynode install
dummynode start

在 vm.args 文件中,我将节点名称设置为 dummynode@192.168.1.129

当我启动另一个节点时:

erl -name cole@192.168.1.129 -setcookie dummynode

然后我可以启动 erlang 观察者。在“节点”菜单中,我看到列出了 dummynode 节点,但是当我尝试连接时,观察者崩溃了。

我无法确定故障转储文件的开头或结尾,但似乎 erlang 正在抱怨未启用分发。

我无法使用 net_adm:ping/1 连接节点,也无法弄清楚为什么观察者至少能够看到分离的 dummynode 节点。

谁能解释我如何连接到 dummynode 节点?

更新:我已确认两个节点上的 cookie 相同。此外,AFAICT rebar 正在将观察者及其所有依赖项打包到版本中。

【问题讨论】:

    标签: erlang distributed


    【解决方案1】:

    谜团解开了!这既不是 cookie 也不是依赖问题。生成的 vm.args 文件有一行:

    -name dummynode@127.0.0.1

    你认为这意味着如果我将节点名称更改为类似

    -name mynode@mydomain.com

    然后 rebar 将使用标志启动运行时:

    erl -name mynode@mydomain.com

    事实并非如此。事实证明,即使您调整节点名称,rebar always 也会使用 -sname 标志调用运行时(至少在 Windows 上)。如果您想将集群分布在物理机上(使用带有-name 标志的长名称),您需要编辑生成的bin\dummynode.cmd 文件,并将所有-sname 标志更改为-name

    我已向钢筋团队提出问题,但我不知道他们是否认为这是一个错误。

    【讨论】:

      【解决方案2】:

      Observer 需要在远程节点上安装一些模块才能运行。如果它们没有出现在那里,它会静默地崩溃。我不记得是哪一个了,所以您必须进行试验,然后在您的目标发行版中添加一些应用程序要求。

      【讨论】:

      • 是的,理论上,rebar 已经打包了正确的依赖项(我可以在部署包中看到观察者应用程序和其他一些东西),但我还没有那么自信:P
      • 是的,理论上。但实际上,存在错误的依赖关系。
      【解决方案3】:

      如果您无法使用 net_adm:ping/1 连接,请检查两个节点是否具有相同的 cookie (erlang:get_cookie/0)。

      两个节点必须具有相同的 cookie 才能形成分布式系统,但观察者至少可以向您显示您机器上存在的所有节点,即使它们没有相同的 cookie。

      【讨论】:

      • 是的,我已经检查过了。我确定 cookie 是相同的(节点都在我的本地计算机上运行,​​因此很容易验证)。
      猜你喜欢
      • 2016-07-09
      • 2011-01-23
      • 2017-03-18
      • 2021-07-05
      • 1970-01-01
      • 2013-04-16
      • 2011-03-11
      • 2019-07-19
      • 2017-12-16
      相关资源
      最近更新 更多