← 中文资源

简体中文版本

执行数据库故障切换演练

在真实故障迫使你进行未经验证的切换之前,演练提升副本、应用重连、写入验证和切回。

阅读英文原文

没有演练过的故障切换只是猜测

托管数据库宣称自动故障转移,但应用仍需重连、刷新凭据并处理短暂写入中断。连接池可能持有失效套接字,只读副本可能滞后,新主库的端点也可能不同。演练把这些假设变成可测量的步骤。

-- 在备库上,确认提升前已追上
SELECT pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn();
SELECT pg_is_in_recovery();

-- 提升后
SELECT pg_is_in_recovery();  -- 必须为 false

有意识地暂停写入

干净的演练先暂停写入,让两个节点对最后提交的事务达成一致。没有暂停,提升可能丢失最后几次写入,或产生脑裂窗口。生产中暂停必须有界并提前通知;测试环境可以更长,以便校验。

通过应用验证

数据库报告可读写并不代表切换成功。应用必须取得连接、提交一行并读回。还要检查后台 worker、迁移工具和分析任务是否也指向新主库;它们常使用独立连接串并静默失败。

有意回滚

演练只有在旧拓扑恢复后才算完成。把原主库重新配置为副本,等待追上,再用同样的控制切回。记录每个手工步骤和耗时。下一次真实事故应该需要更少决策,而不是更多。