变更ecFlow服务运行节点
昨天 CMA-PI 的重启似乎没有带来好的兆头,今天早上 NWPC 业务系统使用的两个节点 login_b01 和 login_b02 几乎同一时间无法使用,导致调度业务系统的 ecFlow 服务完全停止。
为了不影响今天 00 时次的产品分发,我们决定尝试切换 ecFlow 的运行节点。
基础
ecFlow 服务会定时将当前的状态保存到 checkpoint 文件中,文件位置由 ECF_CHECK
和 ECF_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 上尝试切换节点运行,全部操作由手工完成,不是良好的业务运维实践。 我们在后续工作中,应该花更多的精力提高整个系统应对突发故障的能力。 共享文件系统使得切换操作变得非常简单,但未来我们可能会面临整个文件系统无法使用的情况,这就需要准备更多的应对预案。
我们还远远没有摸到混沌工程的门槛。