repmgr 和 patroni 都不是 postgresql 数据库自带组件,而是需要额外安装的第三方高可用管理软件。postgresql 本身自带的是 streaming replication(流复制)能力,repmgr 和 patroni 是在流复制基础上增加主备管理、自动切换和高可用能力。
| 组件 | postgresql 自带? | 是否单独安装 | 主要作用 |
|---|---|---|---|
| streaming replication | ✅ | ❌ | postgresql 原生主备复制 |
| repmgr | ❌ | ✅ | 主备管理、switchover、failover、节点 rejoin |
| patroni | ❌ | ✅ | 自动选主、switchover、failover、ha 管理 |

postgresql 常见可以理解为四种部署模式:
单实例、原生流复制、流复制 + repmgr、流复制 + patroni
- repmgr:基本就是 replication manager 的缩写,中文可理解为 复制管理器。它是 postgresql 的复制与故障切换管理工具,主要负责主备节点管理、监控、switchover、failover 等。
- patroni:不是一个缩写,没有类似 “p-a-t-r-o-n-i 分别代表什么单词” 的官方展开。官方把它定义为一个用于构建 postgresql 高可用方案的 python ha 框架,最早源自 compose 的 governor 项目分支。
| 名称 | 是否缩写 | 含义 |
|---|---|---|
| repmgr | ✅ | replication manager,复制管理器 |
| patroni | ❌ | 项目名称,postgresql 高可用管理框架 |
需要先明确一个概念:
repmgr 和 patroni 不是新的数据复制技术,它们都是建立在 postgresql streaming replication(流复制)之上的高可用管理组件。
它们之间的关系可以简单理解为:
postgresql
│
├── 单实例
│
└── streaming replication
│
├── + repmgr
└── + patroni一、四种部署模式核心对比
| 部署模式 | 服务器数量 | 数据主备 | 自动故障切换 | 计划切换角色自动转换 | 定位 |
|---|---|---|---|---|---|
| 单实例 | 1 台 | ❌ | ❌ | 不涉及 | 基础部署 |
| streaming replication | 至少 2 台 | ✅ | ❌ | ❌ | 原生主备 |
| streaming + repmgr | 至少 2 台,生产常见 3 台 | ✅ | ✅ | ✅ | 轻量级 ha |
| streaming + patroni | 生产建议至少 3 台 | ✅ | ✅ | ✅ | 自动高可用 |
二、wal 是什么?
wal 全称:
write-ahead logging
即 预写式日志。
简单理解:
业务修改数据
↓
先生成 wal
↓
wal先落盘
↓
数据页再写入磁盘在主备流复制中:
primary │ │ wal ↓ standby │ ↓ 回放 wal ↓ 保持数据同步
所以 postgresql 流复制的本质就是:
主库不断产生 wal,备库不断接收并回放 wal,从而保持主备数据同步。
三、单实例
只部署一台 postgresql:
app │ pg01
服务器数量
1 台
特点
- 没有主备
- 没有自动切换
- 服务器故障后数据库直接不可用
- 适合开发、测试或高可用要求较低的环境
一句话理解:
单实例 = 只有一套数据库,没有高可用。
四、原生 streaming replication
最基本的 postgresql 主备架构:
pg01 primary
│
│ wal
↓
pg02 standby服务器数量
至少 2 台 pg01:primary pg02:standby
特点
| 能力 | 是否支持 |
|---|---|
| 数据实时复制 | ✅ |
| standby 数据副本 | ✅ |
| standby 提升为 primary | ✅ |
| 自动检测主库故障 | ❌ |
| 自动故障切换 | ❌ |
| 主备角色自动互换 | ❌ |
例如:
原来: pg01 = primary pg02 = standby
把 pg02 promote 后:
pg02:standby → primary ✅ pg01:primary → standby ❌
原来的 pg01 不会自动变成备库,需要 dba 再通过 pg_rewind、重新同步等方式加入。
一句话理解:
流复制 = 数据自动同步,但主备切换和角色管理主要依赖 dba。
五、streaming replication + repmgr
repmgr 是 postgresql 流复制的 主备管理工具。
主要作用包括:
- 监控 primary / standby
- switchover
- failover
- 自动 promote
- 节点 rejoin
- 管理复制拓扑
需要几台服务器?
最低可以 2 台:
pg01:postgresql + repmgr + repmgrd pg02:postgresql + repmgr + repmgrd
即:
pg01 primary
│
↓
pg02 standby但是生产环境通常建议 3 台。
一种常见方式:
pg01:postgresql + repmgr + repmgrd
primary
pg02:postgresql + repmgr + repmgrd
standby
pg03:postgresql + repmgr + repmgrd
witness结构:
pg03
witness
│
┌───────┴───────┐
│ │
pg01 pg02
primary standby第三台也可以不做 witness,而是部署成第二个 standby:
pg01 = primary pg02 = standby pg03 = standby
角色是否自动转换?
计划内 switchover:
切换前:
pg01 = primary
pg02 = standby
↓
切换后:
pg01 = standby
pg02 = primary因此:
repmgr 可以编排计划内主备角色互换。
主库突然故障时,repmgrd 可以自动提升 standby,但旧 primary 恢复后通常还需要执行 rejoin 等恢复操作。
一句话理解:
repmgr = 流复制 + 自动监控 + 主备切换 + failover。
六、streaming replication + patroni
patroni 是 postgresql 更完整的高可用管理框架。
主要负责:
- primary 状态检测
- leader 管理
- 自动选主
- 自动 promote
- switchover
- failover
- 角色管理
- 防脑裂
- 故障节点重新加入管理
patroni 通常还需要:
etcd / consul 等 dcs
用于保存集群状态和 leader 信息。
patroni 需要几台服务器?
生产建议至少 3 台
一种最容易理解的三节点部署:
pg01: postgresql patroni etcd pg02: postgresql patroni etcd pg03: postgresql patroni etcd
数据库角色例如:
pg01 = primary pg02 = replica pg03 = replica
同时三台 etcd 组成:
3 节点 etcd 集群
结构:
etcd cluster
┌──────┼──────┐
│ │ │
pg01 pg02 pg03
patroni patroni patroni
primary replica replica这里要注意:
patroni 本身可以管理两个或多个 postgresql 节点,但如果要求企业级自动 ha 和可靠仲裁,dcs 通常要使用奇数节点形成多数派,因此生产上通常至少按 3 台服务器规划。
patroni 角色是否自动转换?
计划 switchover:
切换前: pg01 = primary pg02 = replica pg03 = replica
切换后可以变成:
pg01 = replica pg02 = primary pg03 = replica
也就是:
primary → replica replica → primary
由 patroni 统一管理。
如果 pg01 突然故障:
pg01 primary ×
↓
patroni检测
↓
dcs判断leader状态
↓
选择replica
↓
pg02 promote
↓
pg02 primary一句话理解:
patroni = 流复制 + 自动选主 + 自动切换 + 集群角色管理。
七、四种模式最关键区别
如果只想快速记住 postgresql 的四种部署方式,看这一张表即可:
| 模式 | 最典型部署 | 核心理解 |
|---|---|---|
| 单实例 | 1 台 | 只有数据库,没有主备 |
| streaming replication | 2 台:1主1备 | 数据自动同步,切换主要靠人工 |
| repmgr | 3 台:2数据库 + 1 witness,或1主2备 | 流复制基础上的轻量 ha 管理 |
| patroni | 3 台:1 primary + 2 replica,并配 dcs | 自动选主、自动切换、完整 ha 管理 |
角色转换重点:
| 部署方式 | 备库提升主库 | 原主库自动变备库 | 计划切换角色互换 |
|---|---|---|---|
| streaming replication | ✅ | ❌ | ❌ |
| repmgr | ✅ | ✅ | ✅ |
| patroni | ✅ | ✅ | ✅ |
这里的“自动变备库”主要指 正常的计划 switchover。
如果原 primary 已经宕机:
primary × standby → primary
旧 primary 不可能在故障瞬间同步完成角色转换,恢复后仍需要重新加入集群。
八、最终怎么理解
把这四种模式记成四句话即可:
单实例 = 1台数据库,没有ha
streaming replication = 至少2台,解决数据主备同步
repmgr = 通常3台,在流复制基础上增加自动监控和主备切换
patroni = 生产通常至少3台,在流复制基础上增加自动选主、自动故障切换和完整ha管理
因此,如果企业生产要求:
主库故障能够自动发现、备库自动提升、计划切换后主备角色自动转换,并尽可能减少 dba 人工干预,
就不能只部署 postgresql 原生 streaming replication,而应进一步考虑 repmgr 或 patroni;其中 patroni 更偏向完整的 postgresql 自动高可用架构。
以上就是postgresql四种常见部署模式对比详解的详细内容,更多关于postgresql四种常见部署模式的资料请关注代码网其它相关文章!
发表评论