本发明涉及分布式数据库领域,尤其涉及一种分布式数据库系统的故障检测处理方法及其系统。
背景技术:
大数据时代,分布式数据库成为数据存储的必要基础设施。分布式数据库系统存在一些问题,其中,对于大多数应用服务来说,可用性问题是一个基本问题。提供一定程度高可用性服务,是分布式数据库系统必备的特征之一。
目前有很多分布式数据库系统的高可用性方案,常采用单节点高可用性组件(ha组件)进行故障检测和故障处理。该方案存在单点故障,在高可用性组件本身异常时,将无法提供高可用性服务。
对于高可用性组件多节点部署的分布式高可用性系统,可以解决单点问题。但是,多个高可用性组件节点之间必须确定主备关系,只有主节点可以对故障进行处理,否则多个高可用性节点的操作很容易造成冲突。如果采用固定的主从角色关系,当主节点异常,其它从节点将不能进行故障处理,因此,常见的该类方案采用动态的主从角色关系。通过一定的算法确定主从节点,当主节点异常时,再从从节点中选出一个节点作为主节点。选主算法通常比较复杂,在网络不稳定的时候,易出现脑裂现象,即同一时刻存在多于一个的主节点。而理论上能保证一致性的算法,如常见的paxos算法、raft算法等,实现比较困难,容易产生死锁。
在申请号为201410854727.6的专利公开文件中,提出了一种应用于分布式数据库的解决2pc模型单点故障问题的方法,包括:建立一列从协调者队列,存入多个站点作为从协调者,其中每个从协调者的功能和协调者是相同的;协调者与多个参与者之间按照两阶段提交协议通过数据包进行通信;同时,协调者和所有从协调者之间每隔一时间段进行一次通信;若从协调者在这个时间段后没有收到协调者发送的消息,则认为协调者发生阻塞,系统立即根据一定算 法从协调者队列中选择一从协调者作为新的协调者与多个参与者进行通信。该方法虽然能解决单点故障的问题,但只能应用于2pc模型,且可能发生协调者之间数据状态不一致的情况。
技术实现要素:
本发明所要解决的技术问题是:提供一种分布式数据库系统的故障检测处理方法及其系统,实现分布式数据库主节点的选择和故障检测处理,防止单点故障,且可提高故障检测的准确率。
为了解决上述技术问题,本发明采用的技术方案为:一种分布式数据库系统的故障检测处理方法,包括:
各个ha组件发送写请求给协调组件;
协调组件根据所述写请求,分别赋予各个ha组件唯一的标识,获取各个ha组件与其对应标识的关联信息;
一ha组件获取所述关联信息;
所述一ha组件依据所述关联信息获取与其对应的标识;
判断所述标识是否为预设的主节点标识;
主节点按照预设的时间周期探测数据库节点,得到第一探测结果;
若所述第一探测结果为失败的次数大于等于预设值,则所述主节点发送所述数据库节点故障确认的通知;
至少一个从节点接收所述通知后对所述数据库节点进行探测,得到第二探测结果;
所述从节点将第二探测结果反馈给主节点;
所述主节点根据所述第二探测结果,判断所述数据库节点是否故障。
本发明还涉及一种分布式数据库系统的故障检测处理系统,包括
第一发送模块,用于各个ha组件发送写请求给协调组件;
赋予模块,用于协调组件根据所述写请求,分别赋予各个ha组件唯一的标识,获取各个ha组件与其对应标识的关联信息;
第一获取模块,用于一ha组件获取所述关联信息;
第二获取模块,用于所述一ha组件依据所述关联信息获取与其对应的标识;
第一判断模块,用于判断所述标识是否为预设的主节点标识。
第一探测模块,用于主节点按照预设的时间周期探测数据库节点,得到第一探测结果;
第二发送模块,用于若所述第一探测结果为失败的次数大于等于预设值,则所述主节点发送所述数据库节点故障确认的通知;
第二探测模块,用于至少一个从节点接收所述通知后对所述数据库节点进行探测,得到第二探测结果;
反馈模块,用于所述从节点将第二探测结果反馈给主节点;
第二判断模块,用于所述主节点根据所述第二探测结果,判断所述数据库节点是否故障。
本发明的有益效果在于:通过在分布式数据库的总体架构中引入协调组件,通过协调组件实现ha组件之间的相互通信,可提高ha组件的效率;根据协调组件的顺序一致性等特性,赋予各个ha组件唯一的标识,可使各个ha组件根据所述标识的唯一性,确定出唯一的主节点,进而防止脑裂现象;同一时刻只有主节点和数据库节点交互,可有效保证集群状态数据的一致性,在此基础上,若发生故障,则采用主节点进行故障探测,从节点辅助故障确认的故障检测策略,能有效防止发生误检测,显著提高了故障检测的准确性。
附图说明
图1为本发明一种分布式数据库系统的故障检测处理方法的流程图;
图2为本发明实施例一的分布式数据库系统的架构示意图;
图3为本发明实施例一的分布式数据库系统的客户端请求数据的时序图;
图4为本发明实施例一的数据库节点主备切换过程的数据交互时序图;
图5为本发明实施例一的方法流程图;
图6为本发明实施例二的方法流程图;
图7为本发明实施例三的方法流程图;
图8为一种分布式数据库系统的故障检测处理系统的结构示意图;
图9为本发明实施例二的系统结构示意图。
标号说明:
1、数据库集群;2、ha组件集群;3、数据库代理;4、协调组件;
101、第一发送模块;102、赋予模块;103、第一获取模块;104、第二获取模块;105、第一判断模块;106、第一探测模块;107、第二发送模块;108、第二探测模块;109、反馈模块;110、第二判断模块;111、第一判定模块;112、第一删除模块;113、通知模块;114、选定模块;115、第二判定模块;116、第二删除模块;117、第三判断模块;118、第一处理模块;119、第二处理模块;
1071、第一发送单元;1072、第二发送单元;
1091、第一反馈单元;1092、第二反馈单元;
1101、第一判定单元;1102、第二判定单元。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图详予说明。
本发明最关键的构思在于:基于协调组件实现ha组件之间的角色分配,根据唯一的标识,确定出唯一的主节点,并采用主节点进行故障探测,从节点辅助故障确认的故障检测机制。
请参阅图1,一种分布式数据库系统的故障检测处理方法,包括:
各个ha组件发送写请求给协调组件;
协调组件根据所述写请求,分别赋予各个ha组件唯一的标识,获取各个ha组件与其对应标识的关联信息;
一ha组件获取所述关联信息;
所述一ha组件依据所述关联信息获取与其对应的标识;
判断所述标识是否为预设的主节点标识;
主节点按照预设的时间周期探测数据库节点,得到第一探测结果;
若所述第一探测结果为失败的次数大于等于预设值,则所述主节点发送所述数据库节点故障确认的通知;
至少一个从节点接收所述通知后对所述数据库节点进行探测,得到第二探测结果;
所述从节点将第二探测结果反馈给主节点;
所述主节点根据所述第二探测结果,判断所述数据库节点是否故障。
从上述描述可知,本发明的有益效果在于:可根据唯一的标识,确定唯一的主节点,防止脑裂现象;同时,采用主节点进行故障探测,从节点辅助故障确认的故障检测策略,能有效防止发生误检测,可提高故障检测的准确性。
进一步地,所述“协调组件根据所述写请求,分别赋予各个ha组件唯一的标识,获取各个ha组件与其对应标识的关联信息”具体为:
协调组件根据收到各个ha组件的所述写请求的时间先后,分别赋予各个ha组件一个依次递增的序列号,获取各个ha组件与其序列号的关联信息。
由上述描述可知,根据协调组件的特性,各个ha组件均对应一个不重复的序列号,可根据判断唯一的序列号是否为预选为备用主节点的序列号来快速地确定出唯一的主节点。
进一步地,所述“判断所述标识是否为预设的主节点标识”之后,进一步包括:
若所述标识为预设的主节点标识,则判定所述一ha组件为主节点;
若原主节点故障,则协调组件删除原主节点与其对应标识的关联信息;
协调组件发送所述原主节点异常的事件通知给各个ha组件;
选定已判定为主节点的所述一ha组件为新的主节点。
进一步地,所述“判断所述标识是否为预设的主节点标识”之后,进一步包括:
若所述标识不是预设的主节点标识,则判定所述一ha组件为从节点;
若从节点故障,则协调组件删除所述从节点与其对应标识的关联信息。
由上述描述可知,在节点发生故障时,协调组件自动删除对应的关联信息,防止出现故障的节点被选为主节点的情况;若为主节点发生故障,则在启动且 正常的从节点中选出新的主节点,解决了单点故障问题,可继续执行高可用性功能。
进一步地,所述“所述主节点根据所述第二探测结果,判断所述数据库节点是否故障”具体为:若所述从节点反馈的第二探测结果均为异常,则判定所述数据库节点故障;若至少一个从节点反馈的第二探测结果为正常,则判定所述数据库节点正常。
由上述描述可知,根据所有从节点反馈的第二探测结果来判断数据库节点是否故障,极大降低因网络抖动引起的误检测,保证了数据库服务的高可用性。
进一步地,所述“所述主节点根据所述第二探测结果,判断所述数据库节点是否故障”之后,进一步包括:
若故障的数据库节点为主数据库节点,则在可用的备数据库节点中选取一个新的主数据库节点。
由上述描述可知,若主数据库节点故障则选取新的主数据库节点,继续提供服务,进一步保证了数据库服务的高可用性。
进一步地,所述“所述主节点发送所述数据库节点故障确认的通知”具体为:
所述主节点发送所述数据库节点故障确认的通知给协调组件;
协调组件将所述通知发送给ha组件集群中的所有从节点。
进一步地,所述“所述从节点将第二探测结果反馈给主节点”具体为:
所述从节点将第二探测结果反馈给协调组件;
协调组件将第二探测结果反馈给所述主节点。
由上述描述可知,通过协调组件实现主节点和从节点之间的相互通信,提高了主节点和从节点的效率。
请参照图8,本发明还提出一种分布式数据库系统的故障检测处理系统,包括
第一发送模块,用于各个ha组件发送写请求给协调组件;
赋予模块,用于协调组件根据所述写请求,分别赋予各个ha组件唯一的标识,获取各个ha组件与其对应标识的关联信息;
第一获取模块,用于一ha组件获取所述关联信息;
第二获取模块,用于所述一ha组件依据所述关联信息获取与其对应的标识;
第一判断模块,用于判断所述标识是否为预设的主节点标识。
第一探测模块,用于主节点按照预设的时间周期探测数据库节点,得到第一探测结果;
第二发送模块,用于若所述第一探测结果为失败的次数大于等于预设值,则所述主节点发送所述数据库节点故障确认的通知;
第二探测模块,用于至少一个从节点接收所述通知后对所述数据库节点进行探测,得到第二探测结果;
反馈模块,用于所述从节点将第二探测结果反馈给主节点;
第二判断模块,用于所述主节点根据所述第二探测结果,判断所述数据库节点是否故障。
进一步地,所述写请求包括与ha组件唯一对应的ha组件数据。
进一步地,所述赋予模块具体用于协调组件根据收到各个ha组件的所述写请求的时间先后,分别赋予各个ha组件一个依次递增的序列号,获取各个ha组件与其序列号的关联信息。
进一步地,还包括:
第一判定模块,用于若所述标识为预设的主节点标识,则判定所述一ha组件为主节点;
第一删除模块,用于若原主节点故障,则协调组件删除原主节点与其对应标识的关联信息;
通知模块,用于协调组件发送所述原主节点异常的事件通知给各个ha组件;
选定模块,用于选定已判定为主节点的所述一ha组件为新的主节点。
进一步地,还包括:
第二判定模块,用于若所述标识不是预设的主节点标识,则判定所述一ha组件为从节点;
第二删除模块,用于若从节点故障,则协调组件删除所述从节点与其对应标识的关联信息。
进一步地,所述第二判断模块包括:
第一判定单元,用于若所述从节点反馈的第二探测结果均为异常,则判定所述数据库节点故障;
第二判定单元,用于若至少一个从节点反馈的第二探测结果为正常,则判定所述数据库节点正常。
进一步地,还包括:
第一处理模块,用于若故障的数据库节点为主数据库节点,则在可用的备数据库节点中选取一个新的主数据库节点。
进一步地,所述第二发送模块包括:
第一发送单元,用于所述主节点发送所述数据库节点故障确认的通知给协调组件;
第二发送单元,用于协调组件将所述通知发送给ha组件集群中的所有从节点。
进一步地,所述反馈模块包括:
第一反馈单元,用于所述从节点将第二探测结果反馈给协调组件;
第二反馈单元,用于协调组件将第二探测结果反馈给所述主节点。
实施例一
请参照图1,本发明的实施例一为一种分布式数据库系统的故障检测处理方法,请参照图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为客户端请求数据的时序图,即分布式数据库系统的工作流程,包括如下步骤:
s101:数据库代理启动时,向协调组件读取数据库集群信息;
s102:协调组件将数据库集群信息返回给数据库代理;
s103:客户端通过数据库代理读写数据记录,将读写数据的请求发送给数据库代理;
s104:当数据库代理收到客户端的读写数据请求时,根据路由算法,计算出所请求的数据所在的数据库组,将请求路由到对应数据库组的主数据库节点上;
s105:数据库节点处理读写请求,并将结果返回给数据库代理;
s106:数据库代理获取到数据库节点的返回结果后,返回给客户端。
如图4所示,在分布式数据库系统中,由于某些原因,如数据库节点维护、更换硬件等任务,需要对数据库节点进行主备切换,包括如下步骤:
s201:协调组件的客户端,如图2中的数据库代理和ha组件,改写保存在协调组件中的关于数据库节点主备状态信息的数据;
s202:协调组件将服务器组状态修改的事件通知给所有的数据库代理;
s203:数据库代理修改自己保存的数据库组状态数据,并将修改结果返回协调组件;
s204:协调组件通知客户端状态修改的结果。
本实施例提出一种分布式数据库系统的故障检测处理方法,基于上述的分布式数据库系统,实现分布式数据库的高可用性,如图5所示,包括如下步骤:
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组件将自身的角色设为主节点,开始执行主节点的功能,即执行步骤s10。
s9:判定所述ha组件为从节点。
s10:主节点按照预设的时间周期探测数据库节点,判断所述数据库节点是否能够正常提供服务,例如,使用ping数据库命令进行探测,得到第一探测结果。
s11:判断第一探测结果为失败的次数是否大于等于预设,若否,则继续执行步骤s10,若是,则执行步骤s12。
s12:主节点发送对所述数据库节点进行故障确认的通知给从节点;优选地,通过协调组件发送给从节点,即主节点发送所述通知给协调组件;协调组件将所述通知发送给ha组件集群中的所有从节点。
s13:至少一个从节点接收所述通知后对所述数据库节点进行一次性的状态探测,得到第二探测结果;
s14:所述从节点将第二探测结果反馈给主节点;优选地,通过协调组件反馈给主节点,即从节点将第二探测结果反馈给协调组件;协调组件将第二探测结果反馈给所述主节点。
s15:判断从节点反馈的第二探测结果是否均为异常,若否,执行步骤s16,若是,执行步骤s17。
s16:判定所述数据库节点能够正常提供服务,执行步骤s10。
s17:判定所述数据库节点故障。
本实施例基于协调组件的顺序一致性特性,不会同时有两个ha组件对应相同的序列号,这就保证了对应最小序列号的ha组件只有一个,从而确定出唯一的主节点,防止出现脑裂现象;同时,采用主节点进行故障探测,从节点辅助故障确认的故障检测策略,主节点可根据所有从节点反馈的第二探测结果来判断数据库节点是否故障,能有效降低因网络抖动引起的误检测,提高了故障检测的准确性,保证了数据库服务的高可用性。
实施例二
请参照图6,本实施例为实施例一的进一步延伸,在ha组件中确定出主节点和从节点之后,增加对异常或故障ha组件的处理过程,即在步骤s8和s9之后均执行下述步骤:
s18:所有启动的ha组件监听协调组件,即主节点和从节点都监听协调组件。
s19:若有节点故障,判断故障的节点是否为主节点,若否,执行步骤s12,若是,执行步骤s13。
s20:协调组件删除所述从节点与其对应标识的关联信息。
s21:协调组件删除主节点与其对应标识的关联信息,并发送主节点异常的事件通知给从节点,从节点执行步骤s5。
本实施例可解决单点故障,在ha组件出现异常或故障之后,仍可以继续提供高可用性服务。
实施例三
请参照图7,本实施例为实施例一的进一步延伸,在步骤s21后还包括如下步骤:
s22:判断所述故障的数据库节点是否为主数据库节点,若是,执行步骤s23,若否,执行步骤s24。
s23:进行主备节点的切换,在可用的备数据库节点中选取一个新的主数据库节点,继续提供服务。
s24:根据预设流程对所述故障的备数据库节点进行处理,如重启所述数据库节点或发送邮件通知等。
本实施例通过根据故障的数据库节点的主备角色状态,对故障的数据库节点进行相应的处理,使数据库集群能继续提供服务。
实施例四
请参照图9,本实施例为对应实施例一的方法的一种分布式数据库系统的故障检测处理系统,包括:
第一发送模块101,用于各个ha组件发送写请求给协调组件;所述写请求 包括与ha组件唯一对应的ha组件数据;
赋予模块102,用于协调组件根据所述写请求,分别赋予各个ha组件唯一的标识,获取各个ha组件与其对应标识的关联信息;可选地,所述赋予模块具体用于协调组件根据收到各个ha组件的所述写请求的时间先后,分别赋予各个ha组件一个依次递增的序列号,获取各个ha组件与其序列号的关联信息;
第一获取模块103,用于一ha组件获取所述关联信息;
第二获取模块104,用于所述一ha组件依据所述关联信息获取与其对应的标识;
第一判断模块105,用于判断所述标识是否为预设的主节点标识,得到第一判断结果。
第一探测模块106,用于主节点按照预设的时间周期探测数据库节点,得到第一探测结果;
第二发送模块107,用于若所述第一探测结果为失败的次数大于等于预设值,则所述主节点发送所述数据库节点故障确认的通知;
第二探测模块108,用于至少一个从节点接收所述通知后对所述数据库节点进行探测,得到第二探测结果;
反馈模块109,用于所述从节点将第二探测结果反馈给主节点;
第二判断模块110,用于所述主节点根据所述第二探测结果,判断所述数据库节点是否故障。
还包括:
第一判定模块111,用于若所述第一判断结果为是,则判定所述一ha组件为主节点;
第一删除模块112,用于若原主节点故障,则协调组件删除原主节点与其对应标识的关联信息;
通知模块113,用于协调组件发送所述原主节点异常的事件通知给各个ha组件;
选定模块114,用于选定已判定为主节点的所述一ha组件为新的主节点;
第二判定模块115,用于若所述第一判断结果为否,则判定所述一ha组件 为从节点;
第二删除模块116,用于若从节点故障,则协调组件删除所述从节点与其对应标识的关联信息。
第三判断模块117,用于判断故障的数据库节点为是否为主数据库节点,得到第三判断结果;
第一处理模块118,用于若第三判断结果为是,则在可用的备数据库节点中选取一个新的主数据库节点。
第二处理模块119,用于若第三判断结果为否,则根据预设流程对所述数据库节点进行处理。
所述第二判断模块110包括:
第一判定单元1101,用于若所述从节点反馈的第二探测结果均为异常,则判定所述数据库节点故障;
第二判定单元1102,用于若至少一个从节点反馈的第二探测结果为正常,则判定所述数据库节点正常。
所述第二发送模块107包括:
第一发送单元1071,用于若所述第一探测结果为失败的次数大于等于预设值,所述主节点发送所述数据库节点故障确认的通知给协调组件;
第二发送单元1072,用于协调组件将所述通知发送给ha组件集群中的所有从节点。
所述反馈模块109包括:
第一反馈单元1091,用于所述从节点将第二探测结果反馈给协调组件;
第二反馈单元1092,用于协调组件将第二探测结果反馈给所述主节点。
综上所述,本发明提供的一种分布式数据库系统的故障检测处理方法及其系统,通过在分布式数据库的总体架构中引入协调组件,通过协调组件实现ha组件之间的相互通信,可提高ha组件的效率;通过唯一对应ha组件的ha组件数据,可使各个ha组件唯一获取到与其对应的标识,防止出现一个ha组件获取到多个标识的情况;根据协调组件的顺序一致性等特性,各个ha组件均对应一个不重复的序列号,可根据判断唯一的序列号是否为预选为备用主节点的序 列号来快速地确定出唯一的主节点,防止脑裂现象;同一时刻只有主节点和数据库节点交互,可有效保证数据库集群状态数据的一致性;在此基础上,若发生故障,则采用主节点进行故障探测,从节点辅助故障确认的故障检测策略,能有效防止发生误检测,显著提高了故障检测的准确性;根据所有从节点反馈的第二探测结果来判断数据库节点是否故障,极大降低因网络抖动引起的误检测,保证了数据库服务的高可用性;通过协调组件实现主节点和从节点之间的相互通信,提高了主节点和从节点的效率。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。