没有演练过的故障切换只是猜测
托管数据库宣称自动故障转移,但应用仍需重连、刷新凭据并处理短暂写入中断。连接池可能持有失效套接字,只读副本可能滞后,新主库的端点也可能不同。演练把这些假设变成可测量的步骤。
-- 在备库上,确认提升前已追上
SELECT pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn();
SELECT pg_is_in_recovery();
-- 提升后
SELECT pg_is_in_recovery(); -- 必须为 false
有意识地暂停写入
干净的演练先暂停写入,让两个节点对最后提交的事务达成一致。没有暂停,提升可能丢失最后几次写入,或产生脑裂窗口。生产中暂停必须有界并提前通知;测试环境可以更长,以便校验。
通过应用验证
数据库报告可读写并不代表切换成功。应用必须取得连接、提交一行并读回。还要检查后台 worker、迁移工具和分析任务是否也指向新主库;它们常使用独立连接串并静默失败。
有意回滚
演练只有在旧拓扑恢复后才算完成。把原主库重新配置为副本,等待追上,再用同样的控制切回。记录每个手工步骤和耗时。下一次真实事故应该需要更少决策,而不是更多。