pg_auto_failover是postgresql的一个扩展,用于监控和管理postgres集群,自动触发故障转移。pg_auto_failover相比于patroni、repmgr、stolon和pgpool-ii配置更简单,运维更方便。下面介绍下pg_auto_failover几种常用的架构。
单备库架构
pg_auto_failover一个主库,一个备库的体系架构图:
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一个主库,两个备库的体系架构图:
在如图所示的体系结构中,pg_auto_failover通过使用具有自动故障转移和数据冗余多个postgresql实例来实现单个postgresql服务,从而实现业务连续性和数据可用性。即使在生产系统中丢失任何postgres节点,该体系结构仍在两个不同的节点上维护数据的两个副本。
当使用多个备用数据库时,pg_auto_failover可以实现不同的架构,这取决于生产设置所需的目标和权衡。
多备库架构之三备库节点
pg_auto_failover一个主库,三个备库的体系架构图:
通过设置上述三个参数,来构建生产环境不同的postgres架构。
上图架构下,系统设置有两个参与复制仲裁的备用节点(number_sync_standbys = 1)。系统始终至少维护两个数据集副本:一个在主数据库上,另一个在节点b或节点d上。每当丢失其中一个节点时,我们都可以保证该数据集的两个副本数据集。
除此之外,我们还有备用服务器c,它已设置为不参与复制仲裁。在节点synchronous_standby_names列表中找不到节点c。 而且,节点c的设置方式永远不会成为故障转移的候选者(candidate-priority = 0)。
此架构适合以下应用场景:节点a,b和d部署在同一数据中心或可用性区域中,而节点c部署在另一个数据中心或可用性区域中。设置这三个节点以支持主要的生产流量并实现postgres服务和数据集的高可用性。可能会在第一个数据中心丢失的情况下为业务连续性设置节点c,或者可能是为了在另一个应用程序域上部署。