优化Nginx故障转移演练需坚持“可测、可控、可溯、可复”四原则,按轻/中/重量级分级场景设计,统一健康检查逻辑与阈值,执行5项标准化验证,并建立含录像、记录表、问题单的闭环归档机制。

优化 Nginx 故障转移的演练流程,关键不是堆步骤,而是让每次演练真正暴露风险、验证逻辑、固化响应。标准流程必须围绕“可测、可控、可溯、可复”四个原则设计,避免流于形式。
明确演练目标与分级场景
不区分场景的盲切毫无价值。应按影响程度划分三级故障类型:
- 轻量级:仅停 Nginx 进程(不关 keepalived),验证健康检查脚本是否触发权重调整或服务摘除
- 中量级:停 keepalived 服务,触发 VIP 漂移,验证客户端连接中断时长、会话是否断开、日志是否记录切换事件
- 重量级:模拟网络隔离(如禁用主节点网卡)、磁盘满或 CPU 占满等复合故障,检验脑裂防护机制与恢复逻辑
统一健康检查逻辑与阈值定义
keepalived 的 vrrp_script 必须与 Nginx 实际状态强一致,常见错误是脚本只检测进程存在却忽略配置加载失败或 worker 异常退出:
- 推荐检查组合:
kill -0 $(cat /var/run/nginx.pid) && nginx -t >/dev/null 2>&1 - 间隔设为
interval 2,但fall值建议 ≥3(即连续 3 次失败才判定异常),避免瞬时抖动误切 - 权重变化建议设为
weight -8或更低,确保优先级差足以压倒默认 priority 差值
标准化切换验证动作清单
每次演练后必须执行以下 5 项验证,缺一不可:
- 在客户端持续 ping VIP,确认 ICMP 响应中断 ≤3 秒,且能自动恢复
- 用 curl 或浏览器访问业务 URL,检查 HTTP 状态码始终为 200,无 502/504
- 登录两台 Nginx 服务器,执行
ip a | grep "inet.*VIP",确认 VIP 仅出现在当前 MASTER 节点 - 查看
/var/log/messages或journalctl -u keepalived,核对 “Transition to MASTER/BACKUP state” 日志时间戳与操作时间匹配 - 检查 Nginx access.log 中是否有因切换导致的重复请求或超时请求突增
建立演练归档与闭环机制
每次演练不是结束,而是改进起点。需强制留存三类材料:
- 一份含时间戳的 操作录像片段(至少覆盖停服务、VIP 变化、客户端验证全过程)
- 一份结构化 结果记录表,字段包括:故障类型、VIP 切换耗时、HTTP 首包延迟、是否出现 5xx、是否触发告警、人工干预项
- 一份 问题跟踪单,对任何异常(如切换超时、脑裂、日志缺失)必须明确根因、修复措施和验证方式,关闭前需复现通过











