如何在不启动每个节点依赖性的情况下启动分布式Erlang应用程序?

用户名

我尝试以分布式方式运行一个简单的应用程序以测试故障转移接管功能,但失败了。

我要:

该应用程序myapp_api带有rest api,它具有myapp作为依赖项的应用程序。我想从myapp_api3个节点开始,我希望整个应用程序(myapp_api+ myapp)只能同时在一个节点上工作。

怎么了:

主应用程序(myapp_api)可以按预期工作:仅在具有故障转移和接管功能的一个节点上。但是由于某种原因,依赖myapp总是始于每个节点。我希望它只能同时在一个节点上工作。

我所做的:

我以第一个节点的配置为例。

[
    {kernel,
    [{distributed, [{myapp_api,
        1000,
        ['n1@myhost', {'n2@myhost', 'n3@myhost'}]}]},
        {sync_nodes_optional, ['n2@myhost', 'n3@myhost']},
        {sync_nodes_timeout, 5000}
    ]}
].

erl -sname nI -config nI.config -pa apps/*/ebin deps/*/ebin -s myapp_api在每个节点上打电话

我给了糟糕的建议

现在,这变得有些混乱,因为您说:

我想在3个节点上启动myapp_api,我希望整个应用程序(myapp_api + myapp)只能同时在一个节点上运行。

然后添加:

主应用程序(myapp_api)可以按预期工作:仅在具有故障转移和接管功能的一个节点上。但是出于某种原因,myapp始终在每个节点上启动。

在第一段中,您说myapp_api应该在任何地方运行,在第二段中,您说它可以通过一次在一个节点上启动来达到预期的效果。

我在这里假设您希望整个设置都是故障转移,而不仅是顶级应用程序,而且我对第一段感到困惑。

您使用的配置文件显示了发生的情况:

[{kernel,
  [{distributed, [{myapp_api,
    1000,
    ['n1@myhost', {'n2@myhost', 'n3@myhost'}]}]},
    {sync_nodes_optional, ['n2@myhost', 'n3@myhost']},
    {sync_nodes_timeout, 5000}
]}].

重要的一点是myapp_api已经['n1@myhost', {'n2@myhost', 'n3@myhost'}]定义了节点此顺序意味着它n1@myhost以最高优先级运行,然后在发生故障转移时以相同优先级在其他节点上运行

关键是没有一个依赖项以相同的方式分布,因此可以期望它在任何地方都可以运行。

您只需要扩展该配置文件即可使其工作。在这里,我已经完成并重新缩进以更好地显示其结构:

[{kernel,
  [{distributed, [
     {myapp_api, 1000, ['n1@myhost', {'n2@myhost', 'n3@myhost'}]},
     {myapp, 1000, ['n1@myhost', {'n2@myhost', 'n3@myhost'}]},
   ]},
   {sync_nodes_optional, ['n2@myhost', 'n3@myhost']},
   {sync_nodes_timeout, 5000}
]}].

我尚未直接对其进行测试,但是我敢肯定这会起作用。

如果您想要的是myapp_api到处都是但myapp要在一个地方运行,则可以使用全局注册,为myapp面向公众的流程命名,然后myapp_api调用它们。当以下配置支持时,myapp_api便可以将流量路由到任何地方myapp

[{kernel,
  [{distributed, [
     {myapp, 1000, ['n1@myhost', {'n2@myhost', 'n3@myhost'}]},
   ]},
   {sync_nodes_optional, ['n2@myhost', 'n3@myhost']},
   {sync_nodes_timeout, 5000}
]}].

(请参阅myapp唯一一个获得分发配置文件的应用程序?其他应用程序将在所有节点上运行)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在不启动应用程序的情况下启动节点服务器

如何在不启动应用程序的情况下更新WINEPREFIX

如何在不依赖数据库的情况下启动spring-boot应用程序?

如何在分布式模式下本地启动钻头?

如何在不运行ipfs节点的情况下从Javascript应用程序使用IPFS?

如何在不滚动的情况下在移动Web应用程序上启动网页

如何在不重新启动应用程序的情况下获取StackOverflowError的完整stacktrace

如何在不重新启动应用程序的情况下重新配置Serilog?

如何在没有托管的情况下启动ASP.Net应用程序?

德尔福7。如何在不重新启动应用程序的情况下卸载dll?

如何在没有测试的情况下启动我的 Quarkus 应用程序?

闪亮:如何在禁用操作按钮的情况下启动应用程序?

Pwinauto:如何在没有 GUI 错误的情况下启动应用程序

在不启动应用程序的情况下启动警报活动

如何在不重新启动应用程序的情况下更改Flutter应用程序的语言?

如何在没有连接显示器的情况下启动 Qt GUI 应用程序?

Tomcat如何在没有部署描述符(web.xml)的情况下启动应用程序?

如何在不重新启动或停止应用程序的情况下重置infinispan统计信息

如何在不重新启动 JVM 的情况下将外部 JAR 添加到 Spring 应用程序?

在启动后不使用require.js的情况下,如何在应用程序中添加模块?

Azure:如何在不重新启动应用程序服务的情况下重新加载环境变量

如何在不重新启动应用程序的情况下激活运行时登录?

如何在不实际启动活动的情况下检查外部应用程序的活动是否为“ exported = false”

如何在没有频道uri的情况下启动Google TV的直播电视应用程序?

如何在不构建应用程序的情况下测试多人游戏的统一性?

在通过“打开文件方式”启动的情况下,应用程序如何获取文件名?

如何在不重新启动应用程序的情况下使我的C#应用程序的一部分动态加载?

如何在不安装的情况下从一个应用程序启动另一个应用程序

您如何在不前往应用商店的情况下启动Chrome扩展程序?