流复制、逻辑复制与高可用
PostgreSQL 的高可用建立在 WAL(Write-Ahead Log) 之上。按复制粒度分为物理复制与逻辑复制。
WAL 回顾
所有修改先写 WAL 再改数据页,这带来三个能力:
- 崩溃恢复:重放 WAL 恢复到一致状态。
- 物理复制:把 WAL 原样传输到备库。
- 时间点恢复 PITR:基于基础备份 + WAL 归档恢复到任意时刻。
物理流复制
主库持续把 WAL 推送给备库,备库原样重放,得到字节级一致的副本(适合只读扩展与故障切换)。
同步复制
默认异步复制在故障时可能丢少量数据。配置同步复制可让主库等待备库确认:
Warning
同步复制会增加事务延迟,且当所有同步备库不可用时主库写操作会阻塞。建议配置至少两个候选备库并使用 FIRST 1 (...) 语义,兼顾一致性与可用性。
逻辑复制
逻辑复制在逻辑层面(行变更)复制,而非物理字节,因而支持:
- 只复制部分表、按行过滤。
- 跨大版本升级、异构迁移。
- 主库可读写(物理备库只读)。
Tip
逻辑复制不复制 DDL(表结构变更需手动同步),也不复制序列。它更适合数据同步与迁移,而不是完整的灾备方案。
高可用与故障切换
备份与 PITR
小结
- WAL 是崩溃恢复、物理复制与 PITR 的共同基础。
- 物理流复制得到完整副本,用于只读扩展与切换;同步复制可降低丢数据风险但增加延迟。
- 逻辑复制灵活(部分表、跨版本),但不含 DDL 与序列。
- 生产高可用优先选用 Patroni 或云托管方案,并配套基础备份 + WAL 归档。