分布式数据库系统的故障检测方法及其系统与流程

文档序号:11233968阅读:669来源:国知局
分布式数据库系统的故障检测方法及其系统与流程

本发明涉及分布式数据库领域,尤其涉及一种分布式数据库系统的故障检测方法及其系统。



背景技术:

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

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

对于高可用性组件多节点部署的分布式高可用性系统,可以解决单点问题。但是,多个高可用性组件节点之间必须确定主备关系,只有主节点可以对故障进行处理,否则多个高可用性节点的操作很容易造成冲突。

在申请号为201210148938.9的专利公开文件中,提出了一种数据库集群单点故障的监控系统及方法,应用于若干个数据库的数据库集群中,所述数据库包括主库或从库,监控系统包括:若干个数据库代理,至少三个基于分布式协调机制相互通信的协调终端,其中至少三个协调终端中包括一个领导协调终端;一个数据库代理与数据库集群中的一个数据库对应设置在一台服务器上,每个数据库代理中均保存各个协调终端的地址;通过数据库代理定时检测对应数据库的读写状态,领导协调终端根据来自数据库代理的数据库读写状态信息,对数据库集群中的单点故障进行识别,能够解决现有技术中,分布式mysql数据库单点故障的解决方案中存在的效率低下的问题。但该方法只有通过领导协调终端进行故障检测处理,在网络抖动的情况下容易出现误检测。



技术实现要素:

本发明所要解决的技术问题是:提供一种分布式数据库系统的故障检测方法及其系统,提高故障检测的准确性,防止出现误检测。

为了解决上述技术问题,本发明采用的技术方案为:一种分布式数据库系统的故障检测方法,包括:

ha组件集群中的主节点按照预设的时间周期探测数据库节点,得到第一探测结果;

若所述第一探测结果为失败的次数大于等于预设值,则所述主节点发送所述数据库节点故障确认的通知;

ha组件集群中的至少一个从节点接收所述通知后对所述数据库节点进行探测,得到第二探测结果;

所述从节点将第二探测结果反馈给主节点;

所述主节点根据所述第二探测结果,判断所述数据库节点是否故障。

本发明还涉及一种分布式数据库系统的故障检测系统,包括:

第一探测模块,用于ha组件集群中的主节点按照预设的时间周期探测数据库节点,得到第一探测结果;

第一发送模块,用于若所述第一探测结果为失败的次数大于等于预设值,则所述主节点发送所述数据库节点故障确认的通知;

第二探测模块,用于ha组件集群中的至少一个从节点接收所述通知后对所述数据库节点进行探测,得到第二探测结果;

反馈模块,用于所述从节点将第二探测结果反馈给主节点;

第一判断模块,用于所述主节点根据所述第二探测结果,判断所述数据库节点是否故障。

本发明的有益效果在于:同一时刻只有主节点和数据库节点交互,可有效保证数据库集群状态数据的一致性;采用主节点进行故障探测,从节点辅助故障确认的故障检测策略,能有效防止发生误检测,提高了故障检测的准确性。

附图说明

图1为本发明一种分布式数据库系统的故障检测方法的流程图;

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

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

图4为本发明一种分布式数据库系统的故障检测系统的结构示意图;

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

标号说明:

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

101、第一探测模块;102、第一发送模块;103、第二探测模块;104、反馈模块;105、第一判断模块;106、第二判断模块;107、第一处理模块;108、第二处理模块;

1021、第一发送单元;1022、第二发送单元;

1041、第一反馈单元;1042、第二反馈单元;

1051、第一判定单元;1052、第二判定单元。

具体实施方式

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

本发明最关键的构思在于:主节点进行故障探测,从节点辅助故障确认,提高故障检测的准确性。

请参阅图1,一种分布式数据库系统的故障检测方法,包括:

ha组件集群中的主节点按照预设的时间周期探测数据库节点,得到第一探测结果;

若所述第一探测结果为失败的次数大于等于预设值,则所述主节点发送所述数据库节点故障确认的通知;

ha组件集群中的至少一个从节点接收所述通知后对所述数据库节点进行探测,得到第二探测结果;

所述从节点将第二探测结果反馈给主节点;

所述主节点根据所述第二探测结果,判断所述数据库节点是否故障。

从上述描述可知,本发明的有益效果在于:采用主节点进行故障探测,从节点辅助故障确认的故障检测策略,可提高了故障检测的准确性。

进一步地,所述“所述主节点根据所述第二探测结果,判断所述数据库节点是否故障”具体为:若所述从节点反馈的第二探测结果均为异常,则判定所述数据库节点故障;若至少一个从节点反馈的第二探测结果为正常,则判定所述数据库节点正常。

由上述描述可知,根据所有从节点反馈的第二探测结果来判断数据库节点是否故障,极大降低因网络抖动引起的误检测,保证了数据库服务的高可用性。

进一步地,所述“所述主节点根据所述第二探测结果,判断所述数据库节点是否故障”之后,进一步包括:

若故障的数据库节点为主数据库节点,则在可用的备数据库节点中选取一个新的主数据库节点。

由上述描述可知,若主数据库节点故障则选取新的主数据库节点,继续提供服务,进一步保证了数据库服务的高可用性。

进一步地,所述“所述主节点发送所述数据库节点故障确认的通知”具体为:

所述主节点发送所述数据库节点故障确认的通知给协调组件;

协调组件将所述通知发送给ha组件集群中的所有从节点。

进一步地,所述“所述从节点将第二探测结果反馈给主节点”具体为:

所述从节点将第二探测结果反馈给协调组件;

协调组件将第二探测结果反馈给所述主节点。

由上述描述可知,通过协调组件实现主节点和从节点之间的相互通信,提高了主节点和从节点的效率。

请参照图4,本发明还提出一种分布式数据库系统的故障检测系统,包括

第一探测模块,用于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组件节点均是从节点。ha组件都具有故障处理和故障确认的功能,但只有主节点能够对数据库节点进行探测和故障处理,从节点只进行辅助的故障确认。

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

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

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

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

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

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

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

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

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

s1:ha组件集群中的主节点按照预设的时间周期探测数据库节点,判断所述数据库节点是否能够正常提供服务,例如,使用ping数据库命令进行探测,得到第一探测结果。

s2:判断第一探测结果为失败的次数是否大于等于预设,若否,则继续执行s1,若是,则执行s3。

s3:主节点发送对所述数据库节点进行故障确认的通知给从节点;优选地,通过协调组件发送给从节点,即主节点发送所述通知给协调组件;协调组件将 所述通知发送给ha组件集群中的所有从节点。

s4:ha组件集群中的至少一个从节点接收所述通知后对所述数据库节点进行一次性的状态探测,得到第二探测结果;

s5:所述从节点将第二探测结果反馈给主节点;优选地,通过协调组件反馈给主节点,即从节点将第二探测结果反馈给协调组件;协调组件将第二探测结果反馈给所述主节点。

s6:判断从节点反馈的第二探测结果是否均为异常,若否,执行s7,若是,执行s8。

s7:判定所述数据库节点能够正常提供服务,执行s1。

s8:判定所述数据库节点故障,执行s9。

s9:判断所述故障的数据库节点是否为主数据库节点,若是,执行s10,若否,执行s11。

s10:进行主备节点的切换,在可用的备数据库节点中选取一个新的主数据库节点,继续提供服务。

s11:根据预设流程对所述故障的备数据库节点进行处理,如重启所述数据库节点或发送邮件通知等。

本实施例采用主节点进行故障探测,从节点辅助故障确认的故障检测策略,主节点可根据所有从节点反馈的第二探测结果来判断数据库节点是否故障,能有效降低因网络抖动引起的误检测,提高了故障检测的准确性,保证了数据库服务的高可用性。

实施例二

请参照图5,本实施例为一种分布式数据库系统的故障检测系统,包括:

第一探测模块101,用于ha组件集群中的主节点按照预设的时间周期探测数据库节点,得到第一探测结果;

第一发送模块102,用于若所述第一探测结果为失败的次数大于等于预设值,则所述主节点发送所述数据库节点故障确认的通知;

第二探测模块103,用于ha组件集群中的至少一个从节点接收所述通知后对所述数据库节点进行探测,得到第二探测结果;

反馈模块104,用于所述从节点将第二探测结果反馈给主节点;

第一判断模块105,用于所述主节点根据所述第二探测结果,判断所述数据库节点是否故障。

所述第一判断模块105包括:

第一判定单元1051,用于若所述从节点反馈的第二探测结果均为异常,则判定所述数据库节点故障;

第二判定单元1052,用于若至少一个从节点反馈的第二探测结果为正常,则判定所述数据库节点正常。

所述第一发送模块102包括:

第一发送单元1021,用于若所述第一探测结果为失败的次数大于等于预设值,所述主节点发送所述数据库节点故障确认的通知给协调组件;

第二发送单元1022,用于协调组件将所述通知发送给ha组件集群中的所有从节点。

所述反馈模块104包括:

第一反馈单元1041,用于所述从节点将第二探测结果反馈给协调组件;

第二反馈单元1042,用于协调组件将第二探测结果反馈给所述主节点。

该系统还包括:

第二判断模块106,用于判断故障的数据库节点为是否为主数据库节点,得到第二判断结果;

第一处理模块107,用于若第二判断结果为是,则在可用的备数据库节点中选取一个新的主数据库节点。

第二处理模块108,用于若第二判断结果为否,则根据预设流程对所述数据库节点进行处理。

综上所述,本发明提供的一种分布式数据库系统的故障检测方法及其系统,同一时刻只有主节点和数据库节点交互,可有效保证数据库集群状态数据的一致性;采用主节点进行故障探测,从节点辅助故障确认的故障检测策略,能有效防止发生误检测,提高了故障检测的准确性;根据所有从节点反馈的第二探测结果来判断数据库节点是否故障,极大降低因网络抖动引起的误检测,保证 了数据库服务的高可用性;通过协调组件实现主节点和从节点之间的相互通信,提高了主节点和从节点的效率。

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

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