一种基于高可用检测节点的分布式系统节点故障检测方法与流程

文档序号:15567196发布日期:2018-09-29 03:37阅读:639来源:国知局

本发明涉及一种基于高可用检测节点的分布式系统节点故障检测方法,属于网络通信技术领域。



背景技术:

分布式系统是由多个节点构成,如果某些节点发生故障后不进行处理,如流量分摊、主备切换等处理动作,则会影响整个系统的功能。因此如何快速准确的判断节点故障是非常重要的。

心跳方案是目前较为流行的节点故障检测方法,但是它有一项重大缺陷,就是心跳发送和接收程序是运行在操作系统之上的用户层级中,一旦cpu等资源不足,心跳程序会发生卡顿,会造成误判。

另外操作系统的ping命令是一种常用的节点检测手段,但是如果简单的让每个节点ping其他所有节点获取状态,则系统形成一个网状的检测拓扑结构,报文数量与节点数量成指数级相关,大量的ping报文可能会造成网络瘫痪。



技术实现要素:

针对现有技术存在的问题,本发明提供一种基于高可用检测节点的分布式系统节点故障检测方法,能够避免用户层程序卡顿对检测结果的误判,并且减少了报文数量,提高了检测效率。

本发明所要解决的技术问题是通过以下技术方案实现的:

本发明是一种基于高可用检测节点的分布式系统节点故障检测方法,方法采用具备多个冗余备份的检测节点对目标节点发送icmp(internetcontrolmessageprotocol,控制报文协议)报文进行故障检测,能够将多个客户端对同一个节点的检测请求进行合并,能够利用检测节点本地缓存和全局共享内存对检测请求应答进行加速。

一种基于高可用检测节点的分布式系统节点故障检测方法,包括:

1)在系统中设置两个以上检测节点(检测节点可以由任意节点担任)其中一个为主检测节点,其余节点为备检测节点,用于对其他所有节点的故障检测;多个检测节点之间周期性的发出udp广播作为心跳报文,报文中包括检测节点的节点名、ip地址、是否主节点等信息。每个检测节点在收到其他检测节点的心跳后,选举出ip地址数值最小的节点为主检测节点。非检测节点收到心跳后也会执行同样的逻辑确定主检测节点,并获知主检测节点的ip地址用于通信。当主检测节点故障后,其他检测节点通过心跳报文重新确定ip地址最小的为主检测节点,完成故障切换。同时主检测节点周期性的将检测结果通过组播发送到其他检测节点,使得故障切换后新的主检测节点能够获取上一时刻系统节点的状态,能够立刻响应客户端的查询请求,实现无缝切换。

2)客户端(即每个节点的客户端程序)调用接口,接口内通过tcp或udp向主检测节点发送请求报文,报文中包括希望被检测的目标节点的ip和超时时间这两个参数。由主检测节点向目标节点直接发出icmp报文,在超时时间内得到响应则回复客户端该目标节点在线,否则回复该目标节点故障,并且主检测检点对待检测的节点进行故障检测时,由被检测点的系统内核回复检测报文,这样避免了用户层程序卡顿对判断造成影响,并且检测网络的拓扑是以检测节点为中心的星型结构,代替了传统的每个节点对等的网状结构。

3)主检测节点将不同客户端对同一个待检测的目标节点的检测请求进行合并;检测节点为每个客户端单独保存了目标ip和超时时间参数,实现了对不同目标节点使用不同检测超时时间的功能。检测节点在超时时间内以均匀间隔连续发出3次icmp报文进行检测,当收到第一次回复后判定节点状态为在线。当多个客户端对同一目标节点提出检测请求时,对请求参数进行合并处理,取最短的超时时间,并且只发出一份icmp检测报文,减少了报文数量。最后将结果统一回复给所有客户端。

4)主检测节点接收到请求后开始周期性的对目标节点进行检测,检测结果缓存在主检测节点的内存中,当其他任意客户端需要对同一目标节点进行检测时,立刻从缓存直接返回目标节点的实时状态,具体为检测节点以一定的周期对目标节点发送icmp报文进行故障检测,并将检测结果缓存在本地内存中。当再次收到对同一目标节点的检测请求时,直接将内存中缓存的检测结果立刻发送给请求节点。而不是每次请求单独发送icmp报文,不需要请求节点等待。当超过一定时间间隔没有任何节点再请求检测这个目标节点,则停止周期性icmp报文的发送,此间隔可配置。

主检测节点不仅仅将检测结果通过tcp或udp返回给客户端。还可将所有被检测节点的健康状态以广播推送到全系统,在每个节点上设立检测代理,由代理接收广播后存入本地共享内存。当本地客户端发出一个请求时,首先查询本地共享内存是否已经存在结果,如果存在直接获取,不再与检测节点网络通信,大大提高了检测速度。如果共享内存中没有目标节点,说明此节点第一次被检测,则客户端与检测节点通信传递参数,开始检测过程。这个广播可以通过配置打开,如果不打开则每次客户端都与主检测节点通信,如果打开则以增加报文来提升响应速度。

本发明所达到的有益效果如下:

1.本发明在检测故障时,由操作系统内核回复检测报文,而不是用户层的心跳程序,避免用户层程序卡顿对判断造成的影响,使得检测结果更加准确;

2.本发明统一由检测节点对其他节点进行故障检测,而不是每个节点自身去检测其他节点,避免网状拓扑的大量报文的发送,在全系统层面减少了检测报文;

3.本发明的多个检测节点之间通过心跳报文和共享内存实现故障冗余和无缝切换,提高了系统检测功能的可靠性;

4.本发明的中不同客户端对同一目标节点的检测请求可以进行合并,减少了报文的发送;

5.本发明利用缓存技术对同一节点的重复请求可以立刻给予回复,而不是请求一次检测一次,提升了单次检测请求的完成速度;

6.本发明可以把节点检测结果广播到全系统,让每个节点从本地共享内存直接查询,大大提升检测速度。

7.本发明不需要安装额外的第三方软件,只需安装检测服务端、客户端动态库,检测代理可选。且适用于各种linux、unix和windows平台。

综上所述,本发明是一种结果准确、可靠性高、速度快、报文少、安装简单、支持跨平台的分布式系统节点故障检测方法。

附图说明

图1是本发明主检测节点的故障切换流程图;

图2是本发明节点故障检测网络拓扑图;

图3是本发明全系统节点状态广播推送和客户端查询示意图。

具体实施方式

为了进一步描述本发明的技术特点和效果,以下结合附图和具体实施方式对本发明做进一步描述。为了具体说明故障检测过程,现以6个节点构成分布式系统,node1、node2、node3担当检测节点(它们也可以同时是被检测节点)的场景举例。

如图1-图3所示,图1是主检测节点的故障切换流程图。在系统初始状态因为node1的ip地址最小它被选举为主检测节点,然后它接收各个节点的检测请求后将检测结果存储在本地共享内存,同时使用组播将检测结果发送到每个检测节点。node1以一定的周期发出心跳广播,同时其他节点也发出心跳。每个检测节点都接收其他检测节点的心跳,假设某一时刻node1故障,则到达超时时间后,其他检测节点都选举ip第二小的node2为新的主检测节点,整个过程不需要第三方仲裁节点参与。

图2是节点故障检测网络拓扑图。图中描述了检测系统工作的原理,包括检测节点的高可用,上一段已经详细描述过,也包括客户端发起请求到获得结果的过程。客户端是运行在node1~node6其中一个节点上的进程,它通过检测节点的心跳报文获知主检测节点的ip。客户端1向主检测节点发送检测192.168.206.3的请求,超时时间timeout1;客户端2向主检测节点发送检测192.168.206.3的请求,超时时间timeout2;客户端3向主检测节点发送检测192.168.206.4的请求,超时时间timeout3。主检测节点将客户端1和客户端2的请求合并,采用更小的超时间隔timeout1,向192.168.206.3发出检测报文。采用超时间隔timeout3向192.168.206.4发出检测报文。并且主检测节点在后台周期性的持续检测,如果客户端多次请求,则主检测节点立刻用内存中的状态进行回复。

图3是全系统节点状态广播推送和客户端查询示意图。图中node1是主检测节点,它用广播将已检测过的节点的状态发送到每个节点,包含两条信息,分别是node2正常,node4故障,这些信息被检测代理收到后存放在每个节点的共享内存。步骤①node3上有一个客户端请求检测node2的状态;步骤②客户端直接从本地共享获得结果;步骤③客户端请求检测node6的状态,本地共享内存中不存在,则客户端与node1网络通信,传输目标ip等信息;步骤④node1发出检测node6的报文,步骤⑤node1把结果返回给客户端;步骤⑥node1把node6的检测结果加入本地共享内存,等待广播发出。

通过上述实施例可知,本发明统一由检测节点对其他节点进行故障检测,避免了网状拓扑的大量报文的发送;多个检测节点之间通过心跳报文和共享内存实现故障冗余和无缝切换,提高了系统检测功能的可用性;不同客户端对同一目标节点的检测请求可以进行合并,减少了报文的发送;利用缓存技术对同一节点的重复请求可以立刻给予回复,提升了请求应答的速度;可以把节点检测结果广播到全系统,让每个节点从本地共享内存直接查询,大大提升检测速度。

此外,本发明不需要安装额外的第三方软件,只需安装检测服务端、客户端动态库,检测代理可选。且适用于各种linux、unix和windows平台。

上述实施例不以任何形式限定本发明,凡采取等同替换或等效变换的形式所获得的技术方案,均落在本发明的保护范围之内。

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