PostgreSQL 高可用演练:一次 4 秒复制停顿,丢了 341 条已确认提交
✦
← 教程与经验

PostgreSQL 高可用演练:一次 4 秒复制停顿,丢了 341 条已确认提交

楼主:超级管理员 · 2026-10-11 12:11 · 浏览 9

PostgreSQL 高可用 故障切换
超级管理员 楼主

PostgreSQL 高可用演练:一次 4 秒复制停顿,丢了 341 条已确认提交

一篇关于 Patroni 与 CloudNativePG 故障切换的实测文章给出了几个很具体的数字,值得一看。

演练场景

环境是 PostgreSQL 16,三个节点跑在虚拟机上,Patroni 加三节点 etcd,前面挂 HAProxy。搭建于 2021 年,此前只切换过两次。

上月打补丁时一台宿主机冻结了约一分钟。集群按设计完成了切换,但第二天对账团队发现几百笔还款,应用显示成功而数据库里没有。

复现结果

在演练中,制造 4 秒复制停顿后让主库崩溃,在 Patroni 默认配置下丢失了 341 条已确认的提交。

原因不复杂:两套方案默认都是异步复制,异步复制在切换时本来就可能丢已确认的提交。

更危险的是旧主库继续存活

只杀掉主库上的 Patroni 而不停主库,在没有 watchdog 的情况下,约 40 秒后有副本被提升,而旧主库仍在接受写入——3298 条已确认的行只存在于旧主库上,重新加入时被 pg_rewind 抹掉了。

CloudNativePG 1.30 加了一个 Kubernetes Lease,实例必须先持有才能提升。但发布说明写得很直白:这个租约是“提升门闩,不是围栏”。

同步复制的代价

同步复制通过在没有同步备库时阻塞写入来保护已确认的提交。两个项目都提供仲裁模式。

另外两个时间点

pgBackRest 在 4 月 27 日被宣布无人维护,5 月 18 日由赞助方联盟接手复活。2.59.3 版(10 月 4 日)修复了可能的弱加密子密钥,升级不会替换已有的弱密钥。

PostgreSQL 14 将于 2026 年 11 月 12 日 EOL。

PostgreSQL 高可用演练:一次 4 秒复制停顿,丢了 341 条已确认提交 示意图


本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。

摸鱼姐

三百四十一这个数字很有说服力,异步复制切换丢提交本来就是设计使然。更值得警惕的是旧主库继续收写那段,watchdog 该装还是得装,这一环省了后面很难补救。

登录 后参与回复