PostgreSQL Field Guide

PostgreSQL 生产工具栈与高可用

从连接池、备份恢复、监控和故障域出发设计 PostgreSQL 生产架构,并判断 PgBouncer、pgBackRest、Patroni、CloudNativePG 与 Pigsty 何时值得采用

生产 PostgreSQL 的优先级通常是:能够恢复 → 不耗尽连接 → 看得见问题 → 安全地变更 → 再自动故障切换。高可用不能替代备份,副本也不能修复已经复制过去的误删。

截至 2026-08-02,PostgreSQL 18.4 是最新稳定 major 18 的当前 minor;14–18 仍处于官方支持期。生产实例应运行其所在 major 的当前 minor,而不是只因为 18 最新就强制跨 major 升级。版本状态见 PostgreSQL versioning policy18.4 release notes

最小生产基线

最先回答的问题常见选择
数据库minor 更新、角色、TLS、参数、扩展如何管理?PostgreSQL 官方包或经过验证的镜像
连接峰值应用并发会不会耗尽 backend?应用连接池,必要时 PgBouncer
恢复RPO/RTO 是多少,能否从平台外恢复?pgBackRest、WAL-G 或云平台备份 + 独立副本
可观测性哪条 SQL、哪个等待事件、哪段日志解释故障?pg_stat_statements、JSON 日志、指标采集
变更DDL 锁、回填、回滚和兼容窗口如何验证?expand-and-contract、迁移检查、真实 PG 测试
可用性独立故障域、仲裁和切换后数据边界是什么?托管 HA、Patroni、CloudNativePG 或 Pigsty

PgBouncer:不要默认选择 transaction pooling

PgBouncer 把大量客户端连接复用到较少的 PostgreSQL server connection。不要通过持续增大 max_connections 代替容量设计;每个 backend 都会占用内存和调度资源,还要给迁移、监控、备份、管理与复制保留连接。

模式server connection 归还时间适用边界
session客户端断开兼容性最高,适合依赖会话状态的应用
transaction事务结束Web/API 常用,但必须验证会话级特性
statement每条语句结束不允许多语句事务,只适合非常受控的负载

transaction pooling 下,SQL 级 PREPARE、会话 advisory lock、LISTEN、带 WITH HOLD 的 cursor,以及许多依赖会话状态的做法不可用或受限。协议级 prepared statement 需要正确配置 max_prepared_statements 并验证驱动行为。完整矩阵见 PgBouncer feature map

上线前至少验证:认证与 TLS、prepared statements、临时表、迁移工具、连接 reset、failover、事务重试,以及 ORM 是否把状态留在 session。

pgBackRest、WAL-G 与云平台备份

pgBackRest 支持 full/differential/incremental backup、并行传输、多 repository、WAL archive 与 PITR,适合自托管 PostgreSQL 的完整恢复链路。WAL-G 更偏对象存储工作流。二者都不能通过“安装完成”证明可恢复。

备份周期应由 RPO、WAL 生成量、恢复带宽、保留要求和实测 RTO 推导,而不是机械套用“每周全量、每日增量”。必须持续检查 archive gap、对象删除保护、加密密钥、跨账户或跨主机副本,并定期恢复到临时实例。

pg_dump 仍适合逻辑迁移、选择对象和小规模恢复,但它不能单独提供连续时间点恢复。详见 备份、恢复与 PITR

Patroni、CloudNativePG 与 Pigsty 怎么选

环境候选方案采用前提
托管云数据库服务商的跨可用区 HA核对区域、故障切换、PITR、扩展与平台外恢复限制
独立 VM / 裸机Patroni多个独立故障域、可靠 DCS、网络与存储运维能力
已有 Kubernetes 平台CloudNativePG团队已能运维 K8s、存储、网络和 Operator 升级
多集群自托管平台Pigsty接受 Ansible/VM 运维模型,并验证其集成组件与升级路径

CloudNativePG 的对象存储备份当前应评估 Barman Cloud Plugin,不要照搬已弃用的内置 object-store 配置。不要仅为了一个 PostgreSQL 实例引入 Kubernetes。

同一台机器的三个容器不是三个故障域

它们会同时受到主机断电、内核故障、存储损坏和网络中断影响。自动选主只在节点、存储和仲裁边界真实独立时改善可用性。

分阶段采用

生产基线

  • 当前 minor、角色分离、TLS 与受控扩展;
  • 连接预算,必要时部署并验证 PgBouncer;
  • 独立保留的备份、连续 WAL/PITR 与恢复演练;
  • SQL、指标、日志三层可观测性;
  • 迁移前锁测试、超时、回退路径和业务验证。

条件采用

  • 只有存在独立故障域和明确 RTO 时,才引入自动故障切换;
  • 只有已有成熟 Kubernetes 运维时,才优先 CloudNativePG;
  • 只有管理多个自托管集群的收益覆盖平台复杂度时,才引入 Pigsty;
  • 只有真实工作负载需要时,才安装 pgvector、PostGIS、TimescaleDB 等扩展。

实验通道

PostgreSQL 19 Beta、较新的扩展和存储引擎应进入可丢弃的兼容性环境,而不是生产默认。将稳定版本测试与下一 major 测试拆成两条 CI 通道,见 安全迁移与零停机 Schema 变更

Last updated on

On this page