PIGSTY

高可用性

具有自动故障转移和自愈能力的企业级高可用性

Pigsty 使用 Patroni 为 PostgreSQL 实现高可用性,确保自动故障转移。

pigsty-ha

主节点故障 RTO ≈ 30s,RPO < 1MB,副本故障 RTO≈0(重置当前连接)


概述

Pigsty 的 PostgreSQL 集群具有由 PatroniEtcdHAProxy 支持的内置高可用性。

当您在 PostgreSQL 集群中有两个或更多实例时,您就能够从硬件故障中自愈,无需任何进一步配置——只要集群中的任何实例存活,集群就能提供服务。客户端只需连接到集群中的任何节点即可获得完整服务,无需担心复制拓扑变化。

默认情况下,主节点故障的恢复时间目标(RTO)约为 30s ~ 60s,数据恢复点目标(RPO)< 1MB;对于备用节点故障,RPO = 0,RTO ≈ 0(瞬时)。在一致性优先模式下,保证故障转移期间零数据丢失:RPO = 0。这些指标可以根据您的实际硬件条件和可靠性要求 按需配置

Pigsty 集成了 HAProxy 负载均衡器进行自动流量切换,为客户端提供多种访问方法,如 DNS/VIP/LVS。除了偶发的中断外,故障转移和切换对业务端几乎不可感知,这意味着应用程序不需要修改连接字符串或重启。

关键指标

RTO ~ 30s
主节点故障
RPO < 1MB
异步模式 RPO
RTO ~ 0s
副本故障
RPO = 0
同步模式

高可用性解决的问题

高可用性解决关键的运营挑战:

数据安全

提升可用性:RPO ≈ 0,RTO < 30s,增强数据保护

滚动维护

无缝维护:最小化维护窗口,运营便利

硬件故障

自愈能力:无需人工干预即可从硬件故障中自动恢复

负载分布

读扩展:在备用实例间分布只读查询

具体优势

  • 增强数据安全性:将数据安全 CIA 的可用性方面提升到新高度
  • 滚动维护能力:实现最小停机时间的无缝维护
  • 硬件故障恢复:无需人工干预即可从硬件故障中自愈
  • 负载共享:只读请求可以分布在备用实例间

高可用性的成本

实施 HA 会引入某些权衡和要求:

基础设施要求:HA 需要至少 3 个节点 和额外的基础设施依赖。

资源要求

  • 最小集群规模:至少 3 个节点以实现适当的共识
  • 额外基础设施:需要共识存储(Etcd)和负载均衡器
  • 资源开销:额外的 CPU、内存和网络资源
  • 运营复杂性:增加的监控和管理要求

限制

高可用性 无法防止

  • 人为错误和操作失误
  • 导致数据损坏的软件缺陷
  • 逻辑数据删除或损坏

对于这些场景,需要额外的恢复策略:

  • 延迟集群 防护逻辑损坏
  • 时间点恢复 进行细粒度数据恢复
  • 定期备份 用于灾难恢复场景

架构

Pigsty 的 HA 架构利用多组件设计消除单点故障:

Patroni

集群管理:编排 PostgreSQL 进程并处理自动故障转移

Etcd

共识存储:提供分布式配置和领导者选举

HAProxy

负载均衡器:路由流量并提供服务发现

VIP Manager

虚拟 IP:用于无缝连接的可选第二层 VIP 绑定

组件角色

集群编排器

  • 管理 PostgreSQL 服务器进程
  • 处理自动故障转移和切换
  • 监控集群健康和拓扑
  • 配置流复制
  • 提供集群管理 REST API
# Patroni 配置示例
patron:
  name: pg-test-1
  scope: pg-test
  bootstrap:
    dcs:
      ttl: 30
      loop_wait: 10
      retry_timeout: 30

分布式配置存储

  • 存储集群配置和状态
  • 提供领导者选举机制
  • 确保所有节点的一致视图
  • 优雅处理网络分区
  • 维护集群成员信息
# Etcd 集群配置
etcd_cluster: etcd
etcd_safeguard: false
etcd_clean: true

流量路由器和负载均衡器

  • 将读/写流量路由到适当的节点
  • 为数据库实例提供健康检查
  • 提供多个服务端点
  • 处理连接池和负载分布
  • 支持 SSL 终止和连接限制
# HAProxy 服务端点
primary:5433    # 主节点读写流量
replica:5434    # 副本只读流量
default:5436    # 故障转移感知连接
offline:5438    # 专用离线查询

虚拟 IP 管理

  • 管理第二层虚拟 IP 地址
  • 提供无缝客户端连接
  • 在故障转移期间处理 VIP 迁移
  • 支持多个 VIP 接口
  • 用于简化客户端访问的可选组件
# VIP 配置
vip_enabled: true
vip_address: 10.10.10.99/24
vip_interface: eth0

实现

Pigsty 的 HA 实现遵循 PostgreSQL 集群的成熟模式:

复制架构

流复制

PostgreSQL 使用内置流复制在主节点和备用节点之间进行数据同步。

基于共识的领导

Patroni 使用 Etcd 进行分布式共识来选举集群领导者并管理拓扑变化。

自动故障转移

当主节点失败时,Patroni 自动提升最新的备用节点成为新的主节点。

流量重路由

HAProxy 检测拓扑变化并自动将流量路由到新的主实例。

故障场景

主节点故障处理过程

  1. 检测:Patroni 检测主节点故障(15-30 秒)
  2. 领导者选举:Etcd 协调新领导者选择
  3. 提升:最新的备用节点被提升为主节点
  4. 重新配置:剩余的备用节点重新配置到新主节点
  5. 流量切换:HAProxy 将流量重定向到新主节点

写服务中断:故障转移过程中 15-30 秒

备用节点故障处理过程

  1. 检测:立即检测到备用节点故障
  2. 流量重路由:HAProxy 从池中移除故障节点
  3. 服务连续性:只读查询在剩余备用节点上继续
  4. 自动恢复:节点恢复时自动重新加入集群

最小影响:只读查询仅经历短暂中断

网络分区处理

  1. 防止脑裂:Etcd 共识防止多个主节点
  2. 仲裁要求:需要大多数节点进行操作
  3. 优雅降级:少数分区中的只读模式
  4. 自动恢复:分区愈合时恢复正常操作

仲裁依赖:需要大多数共识节点保持运行


权衡

Pigsty 提供可配置参数来平衡恢复速度和数据一致性:

恢复时间目标(RTO)

pg_rto 参数控制故障转移时间和敏感性:

# RTO 配置
pg_rto: 30  # 默认:30 秒

较低的 RTO 值:

  • ✅ 更快的故障转移响应
  • ✅ 减少服务中断
  • ❌ 更高的误报风险
  • ❌ 可能导致不必要的故障转移

较高的 RTO 值:

  • ✅ 更稳定,较少误报
  • ✅ 对网络故障有更好的容忍度
  • ❌ 更长的服务中断
  • ❌ 对真实故障的延迟响应

恢复点目标(RPO)

pg_rpo 参数限制故障转移期间的潜在数据丢失:

# RPO 配置
pg_rpo: 1048576  # 默认:1MB

较低的 RPO 值:

  • ✅ 更好的数据一致性
  • ✅ 最小的数据丢失风险
  • ❌ 可能延迟故障转移
  • ❌ 可能影响可用性

较高的 RPO 值:

  • ✅ 更快的故障转移过程
  • ✅ 更好的可用性
  • ❌ 更多数据丢失的可能性
  • ❌ 一致性权衡

配置示例

# 零数据丢失配置
synchronous_mode: true
synchronous_mode_strict: true
pg_rpo: 0
pg_rto: 60
synchronous_standby_names: 'ANY 1 (*)'

使用场景:金融系统、关键交易数据

# 快速故障转移配置
synchronous_mode: false
pg_rpo: 16777216  # 16MB
pg_rto: 15
max_replication_slots: 16

使用场景:高流量应用、读重型工作负载

# 默认平衡配置
synchronous_mode: false
pg_rpo: 1048576   # 1MB
pg_rto: 30
max_replication_slots: 8

使用场景:大多数生产环境

网络质量影响

网络条件显著影响 HA 行为:

  • 高质量网络:可以安全使用较低的 RTO 值
  • 不稳定网络:需要较高的 RTO 以防止误报
  • WAN 部署:需要仔细调整超时参数
  • 本地网络:可以优化更快的故障转移

监控和可观测性

Pigsty 为 HA 集群健康提供全面监控:

关键指标

集群状态

监控集群拓扑、领导者状态和成员健康

复制延迟

跟踪所有副本的复制延迟和同步状态

故障转移事件

记录并分析故障转移事件及其影响

性能

监控查询性能和连接健康

仪表板集成

Pigsty 包含用于 HA 监控的预构建 Grafana 仪表板:

  • 集群概览:实时集群拓扑和健康
  • 复制监控:延迟指标和同步状态
  • 故障转移分析:历史故障转移事件和时间
  • 性能指标:正常和故障转移场景下的查询性能

最佳实践

部署建议

反亲和性:在不同的物理主机、机架或可用区部署集群节点。

  • 硬件多样性:使用不同的硬件配置以避免常见故障模式
  • 网络冗余:确保集群节点间有多条网络路径
  • 存储考虑:使用本地存储获得最佳性能,特定用例使用共享存储
  • 监控设置:在投产前实施全面监控

运营指南

  • 定期测试:在非生产环境中执行受控的故障转移测试
  • 容量规划:为故障转移场景适当调整集群节点大小
  • 备份策略:维护独立于 HA 设置的定期备份
  • 文档:保持紧急程序运行手册的更新

常见陷阱

避免这些常见错误:

  • 节点间网络带宽不足
  • 复制延迟监控不充分
  • 不定期测试故障转移程序
  • 防火墙配置不正确

总结

Pigsty 的高可用性解决方案提供:

  • 自动故障转移,RTO 不到一分钟
  • 可配置一致性,具有 RPO 控制
  • 自愈能力,用于硬件故障
  • 负载均衡,用于读扩展
  • 最小运营开销,具有自动化管理

Patroni、Etcd 和 HAProxy 的组合创建了一个强大的、生产就绪的 HA 解决方案,自动处理大多数故障场景,同时提供基于特定要求调整行为的灵活性。


高可用性不仅仅是技术——它是构建您的业务可以依赖的弹性系统。