手动集群故障切换演练是验证自动机制失效时兜底能力的关键动作,需明确触发场景、完成三项硬准备、执行四控点操作,并在演练后闭环复盘、更新文档、推进自动化。

手动集群故障切换演练不是日常操作,而是验证自动机制失效时“兜底能力”的关键动作。它不替代高可用设计,而是检验人在环路中的响应质量、流程清晰度和工具可靠性。
明确触发手动切换的典型场景
自动切换失败才启动手动流程,常见触发点包括:
- 心跳检测超时但主节点实际仍在运行(网络分区导致误判)
- 仲裁节点(Witness)不可达,集群无法达成多数派共识,卡在“等待投票”状态
- 自动Failover脚本执行中断、权限异常或配置缺失,日志显示“切换未完成”
- 新主节点启动后服务端口未监听、连接池未重路由、VIP未漂移等半成功状态
演练前必须完成的三项硬准备
没有这些基础,手动切换极易演变为救火式混乱:
- 一份可离线查阅的切换检查清单:包含每步操作命令、预期返回结果、超时阈值(如“执行 pg_ctl promote 超过45秒无响应需中止并查日志”)、回滚指令(如“若切换失败,立即执行 pg_rewind 回退备库”)
- 预验证的应急通道:独立于生产网络的带外管理链路(如iDRAC/IPMI)、具备sudo权限的专用运维账号、已配置免密登录的跳板机
- 最小化影响范围的流量控制手段:DNS TTL提前调至60秒、负载均衡器支持秒级摘除/加入后端、应用层有降级开关(如关闭写入仅保留查询)
演练执行中的四个关键控制点
手动操作强调“稳”而非“快”,重点防人为失误:
- 双人复核制:一人执行命令,另一人对照清单逐项确认参数、目标节点IP、数据库实例名,避免误切到测试环境
- 分阶段验证:先确认新主节点数据库进程与端口就绪 → 再验证WAL接收与应用状态(pg_stat_replication)→ 接着测试本地连接 → 最后开放应用连接
- 数据一致性即时校验:切换完成后1分钟内,比对主从关键表的行数、最新时间戳字段、校验和(如 SELECT md5(CAST((SELECT array_agg(t) FROM (SELECT * FROM orders ORDER BY id LIMIT 100) t) AS text)))
- 强制记录操作日志:每条命令及其输出必须粘贴至共享文档,禁止仅口头通报;截图保存VIP漂移、连接池重连、监控曲线突变等关键节点
演练后必须闭环的三件事
一次演练的价值,70%体现在复盘环节:
- 定位自动机制为何失效:是心跳间隔设为60秒但网络抖动持续90秒?还是Witness节点部署在单台物理机上形成新单点?不能只归因为“系统问题”
- 更新所有相关文档:操作手册中补充本次暴露的盲区(如“当pg_controldata 显示timeline ID 不匹配时,需先执行 pg_rewind 再 promote”),同步更新监控告警阈值
- 把人工步骤转为自动化候选:若某步手动操作在三次演练中均耗时稳定且无风险(如修改DNS记录),应推动接入CI/CD流水线或一键脚本,减少下次人为介入

















