多个erlang应用程序多台计算机和其他一些问题的脚本

Posted

技术标签:

【中文标题】多个erlang应用程序多台计算机和其他一些问题的脚本【英文标题】:Script for multiple erlang applications multiple computers and some other questions 【发布时间】:2020-11-01 16:35:46 【问题描述】:

我有两个 Erlang 应用程序,例如 app1app2。当每个节点都有自己的配置文件时,我想在三个节点上运行它们。 另外,我需要在app2 之前运行app1app1 必须在每个节点上运行。 app2是所有节点的同一个程序,但只有一个节点同时运行;其他节点等待当前节点失败的情况。

运行示例:

节点 1:

erl -sname cp1 config cp1
application:start(app1).
application:start(app2).

节点 2:

erl -sname cp2 config cp2
application:start(app1).
application:start(app2).

节点 3:

erl -sname cp3 config cp3
application:start(app1).
application:start(app2).

由于配置文件中的同步时间(我将此参数设置为10000),所有节点都需要一起启动,app2也是如此。 为了检查我的程序是否按我的意愿工作,我自己做,这很简单:我可以控制时间,我打开一个带有 3 个终端的终结器,复制粘贴到命令,一切正常。

我的问题是: 我有3台电脑。我需要一个节点用于一台计算机。如何为每台自动执行的计算机编写脚本? 我可以将 Erlang 命令插入 bash 脚本吗?最好的方法是什么? 我该如何处理同步问题?我可以将同步时间设置为无穷大吗?

cp1 代码:(其他相同,只是必须同步更改)

[kernel,
  [distributed, [app2, 2000, [cp1@dev1, cp2@dev1, cp3@dev1]
    ],
   sync_nodes_mandatory, [cp2@dev1, cp3@dev1],
   sync_nodes_timeout, 10000
  ]
 
].

app2.app 代码:

application, app2,
 [description, "An OTP application",
  vsn, "0.1.0",
  registered, [],
  mod, app2_app, [],
  applications,
   [kernel,
    stdlib,
    app1
   ],
  env,[],
  modules, [],

  licenses, ["Apache 2.0"],
  links, []
 ].

【问题讨论】:

【参考方案1】:

我有 3 台计算机,1 台计算机需要 1 个节点。如何写一个 自动执行它的每台计算机的脚本?

我建议使用工具生成版本,例如rebar3,该版本包含一个启动脚本,该脚本使用配置文件启动节点。 我还建议在您的情况下激活-heart flag,或者将版本安装为systemd 服务。

我可以在 bash 脚本中插入 erlang 命令吗?最好的方法是什么 这个?

您可以使用escript 来处理此问题,您可以查看this question 以获取有关如何执行此操作的示例(TL;DR:您可以,但它会启动一个新节点)。

如何处理同步问题?我可以将同步时间设置为 无穷大?

来自distributed applications,是的,您可以将同步时间设置为infinity

【讨论】:

以上是关于多个erlang应用程序多台计算机和其他一些问题的脚本的主要内容,如果未能解决你的问题,请参考以下文章

Erlang mnesia 数据库访问

Redis 分区

Redis 分区

Redis 分区

Redis 分区

NFS