一种用于集群节点网络的方法与流程

文档序号:17758428发布日期:2019-05-24 21:29阅读:257来源:国知局
一种用于集群节点网络的方法与流程

本发明涉及对集群节点网络的改进,尤其涉及对其中网络节点的集中控制。



背景技术:

随着计算机技术的发展,集群技术也变得越来越成熟,集群是由一组计算节点通过网络互联互通组成。一个典型的集群节点网络中包含多个网络节点以及一个服务器,服务器通过收集网络节点发送的心跳信息以确认各个网络节点是否连接到集群节点网络。并且,服务器还可以收集各个网络节点的资源利用情况,集中地调控在各网络节点之间的资源共享、负载均衡等。

确保各个网络节点之间的连通是集群节点网络实现对网络节点的集中控制的基础。



技术实现要素:

因此,本发明的目的在于克服上述现有技术的缺陷,提供一种用于集群节点网络的方法,包括:

1)由网络节点向服务器发送具有第一标识位的心跳包,所述第一标识位用于标识所述网络节点即时的工作状态;

2)服务器根据所接收到的心跳包中的第一标识位,确定与所述网络节点对应的网络通路状态。

优选地,根据所述方法,其中所述第一标识位的类型包括:

keep,用于标识所述网络节点处于稳定状态;

restarting,用于标识所述网络节点即将重启;

poweroff,用于标识所述网络节点即将下电。

优选地,根据所述方法,其中步骤2)包括:

2-1)基于接收到的心跳包中的第一标识位,判断所述网络节点处于稳定状态、重启状态、下电状态中的哪一种;

2-2)在满足以下任意一种的情况时,将与所述网络节点对应的网络通路状态确定为异常:

所述网络节点被判断为稳定状态且所述服务器在随后的至少一个超时时限内没有接收到心跳包;

所述网络节点被判断为重启状态且所述服务器在随后的与重启耗时对应的时间段内没有收到心跳包;

所述网络节点被判断为下电状态。

优选地,根据所述方法,其中所述心跳包中包含所述网络节点的资源使用率信息。

5.根据权利要求4所述的方法,其中所述心跳包的心跳间隔等于所述集群节点网络针对心跳信息的超时时限和对资源使用率信息的时间间隔要求中的较小值。

优选地,根据所述方法,其中所述心跳包还包括第二标识位,以指示所述心跳包是否包含网络节点的资源使用率信息。

优选地,根据所述方法,其中,在满足或t1=t2时,第二标识位指示所述心跳包包含网络节点的资源使用率信息,其中,t1是网络节点发送心跳包的时间间隔,t2是网络节点发送资源监测包的时间间隔,a为消息头的长度,b为心跳包的数据域的长度,c为系统资源监测包的数据域的长度。

优选地,根据所述方法,其中所述心跳包的心跳间隔被设置为在[t_out/2,t_out-t_delay]区间内的值,其中t_out为超时时限,t-delay为心跳包传输的平均时延。

优选地,根据所述方法,其中所述第一标识位的类型包括:

test,用于标识所述网络节点即将开始搜索最优心跳间隔t_opt;

并且所述方法还包括在所述网络节点搜索最优心跳间隔t_opt的期间执行以下步骤:

i)所述网络节点以当前心跳间隔t_curr=(t1+t2)/2向服务器发送心跳包,其中t1和t2选自[t_out/2,t-out-t-delay]区间,且t1<t2;

ii)所述服务器根据心跳包的接收情况向所述网络节点发送ack反馈或nack反馈;

iii)若所述网络节点收到ack反馈则修改t1=t-curr,若所述网络节点收到nack反馈则修改t2=t-curr;

iv)若t2-t1小于设定的阈值则将最优心跳间隔t_opt设置为t1或t2,否则更新当前心跳间隔t_curr并重复上述步骤i)到iii)。

一种计算机可读存储介质,其中存储有计算机程序,所述计算机程序在被执行时用于实现上述任意一项所述的方法。

一种用于集群节点网络的系统,包括:

处理器、和存储装置,

其中,所述存储装置用于存储计算机程序,所述计算机程序在被所述处理器执行时用于实现上述任意一项所述的方法。

与现有技术相比,本发明的实施例的优点在于:

利用在心跳包中增加用于标注网络节点工作状态的第一标识位的方式,使得服务器可以准确地判断出各个网络节点之间的网络通路状态。在心跳包中设置了第一标识位的基础上,本发明可以采用更大的心跳间隔值,例如大于超时时限的二分之一,甚至是接近超时时限的心跳间隔值。最优心跳间隔可以通过搜索获得,利用第一标识位告知服务器协助网络节点搜索最优心跳间隔,通过二分法快速地确定使得服务器可以在超时时限内接收到心跳包的最大心跳间隔值以作为该最优心跳间隔。将网络节点的资源使用率信息与心跳信息合并到同一个数据包中进行发送可以降低网络数据流量,减少集群节点网络的通信压力。

附图说明

以下参照附图对本发明实施例作进一步说明,其中:

图1是现有心跳机制的工作原理图;

图2是根据本发明的一个实施例用于集群节点网络的方法流程图;

图3是根据本发明的一个实施例由服务器根据所接收到的心跳包中的第一标识位确定网络通路状态的方法流程;

图4是根据本发明的一个实施例通过网络节点和服务器协作确定最优心跳间隔的方法流程;

图5(a)和(b)分别是根据本发明的实施例的方式1传输的心跳包的字段结构和资源监测包的字段结构;

图5(c)是根据本发明的实施例的方式2传输的包含网络节点的资源使用率的心跳包的字段结构;

图6是对本发明的网络延迟和断开场景可靠性的测试结果;

图7是对图6中的最优心跳间隔测试阶段的测试结果;

图8是针图6中节点重启和下电场景的可靠性测试结果;

图9是对本发明和现有技术在所产生的网络流量方面的对比测试图。

具体实施方式

尽管,网络节点的“心跳”仅和与其对应的网络节点相关,并不等同于网络的连通信息,然而发明人认为可以利用心跳机制来了解各个节点之间的网络通路状态,从而更有效地管理集群节点网络中网络节点。

在现有技术中,心跳机制可用于检测在集群节点网络中的一个网络节点是否“活着”,图1示出了其基本工作原理。参考图1,其是由网络节点以设置的心跳间隔作为时间间隔定时循环地向监测服务端发送心跳包,以通知检测服务端该网络节点还具有“心跳”,收到该心跳包的监测服务端则向该网络节点回应心跳反馈。若服务端在设置的超时时限内没有收到来自该网络节点的心跳包,则认为为该网络节点的网络断开或发生故障。

心跳误判会严重影响集群节点网络对网络节点的集中控制,其不仅会为集群节点网络带来不必要的任务切换,还会增加其他网络节点的任务负载,使得集群节点网络不能有效地利用该被误判网络节点的资源。

发明人认为可以通过改进心跳误判来改善集群节点网络对网络节点的管理和控制。本领域中普遍认为网络延迟导致心跳包没能在超时时限内被监测服务端所接收是造成心跳误判的主要原因。然而,发明人发现,还有一些其他因素会导致心跳误判,例如网络节点的暂时性重启和下电。对此,发明人提出在心跳包中增加用于标识网络节点即时的工作状态(例如,稳定、即将重启或下电)的第一标识位,以使得用于集中管理和控制各网络节点的服务器可以准确地获知与该网络节点对应的网络通路状态,从而根据该准确的网络通路状态制定合理的资源共享策略和负载均衡策略。

另一方面,在心跳包中设置了第一标识位的基础上,本发明可以采用较大的心跳间隔值,例如大于超时时限的二分之一。这里的心跳间隔可以人为设定也可以通过在网络节点和服务器之间的交互进行搜索得到。在搜索最优心跳间隔时,可以利用该第一标识位来告知服务器某一网络节点需要开始搜索最优心跳间隔。根据服务器的反馈为ack还是nack,增加或缩小当前的心跳间隔,直到确定一个使得服务器可以在超时时限内接收到心跳包的最大心跳间隔值以作为该最优心跳间隔。

另外,为了统一地对网络节点进行负载均衡配置,集群节点网络需要定期收集各个网络节点当前的资源使用情况,因而发明人认为还可以将网络节点的资源使用率信息与心跳信息合并到同一个数据包中进行发送。将资源使用率信息与心跳信息合并到一个数据包中可以降低网络数据流量,减少集群节点网络的通信压力。

为了方便陈述本发明的技术方案,在下文中采用如下变量进行说明:

t_opt:最优心跳间隔;

δt:心跳间隔阈值;

t_out:超时时限;

t_curr:当前心跳间隔;

n_cnt:记录接收到的心跳包的次数;

t_delay为心跳包传输的平均时延;

[a,b]:初始给定最优心跳间隔查找的范围,a=t_out/2,b=t_out-t_delay;

t1,t2:临时变量。

下面通过具体的实施例结合附图对本发明的方案进行说明。

<实施例1>

根据本发明的一个实施例,提供了一种用于集群节点网络的方法,包括:

步骤1.由网络节点向服务器发送具有第一标识位的心跳包,所述第一标识位用于标识所述网络节点即时的工作状态。

在本发明的一个实施例中,在现有的心跳包数据结构中增加msgflag字段以作为第一标识位,该msgflag字段采用枚举类型。可以采用以下代码来定义该msgflag字段:

其中,keep用于标识发出该心跳包的网络节点处于稳定状态;restarting用于标识发出该心跳包的网络节点即将重启;poweroff用于标识发出该心跳包的网络节点即将下电。在本发明的一些实施例中,还可以通过第一标识位向服务器传达网络节点需要其协助搜索用于发送心跳包的最优心跳间隔t_opt,在这些实施例中可以在定义该msgflag字段的枚举类型时设置test类,以用于标识所述网络节点即将开始搜索t_opt。

在发送心跳包时,网络节点可以根据其即时的工作状态来设置该第一标识位,例如在正常运行时向服务器发送第一标识位为keep的心跳包,在需要重启前向服务器发送第一标识位为restarting的心跳包,在需要下电前向服务器发送第一标识位为poweroff的心跳包。

步骤2.服务器根据所接收到的心跳包中的第一标识位,确定与所述网络节点对应的网络通路状态。

接收到心跳包的服务器可以通过解析该心跳包所包含的第一标识位来确定发出该心跳包的网络节点的最新的工作状态,确定该网络节点处于稳定状态、重启状态、下电状态中的哪一种。所确定的网络节点的工作状态有助于服务器确定各个网络节点之间的网络通路状态是否出现异常。如前文中所述,是否检测到一个网络节点的“心跳”并不等同于与该网络节点之间的通路状态是否正常的结论,对此本发明采用第一标识位来标注网络节点的最新的工作状态,以便服务器确定各个网络节点之间的网络通路状态。表1和表2示出了本发明中心跳包的第一标识位与网络通路状态之间的关联关系。

表1心跳包中第一标识位与网络节点工作状态的对应关系

表2基于网络节点工作状态的网络通路状态的判定标准

接收到心跳包的服务器可以依据表1来判断发出该心跳包的网络节点最新的工作状态,并依据表2判断与受该网络节点影响的网络通路是否出现故障。图3示出了根据本发明的一个实施例由服务器根据所接收到的心跳包中的第一标识位确定网络通路状态的方法流程。参考图3,接收到心跳包的服务器(监测服务端)在解析出心跳包的第一标识位(标志位),判断标志位是否为“restarting”,若是则存储该标志位并将该节点的状态确定为“restarting”,否则继续判断标志位是否为“keep”,若是则存储该标志位并将该节点的状态确定为“normal”,否则继续判断标志位是否为“poweroff”,若是则存储该标志位并将该节点的状态确定为“poweroff”。判断在一个超时时限timeout内有没有收到心跳包,若没有收到(n_cnt为0)则开始判断网络通路状态是否为发生故障(表2中的“fault”)。在判断网络通路状态是否发生故障时,依据表2的标准进行判断:若节点的状态为“normal”且在随后的3个超时时限内都没有收到心跳包,则判断网络通路异常,否则继续判断;若节点的状态为“restarting”且在随后的2分钟(根据本发明的其他实施例,也可以选取与重启节点所耗费时间相对应的值)内没有收到心跳包,则判断网络通路异常,否则继续判断;若节点的状态为“poweroff”,则判断网络通路异常。

通过由网络节点向服务器发送包含第一标识位的心跳包,并由服务器根据解析出的第一标识位、根据解析结果结合心跳包的接收情况,可以准确地判断出受到网络节点状态影响的网络通路。

<实施例2>

在当前的心跳机制应用设计中,为解决网络延迟或丢包造成的误判问题,通常将发送端的心跳间隔设置为网络心跳超时时限的1/2到1/3。然而,这样设置的心跳间隔较小且固定,各个网络节点需要频繁地发送心跳包,为集群网络及其监测服务端带来了巨大的负担,尤其是对于具有较多网络节点的集群网络。因而,有必要通过搜索确定最优心跳间隔。下面将介绍如何利用<实施例1>中所提到的标注为test的第一标识位来搜索最优心跳间隔t_opt。根据本发明的一个实施例,由网络节点通过向服务器发送包含设置为test的第一标识位的心跳包,在网络节点收到服务器的反馈后开始搜索t_opt的过程,包括:

步骤i.网络节点以当前心跳间隔t_curr=(t1+t2)/2向服务器发送心跳包,其中t1和t2选自[a,b]区间,其中t_out/2≤a<b≤t_out-t_delay,t_out为超时时限,t_delay为心跳包传输的平均时延,且t1<t2。

步骤ii.所述服务器根据心跳包的接收情况向所述网络节点发送ack反馈或nack反馈,例如若服务器在3个超时时限内没有收到心跳包则发送nack反馈,若收到心跳包则发送ack反馈。

步骤iii.网络节点根据接收到的反馈对t1和t2进行修改,若收到ack反馈则修改t1=t_curr,若收到nack反馈则修改t2=t_curr。

步骤iv.判断t1和t2之间的差值是否小于设定的心跳间隔阈值δt,若t2-t1小于δt则将最优心跳间隔t_opt设置为t1或t2,否则更新当前心跳间隔t_curr并重复上述步骤i)到iii)。

图4示出了根据本发明的一个实施例,通过网络节点和服务器协作确定t_opt的过程。从图4可以看出,最优心跳间隔t_opt可通过二分搜索的方式确定,若二分值t1和t2之间的差值非常小(小于δt),则可以任意选取t1或t2作为t_opt,若不满足,则由网络节点尝试采用二分值的均值作为当前心跳间隔以获取来自服务器的反馈。若服务器的反馈为nack则认为当前心跳间隔过大,需要降低二分值的上限t2,若服务器的反馈为ack则认为当前心跳间隔较小,可以增加二分值的下限t1。由此,可以通过不断地尝试确定一个能满足使得服务器可以在超时时限内接收到心跳包的最大心跳间隔值。优选地,将t1的搜索范围设置为大于等于t_out/2,使得服务器在一个超时时限内最多可收到一个心跳包,将t2的搜索范围设置为t_out或t_out-t_delay,以保证服务器能够在超时时限内收到心跳包。

<实施例3>

根据本发明的一个实施例,为了进一步降低网络数据流量,还可以将网络节点的资源使用率信息与心跳信息合并到同一个数据包中进行发送。这是由于,在许多负载均衡方法中都要求集群中的节点定时地向服务器发送其当前的资源使用率,以便服务器能够根据节点实际的负载状况统一地调度各节点之间的负载。心跳包同样需要定时发送,将资源使用率信息与心跳信息合并到一个数据包中发送可以降低网络数据流量,减少集群节点网络的通信压力。

根据本发明的一个实施例,可以将所述数据包的心跳间隔设置为所述集群节点网络针对心跳信息的超时时限和对资源使用率信息的时间间隔要求中的较小值。

根据本发明的另一个实施例,可以从以下两种方式中进行选择。方式1:独立地发送心跳包和系统资源监测包;方式2:将心跳包和资源监测包合并为一个心跳包发送。通过分别分析这两种方式对网络流量的影响,以选择网络数据流量较小的方式。

下面将通过数据模型分析上述两种方式的数据流量。假设消息头的大小为a字节,心跳包的数据域大小为b字节,系统资源监测包的数据域的大小为c字节。集群节点的数量为n个,节点发送心跳包的时间间隔为t1秒,发送资源监测包的时间间隔为t2秒,,一个小时内n个节点定时发送心跳包和资源监测包产生的网络流量为f。

对于方式1,其分别发送如图5(a)和图5(b)所示出的心跳包和资源监测包,节点在一个小时内发送的心跳包和资源监测包产生的网络流量f1为:

对以上公式化简得到:

对于方式2,其将资源监测包的数据域添加到心跳包的尾部随心跳包一起发送,图5(c)示出了合并后的数据包结构。节点以这种方式发送心跳包一个小时产生的网络流量为f2,发送的时间间隔取t1、t2值的较小者(这样可以保证监测服务端在设置的需求时间内至少一次得到心跳信息和资源监测信息)。f2的取值取决于t1和t2,因而存在以下三种情形。

①当t1<t2时:

将公式(2)减去公式(3)得到:

对于公式(4)

由此可以看出,在t1<t2时,若满足则采用方式2更有利于降低网络数据流量。

②当t1>t2时,则有:

将公式(2)减去公式(6)得到:

对于公式(7)

由此可以看出,在t1>t2时,若满足则采用方式2更有利于降低网络数据流量。

③当t1=t2时,则有:

所以当t1=t2时,采用方式2更节省网络数据流量。

表3-表5分别示出了根据本发明的一个实施例的针对图5(a)-(c)的数据包的结构。

表3图5(a)中心跳包数据结构

表4图5(b)中资源监测包的数据结构

表5图5(c)中合并心跳包的数据结构

其中,表3和表4与前文中的方式1对应,表5与方式2对应。可以看到,在本发明中针对心跳信息增加了packetflag的字段(第二标识位),该字段用于区分当前的心跳包采用的是方式1还是方式2,例如当该字段为0x00时表示当前心跳包为不包含资源监测信息的数据包,当该字段为0x01时表示当前心跳包中还包含有资源监测信息。接收心跳包的服务器可以通过解析packetflag字段来确定数据包采用的方式。

为了验证本发明的效果,发明人进行了以下测试分析。

<可靠性测试>

该改进的心跳机制实现采用c语言编程,代码按照图3、图4所示出的在节点端和服务器端的交互流程图编写,通信协议采用tcp协议,服务器端采用io多路复用接口函数epoll来监听接收数据。在3个节点上,对根据本发明的用于集群节点网络的方法进行了可靠性测试。设置服务器端的超时时限timeout=10s,最优心跳间隔的查找范围为[5s,10s],心跳误差ρ=10ms,3个节点的ip分别为10.21.101.172、10.21.3.97、10.21.2.125,分别编号为0号节点、1号节点和2号节点。测试分为对网络延迟和网络断开测试、对节点重启和关机测试。

针对其中网络延迟和断开场景的可靠性,对网络延迟测试和网络断开测试的方法为,在心跳机制正常工作的情况下,在监测服务端模拟网络延迟测试,然后依次拔掉3个节点的网线,测试结果如图6所示。从图6的测试结果中可以看出,在3个节点建立了与服务器端的连接后进入最优心跳间隔测试阶段。当最优心跳间隔查找完成后,服务器端开始正常接收“keep”标志位的心跳包。在正常接收的1个周期后,2号节点的心跳包丢失。考虑到可能是网络延迟导致,则继续接收,在下一个超时时限内又收到了2号节点的心跳包,判定网络存在延迟,而并没有上报网络通路故障。然后,依次断开0号节点、1号节点和2号节点,服务器端都能够正确判决出0号节点、1号节点和2节点的网络出现了故障,验证了该改进心跳机制对网络延迟和网络断开的可靠性。

图7示出了与图6对应的最优心跳间隔测试阶段的测试细节,在最优心跳间隔测试阶段采用二分法发送心跳包,并判断服务端回复的心跳包类型,若为“ack”则增加所采用的心跳间隔t_curr,若为“nack”则减小t_curr。从图7中可以看出,经过多次交互,t_curr不断地向接近超时时限10s且能确保服务器可以收到的数值靠近,直到最终稳定在9023ms。和传统的将心跳间隔设置为超时时限的1/3~1/2倍即设置为3.3~5s相比,使用二分法获取的心跳监测大而优,减少了心跳包发送的频繁度,减少了监测服务端的网络负担。

图8示出了针对其中节点重启和下电场景的可靠性测试结果,在心跳机制正常工作的情况下,先重启所有节点,待节点都重启后下电0号节点。系统初始启动时,监测服务端与3个节点建立连接成功。在第一个超时时限内收到3个节点的心跳包,然后成功检测出节点重启。过一小段时间后,节点重启成功,并在第一超时时限内收到了所有节点的心跳包,在下一超时时限内成功检测出了0号节点下电和其他两个节点正常。图6的测试结果验证了该改进心跳机制对节点重启和下电的可靠性。

<不同心跳包的组包方式产生网络流量的对比>

在linux系统下,通过使用进程流量监控工具nethogs,对心跳机制的监测服务端进程接收和发送的流量进行监控。分别采集了10min、20min、30min的流量进行对比,结果如图9所示,显然改进的心跳机制较传统的心跳机制更节省流量。从图9的柱状图可以明显看出,采用本发明的<实施例3>的方式所产生的网络流量更少,对监测服务端造成的网络压力更小。随着时间的推移,本发明与现有技术所产生的网络流量差距越来越大,说明随着时间的增大,采用本发明的方案可以节省更多的网络流量。

综上可知,本发明提供了一种用于集群节点网络的方法,其利用在心跳包中增加用于标注网络节点工作状态的第一标识位的方式,使得服务器可以准确地判断出各个网络节点之间的网络通路状态。在心跳包中设置了第一标识位的基础上,本发明可以采用更大的心跳间隔值,例如大于超时时限的二分之一,甚至是接近超时时限的心跳间隔值。最优心跳间隔可以通过搜索获得,利用第一标识位告知服务器协助网络节点搜索最优心跳间隔,通过二分法快速地确定使得服务器可以在超时时限内接收到心跳包的最大心跳间隔值以作为该最优心跳间隔。将网络节点的资源使用率信息与心跳信息合并到同一个数据包中进行发送可以降低网络数据流量,减少集群节点网络的通信压力。

需要说明的是,上述实施例中介绍的各个步骤并非都是必须的,本领域技术人员可以根据实际需要进行适当的取舍、替换、修改等。

最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管上文参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

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