基于执行命令的分批发布

批量更新应用服务或给多台机器打补丁时,采用分批操作策略至关重要,以降低风险。现有方法如推送脚本至各机器或使用 Ansible 执行,难以实现有效分批控制及直观的信息展示。本文为您演示使用系统运维管理 OOS(CloudOps Orchestration Service)基于执行命令的分批发布。

解决方案

我们把准备执行的脚本,交给一个帮手替我们去分批执行,它可以为我们检查脚本每批执行的状态,一旦某批中有执行失败,则暂停该批次的执行,且其后面若有未执行的批次,其执行计划也会被暂停。而且我们随时可通过该帮手查看执行流程及相关信息,从中轻易发现为何脚本执行失败,当我们对失败原因分析后,再去决定是否继续执行后面的批次。这样就很好地掌握了整个发布节奏,不至于因为可忽略的小问题而中止整个发布,或者忽略了某个致命性问题仍继续发布。而我们所说的这个帮手,就是OOS的失败暂停功能,其借助云助手在实例上执行脚本的能力。

image.png

操作步骤

  1. 首先登录到系统运维管理控制台

  2. 单击常用运维任务,单击批量操作实例image

  3. 在选择操作中,选择操作类型发送远程命令。根据要执行的脚本,选择需要发送的命令类型,本文选择Linux Shell,然后将要执行的脚本复制粘贴到代码编辑框中,本文示例脚本为df -h;ifconfigimage

  4. 单击选择实例,选择所有将要执行的实例,本文选择指定实例标签,单击选择标签,本文表示将在标签键oos及标签值debug下所有实例中执行脚本。image

  5. 高级选项,执行模式中选择失败暂停,点选批次控制批次速率数组根据将要分批执行的方式来填写,详细填写规则参考任务循环。 本文将其填写为[2,25%,50%],假设选择实例步骤中oos:debug标签下包含8台ECS实例,那么[2,25%,50%]则代表这8台实例分三个批次执行脚本,第一批2台执行,第二批25%*8=2台执行,第三批4台执行。当前一批执行成功,则后一批接着执行,若某一个批次执行时发生失败,则暂停失败的批次及向后执行计划,循环并发控制本文选择不暂停,即前一批次执行成功,则直接执行下一批次。最大错误次数本文填写0。image

  6. 单击 创建

  7. 若有批次发生失败,则执行状态会变为等待中,等待原因显示为失败暂停。image

  8. 单击执行详情,可发现问题子实例在第一批次,单击失败子执行,可查看并分析具体原因,视情况再进一步操作。