高可用性

久经实战考验的业界 PostgreSQL 高可用最佳实践

确保软硬件故障快速自愈,流量自动切换,确保您的数据坚若磐石

快速恢复

RTO < 30秒

主库故障切换等待 30 秒避免误判,可调整

从库故障与/动切换瞬间闪断完成,RTO ≈ 0

数据安全

RPO = 0

同步模式下,确保已提交数据零丢失

可通过异步模式提高吞吐:RPO < 1MB

持续运行

故障自愈

故障后应用无需重启,集群拓扑对应用透明

只要集群任意成员存活,即可对外提供服务

Pigsty 架构图

高可用架构说明

高可用解决什么问题?

  • 将数据安全C/IA中的可用性提高到一个新高度:RPO ≈ 0, RTO < 30s。

  • 获得无缝滚动维护的能力,最小化维护窗口需求,带来极大便利。

  • 硬件故障可以立即自愈,无需人工介入,运维DBA可以睡个好觉。

  • 从库可以用于承载只读请求,分担主库负载,让资源得以充分利用。

高可用有什么代价?

  • 基础设施依赖:高可用需要依赖 DCS (etcd/zk/consul) 提供共识

  • 起步门槛增加:一个有意义的高可用部署环境至少需要 三个节点

  • 额外的资源消耗:一个新从库需要消耗一份额外存储计算资源

  • 复杂度代价显著升高:备份成本显著加大,需要使用工具封装复杂度

配置策略RTORPO
单机 + 什么也不做 数据永久丢失,无法恢复 数据全部丢失
单机 + 基础备份 取决于备份大小与带宽(几小时) 丢失上一次备份后的数据(几个小时到几天)
单机 + 基础备份 + WAL归档 取决于备份大小与带宽(几小时) 丢失最后尚未归档的数据(几十MB)
主从 + 手工故障切换 十分钟 丢失复制延迟中的数据(约百KB)
主从 + 自动故障切换 一分钟内 丢失复制延迟中的数据(约百KB)
主从 + 自动故障切换 + 同步提交 一分钟内 无数据丢失

因为复制实时进⾏,所有变更被⽴即应⽤⾄从库,因此高可用架构⽆法应对⼈为错误与软件缺陷导致的数据误删误改。

高可用实现方式

Pigsty 的高可用架构基于以下成熟技术构建:

PostgreSQL 流复制

PostgreSQL 主从物理复制
主库出现故障时,备考将接管

Patroni

管理 PostgreSQL 集群
协调高可用操作

Etcd

分布式配置存储
主库选举与配置存储

HAProxy

负载均衡器,分发流量
对外暴露服务,自动切换流量

高可用权衡考量

恢复时间目标 (RTO)

默认 30 秒,可通过 pg_rto 配置。较低的值减少停机时间但增加误判故障转移的可能性。 较高的值增加稳定性但延长恢复时间。

恢复点目标 (RPO)

默认 1MB,可通过 pg_rpo 配置。较低的值最小化数据丢失但可能阻止自动故障转移。 同步复制可实现零 RPO,但会牺牲一定的性能。

PIGSTY