PostgreSQL【理论篇】06:Patroni + ETCD 原理介绍
·
etcd 和 Patroni是搭建 PG 高可用集群时核心的两个组件。
一、 etcd:集群的“大脑”和“配置中心”
1、核心定义
etcd 是一个分布式、高可用的键值(Key-Value)存储系统,可以把它理解为:
- 集群的“公告栏”:所有节点都能在这里读取/写入关键信息;
- 集群的“锁管理器”:确保同一时间只有一个主库(Primary);
- 集群的“配置中心”:存储PG集群的全局配置、节点状态等。
2、核心特性
它的核心特性是:
- 强一致性:基于 Raft 共识算法,保证所有节点的数据完全一致;
- 高可用:通常部署为 3/5 节点集群,少数节点故障不影响整体可用;
- 轻量级:体积小、资源消耗低,专为分布式系统设计。
3、在PG集群中的具体作用
- 存储集群元数据:比如哪个节点是主库、各从库的状态、PG的配置参数等;
- 实现选主(Leader Election):当主库故障时,etcd 通过 Raft 算法保证只有一个从库能被选为新主,避免“脑裂”;
- 健康检测:Patroni 会定期向 etcd 上报节点状态,etcd 记录各节点的存活情况;
- 配置同步:集群的全局配置(如 PG 监听地址、复制参数)存在 etcd 中,所有节点同步读取,保证配置一致。
4、简单类比
etcd 就像一个“分布式保险柜”:
- 所有节点都知道保险柜的位置,且只有一把“合法钥匙”(主库权限);
- 保险柜里存着“谁是老大(主库)”“集群规则(配置)”;
- 当老大出问题,大家通过保险柜的规则重新选老大,且只有一个新老大能拿到钥匙。
二、 Patroni:PG 集群的“管家”
1、核心定义
Patroni 是一个基于 Python 开发的PostgreSQL 高可用管理工具,它封装了 PG 原生的流复制、主从切换逻辑,对接 etcd(或 Consul/Zookeeper)实现自动化管理。
可以把它理解为:每个 PG 节点上都有一个“管家”(Patroni 进程),这些管家通过 etcd 沟通,共同管理整个集群。
2、核心功能(对 PG 节点的“管家职责”)
- 节点监控:实时监控本地 PG 实例的状态(是否运行、复制延迟、连接数等),并上报到 etcd;
- 自动主从切换:当检测到主库故障时,向 etcd 发起“选主请求”,在 etcd 确认后,将最优的从库提升为主库;
- 自动搭建从库:通过
pg_basebackup自动从主库克隆数据,快速搭建新的从库节点; - PG 配置管理:统一管理 PG 的
postgresql.confpg_hba.conf等配置文件,支持动态修改并生效; - 提供统一接口:通过 REST API 暴露集群状态、执行手动切换/扩容等操作,方便运维和集成。
3、关键特性
- 无侵入:不修改 PG 源码,完全基于 PG 原生功能封装,兼容性好;
- 易扩展:支持动态添加/移除节点,无需停机;
- 灵活配置:可自定义切换策略(如优先选择复制延迟最小的节点当新主);
- 支持手动干预:运维人员可通过命令手动切换主库,满足人工操作需求。
三、etcd + Patroni 的协作流程(PG 高可用核心逻辑)
用一个“主库故障切换”的场景,直观理解它们的配合:
- 正常状态:
- 每个 PG 节点的 Patroni 进程定期向 etcd 上报“心跳”(节点存活、PG 状态);
- etcd 中记录当前主库的标识(如
/{namespace}/leader=pg-node-1)。
- 主库故障:
pg-node-1的 Patroni 停止上报心跳,etcd 检测到主库失联;- 各从库的 Patroni 发现主库故障,向 etcd 发起“竞选主库”的请求。
- 选主与切换:
- etcd 通过 Raft 算法保证只有一个从库(如
pg-node-2)获得“主库锁”; pg-node-2的 Patroni 执行切换操作:提升自己为主库、更新postgresql.conf、通知其他从库重新同步;- etcd 更新“主库标识”为
pg-node-2,所有节点的 Patroni 读取该信息,确认新主。
- etcd 通过 Raft 算法保证只有一个从库(如
- 恢复完成:
- 应用通过 Patroni 提供的接口(或 VIP)连接新主库,集群恢复可用;
- 故障的
pg-node-1修复后,Patroni 自动将其作为从库重新加入集群。
四、总结
- etcd 是集群的“共识层”:负责存储元数据、实现选主、保证一致性,是避免脑裂的核心,部署为 3/5 节点集群保证自身高可用。
- Patroni 是集群的“执行层”:运行在每个 PG 节点上,监控 PG 状态、执行主从切换、管理 PG 配置,是连接 PG 和 etcd 的桥梁。
- 两者配合:Patroni 负责“干活”(监控、切换),etcd 负责“决策”(选主、存配置),共同实现 PG 集群的全自动高可用。
这一组合是目前 PG 高可用的主流方案,核心优势是自动化程度高、稳定可靠,适合生产环境大规模部署。
更多推荐



所有评论(0)