暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

PostgreSQL高可用集群之pg_auto_failover介绍

原创 贺晓群 2020-12-05
4895

pg_auto_failover是PostgreSQL的一个扩展,用于监控和管理Postgres集群,自动触发故障转移。pg_auto_failover相比于Patroni、repmgr、Stolon和pgPool-II配置更简单,运维更方便。下面介绍下pg_auto_failover几种常用的架构。

单备库架构

pg_auto_failover一个主库,一个备库的体系架构图:
archsinglestandby.svg
pg_auto_failover为您的PostgreSQL服务实现业务连续性。pg_auto_failover使用具有自动故障转移功能的多个节点来实现单个PostgreSQL服务,并以保证该服务对其用户和应用程序可用性的方式自动化PostgreSQL维护操作。

为此,pg_auto_failover每个PostgreSQL服务使用三个节点:

  • PostgreSQL主节点;
  • PostgreSQL第二节点,使用同步热备;
  • 一个既充当监控者又充当协调者的pg_auto_failover Monitor节点。

pg_auto_failover监视器实现一个状态机,并依赖于PostgreSQL内核来管理HA。例如:当检测到备用节点不可用时,或者报告其滞后的WAL超过定义的阈值时(默认为1个WAL文件或16MB,可在pg_auto_failover监视器上查看 pgautofailover.promote_wal_log_threshold GUC),这是监视器会从主节点的synchronous_standby_names参数中移除备节点。在备节点恢复正常运行之前,不允许进行故障转移和切换操作,以防止数据丢失,当备节点已恢复或WAL赶上到定义的阈值内时,同步热备将自动恢复。

两备库架构

pg_auto_failover一个主库,两个备库的体系架构图:
archmultistandby.svg
在如图所示的体系结构中,pg_auto_failover通过使用具有自动故障转移和数据冗余多个PostgreSQL实例来实现单个PostgreSQL服务,从而实现业务连续性和数据可用性。即使在生产系统中丢失任何Postgres节点,该体系结构仍在两个不同的节点上维护数据的两个副本。

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

多备库架构之三备库节点

pg_auto_failover一个主库,三个备库的体系架构图:
archthreestandbyoneasync.svg
通过设置上述三个参数,来构建生产环境不同的Postgres架构。

上图架构下,系统设置有两个参与复制仲裁的备用节点(number_sync_standbys = 1)。系统始终至少维护两个数据集副本:一个在主数据库上,另一个在节点B或节点D上。每当丢失其中一个节点时,我们都可以保证该数据集的两个副本数据集。

除此之外,我们还有备用服务器C,它已设置为不参与复制仲裁。在节点synchronous_standby_names列表中找不到节点C。 而且,节点C的设置方式永远不会成为故障转移的候选者(candidate-priority = 0)。

此架构适合以下应用场景:节点A,B和D部署在同一数据中心或可用性区域中,而节点C部署在另一个数据中心或可用性区域中。设置这三个节点以支持主要的生产流量并实现Postgres服务和数据集的高可用性。可能会在第一个数据中心丢失的情况下为业务连续性设置节点C,或者可能是为了在另一个应用程序域上部署。

最后修改时间:2021-06-24 20:35:40
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论