指定分布式应用

分布式应用同时由应用控制器和一个分布式应用控制进程 dist_ac 来控制。这些进程都是 kernel 应用的一部分。因此,分布式应用要通过配置 kernel 应用来指定,使用以下配置参数(参见 kernel(6) ):

  • distributed=[{Application,[Timeout,]NodeDesc}]
  • 指定应用 Application=atom() 可以在何处执行。 NodeDesc=[Node|{Node,…,Node}] 是节点名称的列表,按照优先级顺序排列。在一个元组内的节点的优先级则是不确定的。Time=integer() 指定了在另一个节点上重启应用之前要等待多少毫秒。为了应用控制的分布能正常工作,分布式应用所运行的节点必须互相联系并商定在何处启动应用。这是使用以下 kernel 配置参数来完成的:

  • sync_nodes_mandatory=[Node]

  • 指定哪些其他的节点必须被启动(在 sync_nodes_timeout 指定的超时时间之内)
  • sync_nodes_optional=[Node]
  • 指定哪些其他的节点可以被启动(在 sync_nodes_timeout 指定的超时时间之内)
  • sync_nodes_timeout=integer()|infinity
  • 指定在其他节点启动之前等待多少毫秒当启动之后,节点要等待所有由 sync_nodes_mandatorysync_nodes_optional 指定的节点就绪。当所有节点就绪,或者当所有强制的节点就绪同时已经经过由 sync_nodes_timeout 指定的时间,然后所有的应用将被启动。如果不是所有的强制节点都就绪了,那么这个节点就会终止。

例如:一个应用 myapp 应该运行于节点 cp1@cave 上。如果该节点挂了,那么 myapp 应该在 cp2@cave 或者 cp3@cave 上重启。那么针对 cp1@cave 的一个系统配置文件应该为:

  1. [{kernel,
  2. [{distributed, [{myapp, 5000, [cp1@cave, {cp2@cave, cp3@cave}]}]},
  3. {sync_nodes_mandatory, [cp2@cave, cp3@cave]},
  4. {sync_nodes_timeout, 5000}
  5. ]
  6. }
  7. ].

cp2@cavecp3@cave 的系统配置文件是一样的,除了强制节点的列表,对于 cp2@cave 来说应该是 [cp1@cave,cp3@cave] ,对于 cp3@cave 来说应该是 [cp1@cave,cp2@cave]