erlang 如何使用Rebar运行分布式应用程序?

qcuzuvrc  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(202)

我有一个应用程序,我想运行分布在两个节点上(一个主节点和一个故障转移节点)。
每个节点都有两个配置文件。
现在,我使用以下命令在两个节点上运行应用程序:

rebar3 shell --sname a --config a 
rebar3 shell --sname b --config b

问题是应用程序在两个节点上启动,因为我认为在发出rebar命令时它们没有预先连接。

配置文件

第一次
在使用rebar shell时/之后连接节点的策略是什么?是否有任何方法创建脚本或其他东西?
我只想连接节点,但只有主节点启动时应用程序启动,而第二个节点在第一个节点崩溃时接管。

2nbm6dog

2nbm6dog1#

要连接两个或多个节点,您还需要为每个节点设置相同的cookie。然后通过net_adm:ping/1 ping这些节点。下面是一个示例(预计终端将同时启动):

1号航站楼:

$ ./rebar3 shell --sname a --setcookie test
Erlang/OTP 24 [erts-12.1.5] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1]

Eshell V12.1.5  (abort with ^G)
(a@pc)1> nodes().
[]

2号航站楼:

$ ./rebar3 shell --sname b --setcookie test
Erlang/OTP 24 [erts-12.1.5] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1]

Eshell V12.1.5  (abort with ^G)
(b@pc)1> nodes().
[]

如您所见,当您运行它时-我们没有任何节点。现在让我们尝试使用net_adm:ping/1来连接它们。Terminal #1:

$ ./rebar3 shell --sname a --setcookie test
Erlang/OTP 24 [erts-12.1.5] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1]

Eshell V12.1.5  (abort with ^G)
(a@pc)1> nodes().
[]
(a@pc)2> net_adm:ping('b@pc').
pong
(a@pc)3> nodes().
[b@pc]

2号航站楼:

$ ./rebar3 shell --sname b --setcookie test
Erlang/OTP 24 [erts-12.1.5] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1]

Eshell V12.1.5  (abort with ^G)
(b@pc)1> nodes().
[a@pc]

另外,我想你可以加入https://erlangforums.com/-在Erlang社区论坛中,你可以很快找到任何与Erlang/OTP相关的问题的答案。P.S.名称和cookie也可以通过vm.args file设置。

相关问题