分布式数据库系统的HA组件选主方法及其系统与流程

文档序号:11233965阅读:508来源:国知局
分布式数据库系统的HA组件选主方法及其系统与流程

本发明涉及分布式数据库领域,尤其涉及一种分布式数据库系统的ha组件选主方法及其系统。



背景技术:

大数据时代,分布式数据库成为数据存储的必要基础设施。分布式数据库系统存在一些问题,其中,对于大多数应用服务来说,可用性问题是一个基本问题。提供一定程度高可用性服务,是分布式数据库系统必备的特征之一。

目前有很多分布式数据库系统的高可用性方案,常采用单节点高可用组件进行故障检测和故障处理。该方案存在单点故障,在高可用性组件本身异常时,将无法提供高可用性服务。

对于高可用性组件(ha组件)多节点部署的分布式高可用性系统,可以解决单点问题。但是,多个高可用性组件节点之间必须确定主备关系,只有主节点可以对故障进行处理,否则多个高可用性节点的操作很容易造成冲突。如果采用固定的主备角色关系,当主节点异常,其它备节点将不能进行故障处理,因此,常见的该类方案采用动态的主备角色关系。通过一定的算法确定主备节点,当主节点异常时,再从备节点中选出一个节点作为主节点。选主算法通常比较复杂,在网络不稳定的时候,易出现脑裂现象,即同一时刻存在多于一个的主节点。而理论上能保证一致性的算法,如常见的paxos算法、raft算法等,实现比较困难,容易产生死锁。

在申请号为201410854727.6的专利公开文件中,提出了一种应用于分布式数据库的解决2pc模型单点故障问题的方法,包括:建立一列从协调者队列,存入多个站点作为从协调者,其中每个从协调者的功能和协调者是相同的;协调者与多个参与者之间按照两阶段提交协议通过数据包进行通信;同时,协调者和所有从协调者之间每隔一时间段进行一次通信;若从协调者在这个时间段后没有收到协调者发送的消息,则认为协调者发生阻塞,系统立即根据一定算 法从协调者队列中选择一从协调者作为新的协调者与多个参与者进行通信。但该方法不能完全地防止脑裂现象,且协调者之间需要定时互相通信,可能会降低效率。



技术实现要素:

本发明所要解决的技术问题是:提供一种分布式数据库系统的ha组件选主方法及其系统,可确定唯一的主节点。

为了解决上述技术问题,本发明采用的技术方案为:一种分布式数据库系统的ha组件选主方法,包括:

各个ha组件发送写请求给协调组件;

协调组件根据所述写请求,分别赋予各个ha组件唯一的标识,获取各个ha组件与其对应标识的关联信息;

一ha组件获取所述关联信息;

所述一ha组件依据所述关联信息获取与其对应的标识;

判断所述标识是否为预设的主节点标识。

本发明还涉及一种分布式数据库系统的ha组件选主系统,包括:

发送模块,用于各个ha组件发送写请求给协调组件;

赋予模块,用于协调组件根据所述写请求,分别赋予各个ha组件唯一的标识,获取各个ha组件与其对应标识的关联信息;

第一获取模块,用于一ha组件获取所述关联信息;

第二获取模块,用于所述一ha组件依据所述关联信息获取与其对应的标识;

判断模块,用于判断所述标识是否为预设的主节点标识。

本发明的有益效果在于:通过在分布式数据库的总体架构中引入协调组件,通过协调组件实现ha组件之间的相互通信,可提高ha组件的效率;根据协调组件的顺序一致性等特性,赋予各个ha组件唯一的标识,可使各个ha组件根据所述标识的唯一性,确定出唯一的主节点,进而防止脑裂现象。

附图说明

图1为本发明一种分布式数据库系统的ha组件选主方法的流程图;

图2为本发明实施例一的分布式数据库系统的架构示意图;

图3为本发明实施例一的方法流程图;

图4为本发明一种分布式数据库系统的ha组件选主系统的结构示意图;

图5为本发明实施例二的系统结构示意图。

标号说明:

1、数据库集群;2、ha组件集群;3、数据库代理;4、协调组件;

101、发送模块;102、赋予模块;103、第一获取模块;104、第二获取模块;105、判断模块;106、第一判定模块;107、第一删除模块;108、通知模块;109、选定模块;110、第二判定模块;111、第二删除模块。

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图详予说明。

本发明最关键的构思在于:基于协调组件实现ha组件之间的角色分配,根据唯一的标识,确定出唯一的主节点。

请参阅图1,一种分布式数据库系统的ha组件选主方法,包括:

各个ha组件发送写请求给协调组件;

协调组件根据所述写请求,分别赋予各个ha组件唯一的标识,获取各个ha组件与其对应标识的关联信息;

一ha组件获取所述关联信息;

所述一ha组件依据所述关联信息获取与其对应的标识;

判断所述标识是否为预设的主节点标识。

从上述描述可知,本发明的有益效果在于:可根据唯一的标识,确定唯一的主节点,防止脑裂现象。

进一步地,所述写请求包括与ha组件唯一对应的ha组件数据。

由上述描述可知,通过唯一对应ha组件的ha组件数据,可使各个ha组 件唯一获取到与其对应的标识,防止出现一个ha组件获取到多个标识的情况。

进一步地,所述“协调组件根据所述写请求,分别赋予各个ha组件唯一的标识,获取各个ha组件与其对应标识的关联信息”具体为:

协调组件根据收到各个ha组件的所述写请求的时间先后,分别赋予各个ha组件一个依次递增的序列号,获取各个ha组件与其序列号的关联信息。

由上述描述可知,根据协调组件的特性,各个ha组件均对应一个不重复的序列号,可根据判断唯一的序列号是否为预选为备用主节点的序列号来快速地确定出唯一的主节点。

进一步地,所述“判断所述标识是否为预设的主节点标识”之后,进一步包括:

若所述标识为预设的主节点标识,则判定所述一ha组件为主节点;

若原主节点故障,则协调组件删除原主节点与其对应标识的关联信息;

协调组件发送所述原主节点异常的事件通知给各个ha组件;

选定已判定为主节点的所述一ha组件为新的主节点。

进一步地,所述“判断所述标识是否为预设的主节点标识”之后,进一步包括:

若所述标识不是预设的主节点标识,则判定所述一ha组件为从节点;

若从节点故障,则协调组件删除所述从节点与其对应标识的关联信息。

由上述描述可知,在节点发生故障时,协调组件自动删除对应的关联信息,防止出现故障的节点被选为主节点的情况;若为主节点发生故障,则在启动且正常的从节点中选出新的主节点,解决了单点故障问题,可继续执行高可用性功能。

请参照图4,本发明还提出一种分布式数据库系统的ha组件选主系统,包括:

发送模块,用于各个ha组件发送写请求给协调组件;

赋予模块,用于协调组件根据所述写请求,分别赋予各个ha组件唯一的标识,获取各个ha组件与其对应标识的关联信息;

第一获取模块,用于一ha组件获取所述关联信息;

第二获取模块,用于所述一ha组件依据所述关联信息获取与其对应的标识;

判断模块,用于判断所述标识是否为预设的主节点标识。

进一步地,所述写请求包括与ha组件唯一对应的ha组件数据。

进一步地,所述赋予模块具体用于协调组件根据收到各个ha组件的所述写请求的时间先后,分别赋予各个ha组件一个依次递增的序列号,获取各个ha组件与其序列号的关联信息。

进一步地,还包括:

第一判定模块,用于若所述标识为预设的主节点标识,则判定所述一ha组件为主节点;

第一删除模块,用于若原主节点故障,则协调组件删除原主节点与其对应标识的关联信息;

通知模块,用于协调组件发送所述原主节点异常的事件通知给各个ha组件;

选定模块,用于选定已判定为主节点的所述一ha组件为新的主节点。

进一步地,还包括:

第二判定模块,用于若所述标识不是预设的主节点标识,则判定所述一ha组件为从节点;

第二删除模块,用于若从节点故障,则协调组件删除所述从节点与其对应标识的关联信息。

实施例一

请参照图1,本发明的实施例一为:一种分布式数据库系统的ha组件选主方法,请参照图2,所述分布式数据库系统包括数据库集群1、ha组件集群2、数据库代理3和协调组件4。所述数据库集群1由至少一个数据库组构成,一个数据库组包含一个主数据库节点和至少一个备数据库节点。所述ha组件集群2中的ha组件提供数据库集群1的高可用性功能。所述协调组件4保存数据库集群1信息,包括所有的数据库组和其中的数据库节点的主备信息等,当数据库集群1信息发生改变时,主动通知数据库代理3和ha组件。所述数据库代理3 从协调组件4读取整个数据库集群1信息,根据一定的分片规则,将客户端的请求路由到对应的数据库节点。当数据库集群1信息发生变化时,由协调组件4通知数据库代理3更新信息。ha组件从协调组件4读取数据库集群1信息,随后定期对数据库节点进行故障检测,若有故障发生,则进行相应的故障处理。

所述ha组件采用分布式多节点部署,避免单点问题。每个ha组件有两种角色状态,主节点和从节点。在一个分布式部署的ha组件集群2中,同一时刻有且只有一个ha组件节点是主节点,其它ha组件节点均是从节点。

所述协调组件4可多节点分布式部署,且应具有如下特征:

顺序一致性,按照客户端发送请求的顺序更新数据;

原子性,更新要么成功,要么失败,不会出现部分更新;

单一性,无论客户端连接哪个节点,都会看到同一个视图;

可靠性,一旦数据更新成功,将一直保持,直到新的更新;

及时性,客户端会在一个确定的时间内得到最新的数据。

图2中的实线表示数据传输,点划线表示心跳,虚线表示监听。

所述协调组件4可以自主开发,也可以使用如zookeeper、etcd等开源的分布式应用程序协调服务软件。本实施例以zookeeper作为协调组件4为例。

请参照图3,所述方法包括如下步骤:

s1:启动ha组件;例如,在ha组件集群中启动id分别为ha_x、ha_y、ha_z三个ha组件。

s2:所述ha组件启动后,自动连接协调组件zookeeper。

s3:各个ha组件发送写请求给协调组件,所述写请求包括与ha组件唯一对应的ha组件数据;例如,各个ha组件将各自的节点id以临时节点和顺序节点的方式写入所述协调组件zookeeper中。

s4:协调组件根据所述写请求,分别赋予各个ha组件唯一的标识,获取各个ha组件与其对应标识的关联信息;可选地,协调组件根据收到各个ha组件的写请求的时间先后,分别赋予各个ha组件一个依次递增的序列号,从而获取各个ha组件与其序列号的关联信息;例如,协调组件zookeeper根据实际收到写清求的时间,写入包括节点id和一个递增的序列号的数据,也就是说, zookeeper最终写入的数据为ha_x_0001、ha_y_0002和ha_z_0003。

s5:各个ha组件从协调组件中获取所述关联信息;例如,从协调组件zookeeper中获取所述最终写入的数据。

s6:各个ha组件依据所述关联信息获取与其对应的标识;例如,id为ha_x的ha组件获取了ha_x_0001、ha_y_0002和ha_z_0003,将自身id与ha_x_0001、ha_y_0002和ha_z_0003进行对比,得到自身对应的序列号为001。

s7:各个ha组件判断所述标识是否为预设的主节点标识;例如,预设备选的主节点为序列号最小的ha组件,则每个ha组件都将判断自身对应的序列号是否最小,若是,执行s8,若否,执行s9;可选地,也可以预设主节点为序列号最大的ha组件。

s8:判定所述ha组件为主节点,所述ha组件将自身的角色设为主节点,开始执行主节点的功能。

s9:判定所述ha组件为从节点。

s10:所有启动的ha组件监听协调组件,即主节点和从节点都监听协调组件。

s11:若有节点故障,判断故障的节点是否为主节点,若否,执行s12,若是,执行s13。

s12:协调组件删除所述从节点与其对应标识的关联信息。

s13:协调组件删除主节点与其对应标识的关联信息,并发送主节点异常的事件通知给从节点,从节点执行步骤s5。

本实施例基于协调组件的顺序一致性特性,不会同时有两个ha组件对应相同的序列号,这就保证了对应最小序列号的ha组件只有一个,从而确定出唯一的主节点,防止出现脑裂现象。

实施例二

请参照图5,本实施例为对应实施例一的方法的一种分布式数据库系统的ha组件选主系统,包括:

发送模块101,用于各个ha组件发送写请求给协调组件;

赋予模块102,用于协调组件根据所述写请求,分别赋予各个ha组件唯一 的标识,获取各个ha组件与其对应标识的关联信息;所述写请求包括与ha组件唯一对应的ha组件数据。可选地,所述赋予模块102具体用于协调组件根据收到各个ha组件的所述写请求的时间先后,分别赋予各个ha组件一个依次递增的序列号,获取各个ha组件与其序列号的关联信息。

第一获取模块103,用于一ha组件获取所述关联信息;

第二获取模块104,用于所述一ha组件依据所述关联信息获取与其对应的标识;

判断模块105,用于判断所述标识是否为预设的主节点标识。

该系统还包括:

第一判定模块106,用于若所述标识为预设的主节点标识,则判定所述一ha组件为主节点;

第一删除模块107,用于若原主节点故障,则协调组件删除原主节点与其对应标识的关联信息;

通知模块108,用于协调组件发送所述原主节点异常的事件通知给各个ha组件;

选定模块109,用于选定已判定为主节点的所述一ha组件为新的主节点。

该系统还包括

第二判定模块110,用于若所述标识不是预设的主节点标识,则判定所述一ha组件为从节点;

第二删除模块111,用于若从节点故障,则协调组件删除所述从节点与其对应标识的关联信息。

综上所述,本发明提供的一种分布式数据库系统的ha组件选主方法及其系统,通过在分布式数据库的总体架构中引入协调组件,通过协调组件实现ha组件之间的相互通信,可提高ha组件的效率;通过唯一对应ha组件的ha组件数据,可使各个ha组件唯一获取到与其对应的标识,防止出现一个ha组件获取到多个标识的情况;根据协调组件的顺序一致性等特性,各个ha组件均对应一个不重复的序列号,可根据判断唯一的序列号是否为预选为备用主节点的序列号来快速地确定出唯一的主节点,防止脑裂现象。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

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