手动演练是验证主备切换可靠性的最直接方式,通过运维人员主动模拟主库异常,全程观测切换动作、数据一致性、连接恢复及业务响应,暴露潜在断点,并需明确目标边界、执行标准化步骤、识别平滑度缺陷、闭环问题。

手动演练是验证主备切换流程是否可靠、平滑最直接有效的方式。它不依赖故障自动触发,而是由运维人员主动模拟主库异常,全程观察切换动作、数据一致性、连接恢复和业务响应,从而暴露潜在断点。
明确演练目标与边界
避免“为切而切”,每次演练前需定义清楚:
- 核心指标阈值:如RTO ≤ 3秒、RPO = 0、应用重连失败率 < 0.01%;
- 验证范围:是否覆盖全部备库(含级联备库)、只读流量是否自动路由、监控告警是否准确触发;
- 禁止操作项:例如不得在演练中修改生产配置、不得关闭高可用代理(HAMGR)或仲裁服务。
执行标准化切换动作
以金仓数据库为例,典型手动演练步骤如下:
- 前置检查:确认主备WAL位点一致(pg_last_wal_receive_lsn() = pg_last_wal_replay_lsn())、HAMGR代理状态正常、所有应用连接池未启用自动重连超时熔断;
- 主库停服模拟:使用kill -9终止主库进程(非systemctl stop),更贴近真实宕机场景;
- 实时观测项:查看集群管理日志中“Elected new primary”时间戳、备库pg_is_in_recovery()返回false的时刻、HAMGR日志中TCP连接接管完成记录;
- 业务验证方式:用预置SQL脚本持续轮询关键表(如账户余额表),检查是否出现空结果、重复写入或主键冲突。
识别典型平滑度缺陷
即使切换成功,以下现象也说明流程存在隐患:
- 连接抖动明显:应用层出现批量Connection Refused或Timeout,说明HAMGR未及时接管或DNS缓存未刷新;
- 只读延迟突增:切换后5秒内备库查询响应时间从10ms升至800ms,可能因WAL堆积未及时回放或索引统计信息失效;
- 事务中断残留:部分长事务在主库提交后、日志尚未同步到备库即发生切换,导致备库缺失最后几条变更——这反映同步模式配置不当或网络抖动未被监控覆盖。
记录并闭环问题
每次演练必须输出三类交付物:
- 时间线水印报告:精确到毫秒的各环节耗时(检测→选举→启动→接管→首查成功);
- 配置偏差清单:如发现某备库未启用synchronous_commit = on,或心跳间隔设为30秒(应≤5秒);
- 应用适配建议:例如要求Java应用将maxReconnects=3改为maxReconnects=1,避免重试放大瞬时错误。










