一篇关于 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。
本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。