ecFlow笔记:变更服务运行节点

目录

昨天 CMA-PI 的重启似乎没有带来好的兆头,今天早上 NWPC 业务系统使用的两个节点 login_b01 和 login_b02 几乎同一时间无法使用,导致调度业务系统的 ecFlow 服务完全停止。

为了不影响今天 00 时次的产品分发,我们决定尝试切换 ecFlow 的运行节点。

基础

ecFlow 服务会定时将当前的状态保存到 checkpoint 文件中,文件位置由 ECF_CHECKECF_CHECKOLD 指定。 其中 ECF_CHECK 是最新的备份文件,而 ECF_CHECKOLD 是上一次的备份文件。 这种双备份机制正是今天恢复系统的关键。

另外,CMA-PI 上使用的是共享文件系统,某个节点 ecFlow 生成的文件可以被其它所有节点访问到。 ecFlow 服务运行的节点自身除了少量在该节点运行的串行作业外,不保存任何与业务系统相关的信息,这也是能便捷切换节点的关键因素。

方法

假设我们需要将 login_b01 上运行使用 31066 端口的 ecFlow 切换到 login_b09 上。

login_b01 的 ecFlow 服务的 checkpoint 文件名为:

login_b01.31066.check

需要将其改为

login_b09.31066.check

然后将文本文件中所有的 login_b01 替换为 login_b09

因为节点名称具有特殊性,所以我们在设计业务系统时不会使用类似的名字。 节点名称会出现在如下的变量定义中:

  • ECF_NODE
  • ECF_HOST
  • ECF_LOG
  • ECF_CHECK
  • ECF_CHECKOLD

修改后,使用相同的端口在 login_b09 节点上启动新的 ecFlow 即可加载 login_b01 节点上 ecFlow 的所有状态信息。

除了上一节提到的登录节点上运行的作业外,提交到 Slurm 中的作业也需要特别注意,已经运行的作业依然会与原有节点上的 ecFlow 服务通讯。

如果因为某种原因,.check 文件为空,需要将 .check.b 文件复制为 .check 文件。

总结

这是我们第一次在 ecFlow 上尝试切换节点运行,全部操作由手工完成,不是良好的业务运维实践。 我们在后续工作中,应该花更多的精力提高整个系统应对突发故障的能力。 共享文件系统使得切换操作变得非常简单,但未来我们可能会面临整个文件系统无法使用的情况,这就需要准备更多的应对预案。

我们还远远没有摸到混沌工程的门槛。