失败节点隔离是什么
失败节点隔离指一批操作中出现失败时,把影响限制在失败节点本身,不让它扩散到其余节点或共享组件。实现上是三件事:定义失败阈值(整批立即停止、允许一定比例失败、连续失败熔断)、把失败节点从服务入口摘除(负载均衡下线、集群标记不可调度、停止接收新请求)、以及对失败集合单独重跑而不重复执行已成功的节点。判断的核心是这次失败是随机的还是系统性的:前者可以退避重试,后者必须先停下来定位原因。
基本信息
| 常用参数 | 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 # 复跑前确认现状失败处理策略
| 策略 | 行为 | 适用场景 |
|---|---|---|
| 整批即停 | 任一失败立刻停止后续 | 高风险变更的首批验证 |
| 比例中止 | 失败超过阈值才停 | 大规模、失败可容忍的常规变更 |
| 连续失败熔断 | 连续若干台失败即停 | 识别系统性故障,避免全量扫过 |
| 跳过继续 | 记录失败后继续其余主机 | 只读采集或各主机彼此独立的任务 |
| 摘流量隔离 | 从服务入口下线该节点 | 已影响业务的失败节点 |
隔离不等于修复。摘流量只是把影响挡在入口之外,失败节点仍占用资源、仍会被监控告警,需要有明确的修复与回队流程,否则隔离会悄悄变成永久下线。
对失败节点无脑重试会放大故障:若失败由目标端过载引起,重试等于再打一次。重试前先分类(瞬时错误可重试,配置与权限错误重试无用),并设置重试上限与退避。