Erlang:以编程方式启动远程节点

Posted

技术标签:

【中文标题】Erlang:以编程方式启动远程节点【英文标题】:Erlang: starting a remote node programmatically 【发布时间】:2011-06-18 17:35:33 【问题描述】:

我知道节点可以从 shell 启动。我正在寻找的是一种从模块内启动远程节点的方法。我已经搜索过,但什么也没找到。

感谢任何帮助。

【问题讨论】:

【参考方案1】:

有一个pool(3) 设施:

pool 可以用来运行一组 Erlang 节点作为一个池 计算处理器。它是 组织为一个主人和一组 从节点..

pool:start/1,2 启动一个新池。 文件.hosts.erlang 被读取到 查找池节点所在的主机名 可以启动。从节点是 以slave:start/2,3 开头, 传递Name,如果提供, ArgsName 用作第一个 部分节点名称,使用Args 指定命令行参数。

使用池,您可以免费获得负载分配设施。

主节点可以这样启动:

erl -sname poolmaster -rsh ssh

此处的密钥-rsh 指定了rsh 的替代方法,用于在远程主机上启动从节点。我们在这里使用了 SSH。确保您的机器具有有效的 SSH 密钥,并且您可以使用这些密钥对远程主机进行身份验证。

如果文件.hosts.erlang中没有主机,则不启动从节点,如果需要,您可以使用slave:start/2,3手动启动从节点并传递参数。

例如,您可以启动一个远程节点:

Arg = "-mnesia_dir " ++ M,
slave:start(H, Name, Arg).

确保epmd(1) 在远程机器上启动并运行,以便启动 Erlang 节点。

希望对您有所帮助。

【讨论】:

【参考方案2】:

更底层的池是slave(3) 模块。 Pool 建立在 slave 的功能之上。

使用slave:start 启动一个新的从站。

您可能还应该在命令行中指定-rsh ssh

因此,如果您需要它提供的那种功能,请使用 pool,如果您需要不同的东西,您可以自己从 slave 构建它。

【讨论】:

以上是关于Erlang:以编程方式启动远程节点的主要内容,如果未能解决你的问题,请参考以下文章

启动远程 Erlang 节点

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

在erlang中向远程节点端口发送消息

rabbitmq集群部署及配置

RabbitMQ消息队列集群

远程节点保持进程活着