首页/系统与基础设施/自动化运维速查/批量执行中的失败节点隔离
批量执行与作业50 条

批量执行中的失败节点隔离

失败节点隔离的目标是控制单点失败不扩散:先按失败比例或连续失败次数决定是继续、重试还是整批中止,再把失败节点从服务入口摘除(负载均衡下线、集群标记不可调度),最后只对失败集合单独重跑,同时保留现场供排查。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​​​‌​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​​‌‌​‌‌​‌​​​​​‌​‌‌​‌​‌‌​​‌​‌​‌‌‌‌​​​​‌‌​​‌​‌​‌‌​​​‌‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌​​‌‌​​‌‌​​​​‌​‌‌​‌​​‌​‌‌​‌‌​​​‌‌‌​‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌​​‌​‌‌‌​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

失败节点隔离是什么

失败节点隔离指一批操作中出现失败时,把影响限制在失败节点本身,不让它扩散到其余节点或共享组件。实现上是三件事:定义失败阈值(整批立即停止、允许一定比例失败、连续失败熔断)、把失败节点从服务入口摘除(负载均衡下线、集群标记不可调度、停止接收新请求)、以及对失败集合单独重跑而不重复执行已成功的节点。判断的核心是这次失败是随机的还是系统性的:前者可以退避重试,后者必须先停下来定位原因。

基本信息

常用参数Ansible serial、max_fail_percentage、any_errors_fatal;Kubernetes maxUnavailable 与 cordon/drain
判定依据失败率、失败主机是否集中在同一故障域或同一版本
隔离动作摘流量、标记不可调度、暂停后续批次、冻结自动化
前提条件失败节点的当前状态可查、可回滚、现场可保留

典型使用场景

  • 灰度批次第一台就失败,立即停止后续放大
  • 集群滚动重启时某节点起不来,先摘流量再排查
  • 大批量变更中部分主机失败,只对失败集合重跑
  • 共享依赖(数据库、网关)异常时整批熔断
  • 失败节点需保留现场,避免自动重试覆盖掉故障状态

隔离与限制范围

隔离与限制范围
ansible-playbook deploy.yml -e max_fail_percentage=10    # 失败超过 10% 整体中止
ansible-playbook deploy.yml --limit @failed.txt            # 只对失败集合重跑
kubectl cordon node-3                                      # 标记节点不可调度,先隔离
kubectl drain node-3 --ignore-daemonsets --delete-emptydir-data  # 迁走工作负载
ansible all -m shell -a 'systemctl is-active app' --limit @failed.txt  # 复跑前确认现状

失败处理策略

策略行为适用场景
整批即停任一失败立刻停止后续高风险变更的首批验证
比例中止失败超过阈值才停大规模、失败可容忍的常规变更
连续失败熔断连续若干台失败即停识别系统性故障,避免全量扫过
跳过继续记录失败后继续其余主机只读采集或各主机彼此独立的任务
摘流量隔离从服务入口下线该节点已影响业务的失败节点
隔离不等于修复。摘流量只是把影响挡在入口之外,失败节点仍占用资源、仍会被监控告警,需要有明确的修复与回队流程,否则隔离会悄悄变成永久下线。
对失败节点无脑重试会放大故障:若失败由目标端过载引起,重试等于再打一次。重试前先分类(瞬时错误可重试,配置与权限错误重试无用),并设置重试上限与退避。

易错点

  • 不允许部分失败也不设阈值,一台报错就中止全批,小问题被放大成变更失败
  • 失败后不区分原因就全量重试,把目标端过载变成持续故障
  • 隔离动作只做入口摘除,没有修复与回队流程,节点长期游离在集群之外
  • 失败节点现场被自动重试覆盖,日志与残留状态丢失,无法定位根因

数据来源与参考

  • Ansible 官方文档:serial 与 max_fail_percentage
  • Kubernetes 官方文档:节点维护(cordon、drain)
  • Kubernetes 官方文档:Deployment 滚动更新与 maxUnavailable

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/batch-execution-failure-node-isolation.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​​​‌​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​​‌‌​‌‌​‌​​​​​‌​‌‌​‌​‌‌​​‌​‌​‌‌‌‌​​​​‌‌​​‌​‌​‌‌​​​‌‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌​​‌‌​​‌‌​​​​‌​‌‌​‌​​‌​‌‌​‌‌​​​‌‌‌​‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌​​‌​‌‌‌​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​