PostgreSQL 的高可用,还可以用简单的扩展搞定?

数据库 PostgreSQL
pg_auto_failover 支持多种 PostgreSQL 部署架构,可为您的 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

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

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

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

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

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

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

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

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

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

责任编辑:武晓燕 来源: 红石PG
相关推荐

2020-07-16 08:32:16

JavaScript语言语句

2024-08-13 11:07:45

2012-10-12 10:13:26

eclips代码编写Editplus

2021-02-01 13:35:28

微信Python技巧

2019-09-03 10:19:58

Kubernetes本地负载命令

2024-06-05 12:10:02

PostgreSQL索引统计

2017-08-17 16:50:19

自然语言Word2Vec嵌入

2017-07-10 17:25:40

开发单号高可用

2022-09-26 07:32:24

开发接口编程

2012-11-14 15:25:58

2019-08-09 08:33:36

PostgreSQL数据库数据

2021-11-16 12:25:14

jsPPT前端

2011-06-16 12:08:55

笔记本体验

2019-08-26 08:36:09

负载均衡高可用Nginx

2020-06-03 10:54:28

戴尔

2011-01-04 14:27:50

安装linux方法

2020-10-28 08:07:58

TCP负载均衡网络协议

2017-05-08 08:44:07

TCP负载均衡扩展性架构

2018-07-31 10:20:54

WindowsDocker Linux

2023-04-03 08:26:01

systemd运维
点赞
收藏

51CTO技术栈公众号