基于pgpool- II和异步流复制的高可用方案
连接池:pgpool提供连接池功能,降低建立连接带来的开销,同时增加系统的吞吐量
负载均衡:如果数据库运行在复制模式或主备模式下,select语句运行在集群中任何一个节点都能返回一致的结果,pgpool能将查询语句分发到集群的各个数据库中,从而提升系统的吞吐量,负载均衡适用于只读场景
高可用:当集群中的主库不可用时, pgpool能够探测到并且激活备库,实现故障转移
复制:pgpool可以管理多个postgresql数据库,这是pgpool内置的复制特性,也可以使用外部复制方式,例如postgresql的流复制
pgpool的运行模式有以下四种,pgpool运行时四种模式之间不能在线切换。
流复制模式:使用postgreql流复制方式,psql流复制负责pgpool后端数据库数据同步。这种模式支持负载均衡
主备模式:使用第三方工具Slony对pgpool后端数据进行数据同步,不推荐这种方式
内置复制模式:pgpool负责后端数据库数据同步,pgpool节点上的写操作需等待所有后端数据库将数据写入后才向客户端返回成功。是强同步复制方式
原始模式:这种模式pgpool不负责后端数据库同步,数据库的数据同步由用户负责。这种模式不支持负载均衡
pgpool官方推荐流复制模式
watchdog是pgpool的核心组件,启动pgpool时会启动watchdog子进程,主要作用为:
和pgpool后端psql数据库节点以及远程pgpool节点进行通信
对远程pgpool节点是否存活进行检查
当watchfog子进程启动时,堆本地pgpool的配置和远程pgpool的配置参数进行检查,并且输出本地和远程pgpool不一致的参数
当pgpool主节点宕机时,watchdog集群将选出新的watchdog主节点
当pgpool备节点激活成主节点时,watchdog负责将VIP漂移到新的pgpool节点
基于keepalived+异步流复制实现高可用
keepalived主要探索postgresql主库是否存活,如果keepalived主节点或主库故障,keepalived备节点将接管VIP并且激活流复制备库,从而实现高可用
此方案中keepalived主要监控流复制主库、备库是否存活,如果主库故障将进行故障转移,当然,keepalived程序自身也能做到高可用,当keepalived主节点宕掉时,VIP能切换到keepalived备节点
pgpool的高可用方案虽然实现故障转移,但主备切换逻辑并不严谨,比如备库切换成主库前没有对主备延迟进行判断
keepalived的高可用方案对主备切换逻辑进行了完善,比如激活备库首先检测备库状态,并计算主备延时,只有备库正常同时主备延时在指定范围内才触发主备切换,激活备库前会先通过远程管理卡关闭老的主库主机,当老的主库主机关闭后再激活备库
网友评论