一种PostgreSQL高可用性的实现方法与流程

文档序号:22627629发布日期:2020-10-23 19:36阅读:264来源:国知局
一种PostgreSQL高可用性的实现方法与流程

本发明涉及数据库技术领域,尤其涉及一种postgresql高可用性的实现方法。



背景技术:

层级数据库是基于lsm算法,数据按照不同层级(level)存储在硬盘上的高性能数据库。该数据库支持主从复制架构,分为主库节点和从库节点,主库实时产生增量日志,从库实时同步主库增量日志,增量日志的当前位置称之为同步偏移量;主库上未同步到从库的数据,称之为差异数据,可以通过层级数据库自身接口获取到;一般情况下,主库和从库的同步偏移量是一致的。

在生产环境中,常见的层级数据库使用方式如下:

一、直连方式

客户端在配置文件里设置主库的ip和端口以及用户名密码等信息。

缺点:

1)无任何高可用

这种方式下,一旦主库宕机,客户端读写请求全部失败,服务全部中断,并且服务恢复时间取决于人工处理的速度。

2)人工处理操作复杂

主库一旦宕机,需要人工处理,包括选择新主库,补偿差异数据,恢复新集群,修改客户端配置,操作步骤繁多复杂,时间较长。

3)数据丢失

在人工处理时,为了加快处理速度,缩短主库故障时间,往往忽略主库上的差异数据,造成部分数据丢失。

二、虚拟ip方式

客户端配置虚拟ip,虚拟ip后端挂载层级数据库主库ip和端口,如果主库宕机,需要修改虚拟ip配置,人工重新建立主库,然后将新主库配置到虚拟ip下面。

缺点:

1)主库故障无法自动切换

一旦主库故障,需要人工介入处理,无法实现故障自动切换,可用性比较低

2)操作复杂

需要人工处理,包括选择新主库,修改其他从库配置,以及虚拟ip配置,操作比较复杂,风险较大

3)依赖虚拟ip服务

虚拟ip服务自身存在高可用问题,增加维护成本,如果虚拟ip服务不稳定,同样影响数据库可用性。

4)数据丢失

主库宕机时,未同步到从库的这部分数据会丢失。



技术实现要素:

本发明的技术任务是解决现有技术的不足,提供一种postgresql高可用性的实现方法,以实现高可用性方案的数据可靠性及服务器可用性。

本发明解决其技术问题所采用的技术方案是:

一种postgresql高可用性的实现系统,其特征在于,该系统包含客户端、哨兵单元、代理单元、postgresql集群和存储单元五个部分;

所述客户端通过代理单元读取存储单元上的信息,从而访问数据库集群;

哨兵单元实时监控主库和从库存活状态,如果主库宕机,实现主库故障自动切换,并且在切换过程中,补偿差异数据,从而保证在主库故障时不丢失数据;

所述数据库集群为层级数据库主从复制集群,主库处理读写请求,从库作为备库,或接收读请求。

可选地,所述哨兵单元包含以下模块:

(1)哨兵节点初始化模块

启动每个哨兵节点时,需要传入以下参数:哨兵端口,主库ip和端口,用户名密码以及主库标识符;

启动后,该哨兵节点和主库建立通信,获取到主库和从库节点信息,保存在存储单元里;其中,存储单元保存了主库ip,端口,主库标识符,状态和增量日志文件名;从库的ip,端口,从库标识符,状态,增量日志文件名和同步偏移量;

(2)初始化哨兵集群模块

哨兵节点初始化模块运行结束后,执行如下操作:根据传入的存储单元标识符信息,读取主库和从库信息后与主库从库进行通讯,在指定时间内收到回复,表示状态为存活,否则为故障;

(3)哨兵节点状态检测模块

根据哨兵列表,每个哨兵节点周期性检测其他哨兵节点状态,并更新哨兵列表,检测方式是执行ping命令,在限定时间内返回成功结果,表示存活,否则表示故障;

(4)选择领导哨兵模块

功能:首先调用哨兵节点状态检测模块,检测和主库同机部署的哨兵的存活状态,如果状态为存活,那么该哨兵的角色就是领导哨兵;否则,从哨兵列表里选择第一个存活哨兵节点,作为领导哨兵,如果没有获取到领导哨兵,返回错误;否则返回领导哨兵节点的ip和端口;

(5)管理主库节点模块

首先调用选择领导哨兵模块,得到领导哨兵,然后,领导哨兵周期性执行该模块,比对主库节点和主库列表,如果不一致,则更新主库信息;如果主库状态为存活,返回成功,否则调用选举新主库模块,选择新主库;

(6)管理从库节点模块

领导哨兵周期性执行该模块,该模块功能如下:该模块首先调用管理主库节点模块,获取主库ip和端口信息,然后根据层级数据库自身的接口,获取到所有从库的ip和端口,状态和同步偏移量信息,并比对从库列表,如果不一致,则更新从库列表信息;从库列表里未匹配到的从库节点,将其从列表里删除;

(7)选举新主库模块

领导哨兵调用管理从库节点模块,在从库列表中选择同步偏移量最大的从库,如果多个从库的同步偏移量都等于最大同步偏移量,选择从库列表的第一个符合条件的从库作为新主库,然后调用补偿差异数据模块,否则返回错误;

(8)获取差异数据模块

领导哨兵根据存储单元主库列表中增量日志文件名,获取其最新的偏移量,比对新主库的最大同步偏移量,如果一样,表示不需要补偿增量日志,返回空值;否则,解析最大同步偏移量和故障主库最新偏移量之间的增量日志,称之为差异增量日志,返回差异增量日志信息;

(9)补偿差异数据模块

调用获取差异数据模块,如果存在差异数据,那么,调用层级数据库自身接口,同步这部分数据到新主库;否则跳过此模块,调用重建从库服务模块;

(10)重建从库服务模块

领导哨兵调用补偿差异数据模块后,根据层级数据库自身接口,所有从库重新指向新主库,重新同步新主库的数据;故障主库自动切换过程完成;

可选地,所述代理单元与主库建立连接函数,用于扫描存储单元主库列表,选择主库标识符对应的主库ip和端口,如果状态为故障,返回错误给客户端;否则,与主库建立连接,如果身份验证通过,建立主库连接并返回给客户端;否则,返回错误给客户端。

本发明的一种postgresql高可用性的实现方法与现有技术相比所产生的有益效果是:

1)架构相对简单可靠:采用哨兵模型,技术成熟可靠,多个哨兵节点,避免了哨兵自身的高可用问题;

2)主库故障自动切换:哨兵集群实时监控主库,一旦发现主库故障,立即触发故障切换,在很短时间内完成主库自动切换切换过程不需要人工介入;

3)数据不丢失:哨兵获取故障主库未同步到从库的数据,补偿到新主库和从库中,保证数据不丢失,最大限度保证数据完整性;

4)操作自动化:主库故障切换,从库恢复,补偿差异数据,整个过程自动化,不需要人工干预;

5)可用性高:不需要人工处理,不需要修改客户端配置文件,在最短时间内自动恢复主库服务;

6)负载均衡:所有的哨兵,均可以同时承担客户端请求,从而实现负载均衡,提高吞吐量。

附图说明

为了更清楚地描述本发明一种postgresql高可用性的实现方法的工作原理,下面将附上简图作进一步说明。

附图1是本发明一种postgresql高可用性的实现方法的整体架构图。

具体实施方式

下面将结合本发明实施例中的附图1,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如附图1所示,本发明的一种postgresql高可用性的实现系统,其特征在于,该系统包含客户端、哨兵单元、代理单元、postgresql集群和存储单元五个部分;

所述客户端通过代理单元读取存储单元上的信息,从而访问数据库集群;

哨兵单元实时监控主库和从库存活状态,如果主库宕机,实现主库故障自动切换,并且在切换过程中,补偿差异数据,从而保证在主库故障时不丢失数据;

所述数据库集群为层级数据库主从复制集群,主库处理读写请求,从库作为备库,或接收读请求。

可选地,所述哨兵单元包含以下模块:

(1)哨兵节点初始化模块

启动每个哨兵节点时,需要传入以下参数:哨兵端口,主库ip和端口,用户名密码以及主库标识符;

启动后,该哨兵节点和主库建立通信,获取到主库和从库节点信息,保存在存储单元里;其中,存储单元保存了主库ip,端口,主库标识符,状态和增量日志文件名;从库的ip,端口,从库标识符,状态,增量日志文件名和同步偏移量;

(2)初始化哨兵集群模块

哨兵节点初始化模块运行结束后,执行如下操作:根据传入的存储单元标识符信息,读取主库和从库信息后与主库从库进行通讯,在指定时间内收到回复,表示状态为存活,否则为故障;

(3)哨兵节点状态检测模块

根据哨兵列表,每个哨兵节点周期性检测其他哨兵节点状态,并更新哨兵列表,检测方式是执行ping命令,在限定时间内返回成功结果,表示存活,否则表示故障;

(4)选择领导哨兵模块

功能:首先调用哨兵节点状态检测模块,检测和主库同机部署的哨兵的存活状态,如果状态为存活,那么该哨兵的角色就是领导哨兵;否则,从哨兵列表里选择第一个存活哨兵节点,作为领导哨兵,如果没有获取到领导哨兵,返回错误;否则返回领导哨兵节点的ip和端口;

(5)管理主库节点模块

首先调用选择领导哨兵模块,得到领导哨兵,然后,领导哨兵周期性执行该模块,比对主库节点和主库列表,如果不一致,则更新主库信息;如果主库状态为存活,返回成功,否则调用选举新主库模块,选择新主库;

(6)管理从库节点模块

领导哨兵周期性执行该模块,该模块功能如下:该模块首先调用管理主库节点模块,获取主库ip和端口信息,然后根据层级数据库自身的接口,获取到所有从库的ip和端口,状态和同步偏移量信息,并比对从库列表,如果不一致,则更新从库列表信息;从库列表里未匹配到的从库节点,将其从列表里删除;

(7)选举新主库模块

领导哨兵调用管理从库节点模块,在从库列表中选择同步偏移量最大的从库,如果多个从库的同步偏移量都等于最大同步偏移量,选择从库列表的第一个符合条件的从库作为新主库,然后调用补偿差异数据模块,否则返回错误;

(8)获取差异数据模块

领导哨兵根据存储单元主库列表中增量日志文件名,获取其最新的偏移量,比对新主库的最大同步偏移量,如果一样,表示不需要补偿增量日志,返回空值;否则,解析最大同步偏移量和故障主库最新偏移量之间的增量日志,称之为差异增量日志,返回差异增量日志信息;

(9)补偿差异数据模块

调用获取差异数据模块,如果存在差异数据,那么,调用层级数据库自身接口,同步这部分数据到新主库;否则跳过此模块,调用重建从库服务模块;

(10)重建从库服务模块

领导哨兵调用补偿差异数据模块后,根据层级数据库自身接口,所有从库重新指向新主库,重新同步新主库的数据;故障主库自动切换过程完成;

可选地,所述代理单元与主库建立连接函数,用于扫描存储单元主库列表,选择主库标识符对应的主库ip和端口,如果状态为故障,返回错误给客户端;否则,与主库建立连接,如果身份验证通过,建立主库连接并返回给客户端;否则,返回错误给客户端。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1