当前位置: 代码网 > it编程>数据库>MsSqlserver > PostgreSQL四种常见部署模式对比详解

PostgreSQL四种常见部署模式对比详解

2026年10月10日 • MsSqlserver •我要评论
repmgr 和 patroni 都不是 postgresql 数据库自带组件,而是需要额外安装的第三方高可用管理软件。postgresql 本身自带的是 streaming replication(

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 replication2 台:1主1备数据自动同步,切换主要靠人工
repmgr3 台:2数据库 + 1 witness,或1主2备流复制基础上的轻量 ha 管理
patroni3 台: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四种常见部署模式的资料请关注代码网其它相关文章!

赞 (0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com