PG 高可用实战:流复制 + pgBouncer 连接池——生产级部署方案
引言 "周四凌晨 2:17,主库服务器主板故障宕机,告警准时响了。值班同学打开手机看到'PG 主库不可达',翻运维手册、找从库、改应用配置、重启连接池——业务恢复时是 3:04,整整 47 分钟。好在是凌晨,只积压了十几分钟的订单,如果是大促高峰,这个数字会是几十万笔。" 复盘会上两个结论:手动切换不可接受,必须让"检测故障 → 选举新主 → 提升从库 → 流量切过去"全程自动化,把 47 分钟压到 30 秒以内;同时排查中发现主库 8000 多个连接、40GB 内存被几百个空闲会话白白吃掉——MySQL 一个连接一条线程尚可硬扛,PG 是一个连接 fork 一个进程,连接数根本开不起太高,必须上连接池。 最终落地的就是生产圈公认的"高可用三件套":流复制负责把 WAL 日志实时搬到从库,保证主库挂了有库可切;Patroni 负责故障检测、选主和 VIP 漂移,把切换 RTO 从 47 分钟压到 28 秒;pgBouncer 负责把应用的几千个连接收敛成后端几十个真正的 PG 进程,内存从 40GB 降到 6GB。这篇文章按部署一个新集群的真实顺序展开:先把流复制跑通,再权衡同步/异步....