pg_auto_failover: PostgreSQL 自动故障转移和高可用

五月 8, 2024

摘要:pg_auto_failover 是一个用于 PostgreSQL 自动故障转移和高可用的扩展和服务。

目录

pg_auto_failover 是一个 PostgreSQL 的扩展,用于对 PostgreSQL 集群进行监控和故障转移。它在简单性和正确性方面进行了优化。

pg_auto_failover 支持多种 PostgreSQL 部署架构,可为您的 PostgreSQL 服务实现安全的自动故障转移。可以只使用两个数据节点来开始,监控器会赋予它们主节点和辅助节点的角色。

单备架构

带有一个主节点和备节点的 pg_auto_failover 架构

带有一个主节点和备节点的 pg_auto_failover 架构

pg_auto_failover 可为您的 PostgreSQL 服务实现业务连续性。pg_auto_failover 使用具有自动故障转移功能的多个节点,来组成单个 PostgreSQL 服务,并自动执行 PostgreSQL 维护操作,以保证其用户和应用程序的服务可用性。

为此,对每个 PostgreSQL 服务 pg_auto_failover 会使用三个节点(机器、服务器):

  • 一个 PostgreSQL 主节点,
  • 一个 PostgreSQL 辅助节点,使用同步复制的热备模式,
  • 一个 pg_auto_failover 监控器节点,它既充当见证方,又充当处理流程的协调者。

pg_auto_failover 监控器实现了一个状态机,并基于 PostgreSQL 内置功能来提供 HA。比如当检测到辅助节点不可用时,或者报告的延迟超过定义的阈值(默认值为 1 个 WAL 文件或 16 MB,请参见 pg_auto_failover 监控器上的 GUC 参数pgautofailover.promote_wal_log_threshold)时,监控器将从主节点上的 synchronous_standby_names 设置中删除它。在辅助服务器恢复到正常状态之前,不允许进行故障切换和主动切换操作,以防止数据丢失。

pg_auto_failover 由以下部分组成:

  • 名为pgautofailover的 PostgreSQL 扩展
  • 用来操作 pg_auto_failover 监控器的 PostgreSQL 服务
  • 用来操作 PostgreSQL 实例的 pg_auto_failover 守护者,参见 pg_autoctl run

多备架构

独立 PostgreSQL 服务的 pg_auto_failover 架构

带有一个主节点和两个备节点的 pg_auto_failover 架构

在图中的架构中,pg_auto_failover 使用具有自动故障转移和数据冗余功能的多个节点,来组成单个 PostgreSQL 服务,以实现业务连续性和数据可用性。即使在生产系统中失去任何 PostgreSQL 节点后,此架构也会在两个不同的节点上维护两个数据副本。

当使用多个备节点时,可以使用 pg_auto_failover 实现不同的架构,具体取决于生产设置所需的目标和权衡。

三备节点(1 个异步)的多备架构

带有一个主节点和三个备节点的 pg_auto_failover 架构

带有一个主节点和三个备节点的 pg_auto_failover 架构

设置上面的三个参数时,可以根据您的生产需要,设计各种不同的 PostgreSQL 架构。

在这种情况下,系统设置了两个备节点参与复制仲裁,以允许number_sync_standbys = 1 。系统始终至少维护了数据集的两个副本:一个在主节点上,另一个在节点 B 或节点 C 上。每当我们失去其中一个节点时,我们可以保证数据集有两个副本。

除此之外,我们还有备用服务器 D,它被设置为不参与复制仲裁。节点 D 将不会出现在节点的synchronous_standby_names列表中。此外,节点 D 使用candidate-priority = 0设置为,永远不会成为故障转移的候选者。

此架构适用于节点 A、B 和 C 部署在同一个数据中心或可用区,而节点 D 部署在另一个数据中心或可用区的场景。这三个节点的设置是为了支持生产环境的主要访问请求,并实现了 PostgreSQL 服务和数据集的高可用。

节点 D 也可以用来实现业务连续性,以防第一个数据中心异常,或者也可以用在部署另一个应用程序域上进行报告分析的需要。

了解更多

使用 Patroni 实现 PostgreSQL 的高可用

repmgr: 概述

pg_auto_failover 项目