一种分布式系统的网络异常检测方法及系统转让专利

申请号 : CN202310144498.8

文献号 : CN116170294B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 柯杰伟徐文豪王弘毅张凯

申请人 : 北京志凌海纳科技有限公司

摘要 :

本发明涉及网络异常检测技术领域,提供了一种分布式系统的网络异常检测方法,包括:S1:启动L2Ping服务,获取集群配置信息;S2:基于每个网口,为每个网口生成若干随机MAC地址,将随机MAC地址作为通过L2Ping服务生成的L2Ping探测包的头部MAC地址,每个网口采用包括不同头部MAC地址的L2Ping探测包在当前网口与其他网络节点之间进行若干次探测,在若干次探测结果中获取满足当前网口自己发自己收或自己发对方收的一组发送端MAC地址和接收端M AC地址;S3:每个网络节点中的每个网口,采用L2Ping服务定期向所有的其他网络节点发送L2Ping探测包,对网口的健康状态进行评估。能够适应不同的配置场景的网络异常检测,并支持无法收发、高网络延迟、高丢包率等多种网络异常类型的探测。

权利要求 :

1.一种分布式系统的网络异常检测方法,其特征在于,包括以下步骤:

S1:启动L2Ping服务,向集群配置服务获取集群配置信息,其中,所述L2Ping服务为运行于集群中每个网络节点内部的用于探测所述网络节点上各个网口的健康状态的探测工具,所述集群配置服务为存储集群中所有所述网络节点的配置信息的服务;

S2:基于每个网络节点中的每个网口,为每个所述网口生成若干随机MA C地址,将所述随机MAC地址作为通过所述L2Ping服务生成的L2Ping探测包的头部MAC地址,每个所述网口采用包括不同所述头部MAC地址的所述L2Ping探测包在当前所述网口与其他的所述网络节点之间进行若干次探测,在若干次探测结果中获取满足当前所述网口自己发自己收或自己发对方收的一组发送端MAC地址和接收端MAC地址,作为后续采用所述L2Ping服务进行探测的所述发送端MAC地址和所述接收端MAC地址;

S3:每个所述网络节点中的每个所述网口,采用所述L2Ping服务定期向所有的其他所述网络节点发送所述L2Ping探测包,对所述网口的健康状态进行评估。

2.根据权利要求1所述的分布式系统的网络异常检测方法,其特征在于,在步骤S1中,向所述集群配置服务获取所述集群配置信息,具体为:当所述L2Ping服务第一次启动时,向所述集群配置服务获取所述集群配置信息,其中,所述集群配置信息包括所有的所述网络节点的网口MAC、网络绑定类型、网络绑定关联的网口列表、VLANID在内的信息。

3.根据权利要求1所述的分布式系统的网络异常检测方法,其特征在于,在步骤S2中,获取满足当前所述网口自己发自己收或自己发对方收的一组所述发送端MAC地址和所述接收端MAC地址,作为后续采用所述L2Ping服务进行探测的所述发送端MAC地址和所述接收端MAC地址,具体为:S21:对于每个所述网络节点中的每个所述网口,所述L2Ping服务为每个所述网口生成若干所述随机MAC地址,将所述随机MAC地址作为通过所述L2Ping服务生成的所述L2Ping探测包的所述头部MAC地址;

S22:对于当前所述网口,所述L2Ping服务以当前所述网口的若干所述随机MAC地址作为所述发送端MAC地址向其他的所述网络节点发送若干次所述头部MAC地址不同的所述L2Ping探测包;

S23:其他的所述网络节点上的所述网口接收到当前所述网口发送的所述L2Ping探测包之后,选择自身的所述随机MAC地址中的任意一个从接收所述L2Ping探测包的所述网口回复当前所述网口;

S24:当前所述网口接收到其他的所述网络节点上的所述网口的回复之后,以当前所述网口的若干所述随机MAC地址作为所述发送端MAC地址,并以其他的所述网络节点上的所述网口回复的所述随机MAC地址作为所述接收端MAC地址,向其他的所述网络节点再次发送若干次所述头部MAC地址不同的所述L2Ping探测包;

S25:其他的所述网络节点上的所述网口再次接收到当前所述网口发送的所述L2Ping探测包之后,以所述接收端MAC地址从接收所述L2Ping探测包的所述网口回复当前所述网口;

S26:当前所述网口接收到其他的所述网络节点上的所述网口的回复之后,在若干次的探测结果中获取满足当前所述网口自己发自己收或自己发对方收的一组发送端MAC地址和接收端MAC地址,作为后续采用所述L2Ping服务进行探测的所述发送端MAC地址和所述接收端MAC地址。

4.根据权利要求1所述的分布式系统的网络异常检测方法,其特征在于,在步骤S3中,每个所述网络节点中的每个所述网口,采用所述L2Ping服务定期向所有的其他所述网络节点发送所述L2Ping探测包,对所述网口的健康状态进行评估,具体为:S31:每个所述网络节点中的每个所述网口,采用所述L2Ping服务定期向所有的其他所述网络节点发送所述L2Ping探测包,并统计所述L2Ping探测包的收发情况;

S32:判断当前所述网口是否被隔离,若当前所述网口被隔离,判断当前所述网口是否恢复健康,若恢复健康解除所述网口的隔离,若当前所述网口未被隔离,对当前所述网口的健康状态进行判断,并当当前所述网口异常时进行包括重置、隔离、报警在内的操作。

5.根据权利要求4所述的分布式系统的网络异常检测方法,其特征在于,在步骤S31中,统计所述L2Ping探测包的收发情况,具体为:配置所述L2Ping探测包的等待回复超时时间,若超时后未收到其他所述网络节点的回复,判断所述L2Ping探测包丢包;

配置所述L2Ping探测包的探测周期,在所述探测周期内部以一固定时间间隔向其他所述网络节点发送所述L2Ping探测包,并统计往返时间RTT;

根据所述L2Ping探测包的丢包情况获取丢包率,根据统计的所述往返时间RTT获取平均延迟。

6.根据权利要求5所述的分布式系统的网络异常检测方法,其特征在于,在步骤S32中,若当前所述网口未被隔离,对当前所述网口的健康状态进行判断,并当当前所述网口异常时进行包括重置、隔离、报警在内的操作,具体为:当当前所述网口向其他所有的所述网络节点发送的所述L2Ping探测包出现包括无法与其他所有的所述网络节点完成收发、与其他所有的所述网络节点的所述平均延迟超过延迟阈值、与其他所有的所述网络节点的所述丢包率超过丢包阈值在内的至少一种异常特征,且所述异常特征持续若干个所述探测周期时,判断当前所述网口异常;

当当前所述网口异常时,对所述网口进行包括重置、隔离、报警在内的操作。

7.根据权利要求1所述的分布式系统的网络异常检测方法,其特征在于,还包括:

在所述L2Ping服务运行中,定期查询所述集群配置信息,当所述集群配置信息发生变更时,根据新的所述集群配置信息重新对每个当前所述网口与其他所述网络节点之间进行健康状态评估的所述L2Ping探测包的所述发送端MAC地址和所述接收端MAC地址进行探测;

所述L2Ping服务每次获取所述集群配置信息时,将所述集群配置信息缓存到本地文件中,当出现网络异常时,从所述本地文件中读取所述集群配置信息。

8.一种用于执行如权利要求1‑7所述的分布式系统的网络异常检测方法的分布式系统的网络异常检测系统,其特征在于,包括:集群配置信息获取模块,用于启动L2Ping服务,向集群配置服务获取集群配置信息,其中,所述L2Ping服务为运行于集群中每个网络节点内部的用于探测所述网络节点上各个网口的健康状态的探测工具,所述集群配置服务为存储集群中所有所述网络节点的配置信息的服务;

MAC地址探测模块,用于基于每个网络节点中的每个网口,为每个所述网口生成若干随机MAC地址,将所述随机MAC地址作为通过所述L2Ping服务生成的L2Ping探测包的头部MAC地址,每个所述网口采用包括不同所述头部MAC地址所述L2Ping探测包在当前所述网口与其他的所述网络节点之间进行若干次探测,在若干次探测结果中获取满足当前所述网口自己发自己收或自己发对方收的一组发送端MAC地址和接收端MAC地址,作为后续采用所述L2Ping服务进行探测的所述发送端MAC地址和所述接收端MAC地址;

健康状态评估模块,用于提供给每个所述网络节点中的每个所述网口,采用所述L2Ping服务定期向所有的其他所述网络节点发送所述L2Ping探测包,对所述网口的健康状态进行评估。

9.一种计算机设备,包括存储器和一个或多个处理器,所述存储器中存储有计算机代码,所述计算机代码被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如权利要求1至7中任一项所述的方法。

10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机代码,当所述计算机代码被执行时,如权利要求1至7中任一项所述的方法被执行。

说明书 :

一种分布式系统的网络异常检测方法及系统

技术领域

[0001] 本发明涉及网络异常检测的技术领域,尤其涉及一种分布式系统的网络异常检测方法及系统。

背景技术

[0002] 在分布式系统中,集群中的多个物理节点依靠网络进行通信,网络的质量影响着整个系统的可用性。当出现网络故障时,需要有办法准确、快速地定位发生异常的组件,以便修复或者隔离异常组件,降低对整个系统的不良影响。
[0003] 如图1为一种典型的网络拓扑结构,集群的多个节点连接到同一个物理交换机或者逻辑交换机(如图中采用堆叠技术将两个物理交换机组合成一个逻辑交换机),在同一个二层网络下直接通信。每个节点可能配置两个网口构成网络绑定(下文也称为bonding)支持网口高可用性和负载均衡。
[0004] 从每个节点的视角看,网络异常的表现包括网口无法正常收发、网口收发有较高的延迟或丢包率等。导致网络异常的原因可能有,网口硬件或者驱动发生故障、网线模块发生故障、网口连接的上游链路发生故障或者拥塞等。
[0005] 现有的网络异常探测方法可以分成带内检测和带外检测。带内检测一般通过监控系统中的现有流量发生异常,带外检测则通过从外部产生新的流量发现异常。本发明属于带外检测方法,能够提前发现潜在的异常。根据部署位置的不同,网络异常探测方法可以分成部署在物理节点和部署在物理交换机上的方法。本发明属于部署在物理节点的方法,更适用于对物理交换机只有有限访问权限的场景。下面仅对部署在物理节点上的网络异常探测方法做讨论。
[0006] 最常见的检测方法是通过ping工具确定自身能否与外界通信,但对于多网口网络绑定的场景却不适用,因为ping流量可能走的是其中一个网口,无法控制ping流量探测另一个网口的健康状态。针对多网口网络绑定,不同的网络绑定技术给出了各自的异常检测方法。
[0007] (1)VMware的Teaming支持两种网络故障检测策略
[0008] a:Linkstatusonly(仅判断网络链路的up和down),检测网口的物理链路状态,能够检测网线拔出、直连物理交换机掉电等场景。无法检测的场景包括物理交换机的端口被STP阻塞;VLAN错误配置;上游物理交换机的链路故障等。
[0009] b:Beaconprobing(每个物理网口周期性的发送广播信号报文,实现网络链路检测)。同一个主机组成Teaming的多个网口之间互相发送beaconp robe探测包,至少需要三个网口。如果发现一个网口无法接收到另外两个的回复,那么就可以判定该网口异常,进行隔离。探测包方式能够检测出Link statusonly策略无法检测的场景。但不支持交换机配置PortChannel(将多个交换机端口组合成一个逻辑端口)的场景,这是因为Beaconprobe探测包是二层包,目的地址是其他网口的MAC,当探测包从PortChannel端口发出后,交换机不会将它转发回同一个PortChannel端口,另外两个网口无法收到探测包。
[0010] (2)Linux的bonding也支持两种网络故障检测策略
[0011] a:MIImonitor。检测网口的物理链路状态,类似于VMware的Linksta tusonly。
[0012] b:ARPmonitor。用户可以指定多个目标主机IP作为ARP探测的目的,L inuxbonding驱动会定期从各个网口发送ARP探测包,并且检查在一个周期内各个网口是否接收到任何包,从而确定网口是否有链路问题。在交换机配置了PortChannel的场景,ARPmonitor要求物理交换机采用RoundRobin负载均衡方式,否则在流量比较空闲时,可能ARP的所有回复都被同一个网口接收,其他网口会被错误地禁用。但主流的交换机都不支持RoundRobin,因此该策略无法适用于PortChannel场景。
[0013] (3)LACP异常检测
[0014] LACP是一种实现链路动态聚合与解聚合的协议,交换机端口和主机网口可以配置成active或者passive模式,至少有一方需要配置成active。act ive方会主动发送心跳给对方,passive只会返回回复。通过心跳,LACP可以探测出网口是否发生故障。
[0015] 对于现有技术中网络绑定技术,在进行网络异常探测时存在以下不足:
[0016] (1)无法适应不同的配置场景。例如ping不支持多网口网络绑定场景;VMware的Beaconprobing和Linux的ARPmonitor不支持PortChannel场景;LACP只能够支持PortChannel场景。
[0017] (2)无法探测更丰富的网络异常类型。例如,较高的网络延迟或者丢包率可能影响系统业务运行,但是上述网络绑定技术都不支持对网络延迟、丢包率的探测。

发明内容

[0018] 针对上述问题,本发明的目的在于提供一种分布式系统的网络异常检测方法及系统,能够适应各种不同的配置场景的网络异常检测,并支持无法收发、高网络延迟、高丢包率等多种网络异常类型的探测。
[0019] 本发明的上述发明目的是通过以下技术方案得以实现的:
[0020] 一种分布式系统的网络异常检测方法,包括以下步骤:
[0021] S1:启动L2Ping服务,向集群配置服务获取集群配置信息,其中,所述L2Ping服务为运行于集群中每个网络节点内部的用于探测所述网络节点上各个网口的健康状态的探测工具,所述集群配置服务为存储集群中所有所述网络节点的配置信息的服务;
[0022] S2:基于每个网络节点中的每个网口,为每个所述网口生成若干随机MA C地址,将所述随机MAC地址作为通过所述L2Ping服务生成的L2Ping探测包的头部MAC地址,每个所述网口采用包括不同所述头部MAC地址的所述L2Ping探测包在当前所述网口与其他的所述网络节点之间进行若干次探测,在若干次探测结果中获取满足当前所述网口自己发自己收或自己发对方收的一组发送端MAC地址和接收端MAC地址,作为后续采用所述L2Ping服务进行探测的所述发送端MAC地址和所述接收端MAC地址;
[0023] S3:每个所述网络节点中的每个所述网口,采用所述L2Ping服务定期向所有的其他所述网络节点发送所述L2Ping探测包,对所述网口的健康状态进行评估。
[0024] 进一步地,在步骤S1中,向所述集群配置服务获取所述集群配置信息,具体为:
[0025] 当所述L2Ping服务第一次启动时,向所述集群配置服务获取所述集群配置信息,其中,所述集群配置信息包括所有的所述网络节点的网口MAC、网络绑定类型、网络绑定关联的网口列表、VLANID在内的信息。
[0026] 进一步地,在步骤S2中,获取满足当前所述网口自己发自己收或自己发对方收的一组所述发送端MAC地址和所述接收端MAC地址,作为后续采用所述L2Ping服务进行探测的所述发送端MAC地址和所述接收端MAC地址,具体为:
[0027] S21:对于每个所述网络节点中的每个所述网口,所述L2Ping服务为每个所述网口生成若干所述随机MAC地址,将所述随机MAC地址作为通过所述L2Ping服务生成的所述L2Ping探测包的所述头部MAC地址;
[0028] S22:对于当前所述网口,所述L2Ping服务以当前所述网口的若干所述随机MAC地址作为所述发送端MAC地址向其他的所述网络节点发送若干次所述头部MAC地址不同的所述L2Ping探测包;
[0029] S23:其他的所述网络节点上的所述网口接收到当前所述网口发送的所述L2Ping探测包之后,选择自身的所述随机MAC地址中的任意一个从接收所述L2Ping探测包的所述网口回复当前所述网口;
[0030] S24:当前所述网口接收到其他的所述网络节点上的所述网口的回复之后,以当前所述网口的若干所述随机MAC地址作为所述发送端MAC地址,并以其他的所述网络节点上的所述网口回复的所述随机MAC地址作为所述接收端MAC地址,向其他的所述网络节点再次发送若干次所述头部MAC地址不同的所述L2Ping探测包;
[0031] S25:其他的所述网络节点上的所述网口再次接收到当前所述网口发送的所述L2Ping探测包之后,以所述接收端MAC地址从接收所述L2Ping探测包的所述网口回复当前所述网口;
[0032] S26:当前所述网口接收到其他的所述网络节点上的所述网口的回复之后,在若干次的探测结果中获取满足当前所述网口自己发自己收或自己发对方收的一组发送端MAC地址和接收端MAC地址,作为后续采用所述L2Ping服务进行探测的所述发送端MAC地址和所述接收端MAC地址。
[0033] 进一步地,在步骤S3中,每个所述网络节点中的每个所述网口,采用所述L2Ping服务定期向所有的其他所述网络节点发送所述L2Ping探测包,对所述网口的健康状态进行评估,具体为:
[0034] S31:每个所述网络节点中的每个所述网口,采用所述L2Ping服务定期向所有的其他所述网络节点发送所述L2Ping探测包,并统计所述L2Ping探测包的收发情况;
[0035] S32:判断当前所述网口是否被隔离,若当前所述网口被隔离,判断当前所述网口是否恢复健康,若恢复健康解除所述网口的隔离,若当前所述网口未被隔离,对当前所述网口的健康状态进行判断,并当当前所述网口异常时进行包括重置、隔离、报警在内的操作。
[0036] 进一步地,在步骤S31中,统计所述L2Ping探测包的收发情况,具体为:
[0037] 配置所述L2Ping探测包的等待回复超时时间,若超时后未收到其他所述网络节点的回复,判断所述L2Ping探测包丢包;
[0038] 配置所述L2Ping探测包的探测周期,在所述探测周期内部以一固定时间间隔向其他所述网络节点发送所述L2Ping探测包,并统计所述往返时间RTT;
[0039] 根据所述L2Ping探测包的丢包情况获取丢包率,根据统计的所述往返时间RTT获取平均延迟。
[0040] 进一步地,在步骤S32中,若当前所述网口未被隔离,对当前所述网口的健康状态进行判断,并当当前所述网口异常时进行包括重置、隔离、报警在内的操作,具体为:
[0041] 当当前所述网口向其他所有的所述网络节点发送的所述L2Ping探测包出现包括无法与其他所有的所述网络节点完成收发、与其他所有的所述网络节点的所述平均延迟超过延迟阈值、与其他所有的所述网络节点的所述丢包率超过丢包阈值在内的至少一种异常特征,且所述异常特征持续若干个所述探测周期时,判断当前所述网口异常;
[0042] 当当前所述网口异常时,对所述网口进行包括重置、隔离、报警在内的操作。
[0043] 进一步地,在所述L2Ping服务运行中,定期查询所述集群配置信息,当所述集群配置信息发生变更时,根据新的所述集群配置信息重新对每个当前所述网口与其他所述网络节点之间进行健康状态评估的所述L2Ping探测包的所述发送端MAC地址和所述接收端MAC地址进行探测;所述L2Ping服务每次获取所述集群配置信息时,将所述集群配置信息缓存到本地文件中,当出现网络异常时,从所述本地文件中读取所述集群配置信息。
[0044] 一种用于执行如上述的分布式系统的网络异常检测方法的分布式系统的网络异常检测系统,包括:
[0045] 集群配置信息获取模块,用于启动L2Ping服务,向集群配置服务获取集群配置信息,其中,所述L2Ping服务为运行于集群中每个网络节点内部的用于探测所述网络节点上各个网口的健康状态的探测工具,所述集群配置服务为存储集群中所有所述网络节点的配置信息的服务;
[0046] MAC地址探测模块,用于基于每个网络节点中的每个网口,为每个所述网口生成若干随机MAC地址,将所述随机MAC地址作为通过所述L2Ping服务生成的L2Ping探测包的头部MAC地址,每个所述网口采用包括不同所述头部MAC地址所述L2Ping探测包在当前所述网口与其他的所述网络节点之间进行若干次探测,在若干次探测结果中获取满足当前所述网口自己发自己收或自己发对方收的一组发送端MAC地址和接收端MAC地址,作为后续采用所述L2Ping服务进行探测的所述发送端MAC地址和所述接收端MAC地址;
[0047] 健康状态评估模块,用于提供给每个所述网络节点中的每个所述网口,采用所述L2Ping服务定期向所有的其他所述网络节点发送所述L2Ping探测包,对所述网口的健康状态进行评估。
[0048] 一种计算机设备,包括存储器和一个或多个处理器,所述存储器中存储有计算机代码,所述计算机代码被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如上述的方法。
[0049] 一种计算机可读存储介质,所述计算机可读存储介质存储有计算机代码,当所述计算机代码被执行时,如上述的方法被执行。
[0050] 与现有技术相比,本发明包括以下至少一种有益效果是:
[0051] (1)通过提供一种分布式系统的网络异常检测方法,在该方法中通过对每一个网络节点的每一个网口随机产生多组随机MAC地址的方式进行对后续采用L2Ping服务定期向所有的其他网络节点发送的L2Ping探测包的发送端MAC地址和接收端MAC地址的探测,以获取满足自己发自己收或者自己发对方收的发送端MAC地址和接收端MAC地址,能够适用于不同的网络配置场景,尤其是在交换机端配置了PortChannel的网络配置场景,解决其他现有的异常检测方法仅能适用于个别网络配置场景的局限。同时在配置发生变更时,能够自适应适配,根据新的配置发现符合检测要求的发送端MAC地址和接收端MAC地址,继续进行异常检测。
[0052] (2)通过良好的L2Ping协议设计,根据L2Ping探测包回复的RTT统计,不管是单网口还是多网口场景,都能够支持无法收发、高网络延迟、高丢包率等多种网络异常类型的探测,而其他现有检测方法在多网口场景一般仅能检测无法收发异常。
[0053] (3)本发明的L2Ping服务能够快速准确地发现分布式系统中的常见网络异常,及时协助运维人员定位出现网络异常的网口,并且有一定的自我修复和故障隔离能力。

附图说明

[0054] 图1为典型的网络拓扑结构示意图;
[0055] 图2为本发明“自己发,自己收”场景和“自己发,对方收”场景网络拓扑结构示意图;
[0056] 图3为本发明发明分布式系统的网络异常检测方法的网络架构示意图[0057] 图4为本发明分布式系统的网络异常检测方法的整体流程图;
[0058] 图5为本发明获取集群配置信息示意图;
[0059] 图6为本发明探测PortChannel配置示意图;
[0060] 图7为本发明L2Ping探测和异常处理示意图;
[0061] 图8为本发明分布式系统的网络异常检测系统的整体结构图。

具体实施方式

[0062] 为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0063] 本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
[0064] 本发明具体提出了一种分布式系统的网络异常检测方法及系统,以对网口的健康状态进行探测。具备以下两种优势:
[0065] (1)能够适应各种不同的网络配置场景,典型的网络配置场景包括:不同的网络绑定类型(常见类型有只使用其中一个网卡,当网卡损坏时激活另外的一个网卡的多网卡绑定主备策略active‑backup、基于所选择的传送hash策略的多网卡绑定平衡策略balance‑xor、链路汇聚控制协议LACP等)、是否配置了PortChannel、PortChannel采用不同的Loadbalance方式(常见的有根据源端和目的端的MAC、IP、UDP/TCP端口等字段做哈希)等。在配置发生变更时,能够自适应适配。
[0066] (2)支持无法收发、高网络延迟、高丢包率等多种网络异常的探测。
[0067] 本发明的分布式系统的网络异常检测方法的探测原理简介如下:
[0068] 为了探测网络节点的网口的健康状态,需要从网口发送探测包,根据收到回复的情况判定网口是否健康。如果无法收到任何回复,可以认为该网口收发出现异常。如果收到回复的平均延迟很高,或者只收到部分探测包的回复,说明该网口存在高网络延迟或者高丢包率异常。
[0069] 当交换机配置了PortChannel时,对于同一个网络节点,从一个网口发送探测包,对应的回复可能从另一个网口接收到。现有的三层ping工具无法支持处理被其他网口接收到的回复,因此需要一种新的ping工具。
[0070] 本发明在二层网络上实现探测工具L2Ping(Layer‑2Ping),便于构造不同的MAC、VLAN、IP等字段,支持更广泛的探测场景。L2Ping基于系统库libpcap(unix/linux平台下的网络数据包捕获函数包,大多数网络监控软件都以它为基础)为每个网口分别创建一个AF_PACKET套接字,用于该网口的收发。规定L2Ping使用私有L2协议号0x9898,通过libpcap支持的bpf过滤器,限制只有符合该协议号的数据包才会被接收,可以降低处理开销。L2Ping启动后,会向集群所有其他的网络节点定期发送探测包并接收相应回复,同时也会响应其他的网络节点发送过来的探测包并发送回复。通过统计每个探测包的RTT(RoundTripTime),L2Ping可以评估所在网络节点各个网口的健康状态。
[0071] 在PortChannel配置下,对于集群中的同一个网络节点发出的探测包,可能从该网络节点的一个网口发出,对应的回复从该网口节点的另一个网口接收,如果收不到回复,如何判定是哪个网口有异常?异常可能发生在探测包发送过程或者回复接收过程。需要能够提前预测回复从哪个网口接收,才能够确定异常网口。注意到接收主要受到PortChannel的Loadbalance策略控制,交换机根据用户设置的Loadbalance字段(常见的有根据源端和目的端的MAC、IP、UDP/TCP端口等)对数据包做哈希,选择将包转发到其中某个网口。在交换机的实现中,PortChannel选用的哈希函数基本上是固定的,回复被哪个网口收到也就是稳定的。只有当用户改变了Loadbalance的策略,才会带来短时间的变动。因此,可以根据历史接收情况来推测能够接收到回复的网口。
[0072] 以两个网口为例,收发的对应关系共有3种组合,即:自己发自己收、自己发对方收、一个网口自己发自己收而另一个自己发对方收。当接收网口和发送网口一致时,更方便评估单个网口的健康状态。通过随机产生多组源和目的端MAC尝试发送探测包,根据回复可以找到满足“自己发自己收”的一组源和目的端MAC。当PortChannel选用的哈希字段不是MAC时,所有回复都会被哈希到同一个网口,此时可以保证一个网口“自己发自己收”,而另一个网口“自己发对方收”。可见我们总是能够保证至少有一个网口“自己发自己收”。确定了每个网口探测包对应的回复会从哪个网口接收,就可以做异常判定了。
[0073] 如图2左半部分,预测网口1是“自己发,自己收”场景。如果网口1没有收到回复,说明该网口有故障;如果收到了回复,其RTT就反映该网口的状态,可以用于判定是否有高延迟或者高丢包率。
[0074] 如图2右半部分,预测是网口1“自己发,对方收”场景。需要先判定网口2是否有故障,而网口2是可以根据“自己发,自己收”场景做判定的。如果网口2有故障,那么可以对它做相应恢复或者隔离动作,网口1不需要检查。只有当网口2健康时,如果网口1没有收到回复,说明网口1有故障;如果网口1收到了回复,其RTT可以粗略估计为(RTT1‑1/2RTT2)*2,其中RTT1和RTT2分别代表网口1和网口2探测包的RTT,可以用于判定网口1是否有高延迟或者高丢包率。
[0075] 本发明的分布式系统的网络异常检测方法的整体架构如下:
[0076] 为了描述上的方便,我们只以一种通信平面(例如业务、存储、管理)举例,但该发明支持不同的通信平面分别检测,只要它们在一个二层网络内。图3为本发明方案涉及的分布式系统的网络异常检测方法的架构示意图,包括:
[0077] 组成集群的各个网络节点(图3中网络节点为物理服务器),单个通信平面中配置了一个或者多个网口。这些网口连接到同一个二层网络内,在交换机端可能配置了PortChannel。物理服务器内部,运行了L2Ping服务,从各个网口向其他所有的网络节点发送L2Ping探测包,以便探测当前网口是否发生故障。L2Ping服务依赖于libpcap系统库进行收发包。
[0078] 集群配置信息服务,提供集群配置信息的查询服务。该服务可以有多个实例部署在集群中的若干个网络节点中,一般只有一个服务实例处于运行状态,其他实例处于备用状态。
[0079] 本发明的L2Ping探测包的协议格式如下:
[0080] L2Ping构建在Ethernet(以太网)层次之上,其报文格式如下。
[0081] |dstTunMAC|srcTunMAC|802.1Q|EtherType(0x9898)|L2PingHeader|[0082] 其中,dstTunMAC和srcTunMAC分别是发送端MAC地址和接收端MAC地址。它们一般是随机生成的,以尽量满足“自己发自己收”。802.1Q包含V LAN信息,仅在包含VLAN配置时需要携带。EtherType为以太网类型,固定是0x9898。L2PingHeader是L2Ping协议的头部信息。
[0083] L2Ping协议的头部信息包括以下字段:
[0084] Version:用于区分版本号和后续协议升级。
[0085] Operation:表示是L2Ping请求还是回复。
[0086] Flags:L2PingProbe选项,表示探测包是否用于探测PortChannel配置。
[0087] Seq:用于接收到回复时,找到对应请求。请求和回复的Seq是相同的。
[0088] ExpectedTunMac:表示发送端希望接收端的回复使用哪个TunMac地址发送。取值如果为0,表示接收端应该随机使用一个TunMac发送回复;否则,接收端应该使用指定的TunMac发送回复。
[0089] Checksum:针对L2Ping报文头部的校验和,由发送端计算,接收端负责校验,确认报文没有被篡改。校验和计算方法不限,可以是传统的二进制反码求和。
[0090] SrcIP:源端IP,用于识别网络节点主机。
[0091] DstIP:目的端IP,用于识别网络节点主机。
[0092] 第一实施例
[0093] 如图4所示,本实施例提供了一种分布式系统的网络异常检测方法,具体包括以下步骤:
[0094] S1:启动L2Ping服务,向集群配置服务获取集群配置信息,其中,所述L2Ping服务为运行于集群中每个网络节点内部的用于探测所述网络节点上各个网口的健康状态的探测工具,所述集群配置服务为存储集群中所有所述网络节点的配置信息的服务。
[0095] 如图5所示,向所述集群配置服务获取所述集群配置信息,具体为:
[0096] 当所述L2Ping服务第一次启动时,向所述集群配置服务获取所述集群配置信息,其中,所述集群配置信息包括所有的所述网络节点的网口MAC、网络绑定类型、网络绑定关联的网口列表、VLANID在内的信息。对于集群配置信息中的网口MAC是网卡出厂时由厂商设定好的,可以用于唯一标识一个网卡。下文提到的随机MAC地址为我们随机产生的地址,用于找到满足“自己发自己收”的一组发送端MAC地址和接收端MAC地址。
[0097] 进一步地,在所述L2Ping服务运行中,定期查询所述集群配置信息,当所述集群配置信息发生变更时,根据新的所述集群配置信息重新对每个当前所述网口与其他所述网络节点之间进行健康状态评估的所述L2Ping探测包的所述发送端MAC地址和所述接收端MAC地址进行探测;所述L2Ping服务每次获取所述集群配置信息时,将所述集群配置信息缓存到本地文件中,当出现网络异常时,从所述本地文件中读取所述集群配置信息。
[0098] S2:基于每个网络节点中的每个网口,为每个所述网口生成若干随机MA C地址,将所述随机MAC地址作为通过所述L2Ping服务生成的L2Ping探测包的头部MAC地址,每个所述网口采用包括不同所述头部MAC地址的所述L2Ping探测包在当前所述网口与其他的所述网络节点之间进行若干次探测,在若干次探测结果中获取满足当前所述网口自己发自己收或自己发对方收的一组发送端MAC地址和接收端MAC地址,作为后续采用所述L2Ping服务进行探测的所述发送端MAC地址和所述接收端MAC地址。
[0099] 本步骤的目的在于探测集群中是否有探测PortChannel配置,为每个网口找到每个其他网络节点的合适的一组发送端MAC地址和接收端MAC地址,用于后续的L2Ping探测。如图6所示,具体为:
[0100] S21:对于每个所述网络节点中的每个所述网口,所述L2Ping服务为每个所述网口生成若干所述随机MAC地址,将所述随机MAC地址作为通过所述L2Ping服务生成的所述L2Ping探测包的所述头部MAC地址。
[0101] 具体的,对于网络绑定管理中的网络节点的每个网口,L2Ping服务会为它们随机生成若干个随机MAC地址(如10个),可以作为L2Ping探测包的以太网头部MAC地址。据计算,随机产生38000个MAC地址的冲突概率是0.001%,可以忽略不计。为了保证每次启动主机始终使用相同的随机MAC地址,避免大量占用交换机的MACtableentry,可以控制每个网络节点主机产生随机数的种子保持不变。
[0102] S22:对于当前所述网口,所述L2Ping服务以当前所述网口的若干所述随机MAC地址作为所述发送端MAC地址向其他的所述网络节点发送若干次所述头部MAC地址不同的所述L2Ping探测包。
[0103] 具体的,举个例子来说,当前网口的随机MAC地址为10个,以每个网口的10个随机MAC地址作为发送端MAC地址,以其他网络节点的网口MAC作为接收端MAC地址,向其他网络节点发送L2Ping探测包。这些探测包的L2Pin gHeader的ExpectedTunMac设置为0,以便让目标网络节点随机选择随机M AC地址用于回复。并且设置L2PingProbe选项。
[0104] S23:其他的所述网络节点上的所述网口接收到当前所述网口发送的所述L2Ping探测包之后,选择自身的所述随机MAC地址中的任意一个从接收所述L2Ping探测包的所述网口回复当前所述网口。
[0105] 具体的,举个例子来说,目标网络节点的L2Ping服务接收到探测包后,从自身的10个随机MAC地址中随机选择用于回复L2Ping,并从收包网口发出。
[0106] S24:当前所述网口接收到其他的所述网络节点上的所述网口的回复之后,以当前所述网口的若干所述随机MAC地址作为所述发送端MAC地址,并以其他的所述网络节点上的所述网口回复的所述随机MAC地址作为所述接收端MAC地址,向其他的所述网络节点再次发送若干次所述头部MAC地址不同的所述L2Ping探测包。
[0107] 具体的,举个例子来说,当前网口的L2Ping了解到目的网络节点的随机MAC地址后,再次以本地网口的10个随机MAC地址作为发送端MAC,以接收端回复的随机MAC地址作为接收端MAC地址,向接收端发L2Ping探测包。探测包的L2PingHeader的ExpectedTunMac设置为接收端回复的随机MAC地址,以便让接收端使用该随机MAC地址用于回复。并且设置L2PingProbe选项。
[0108] S25:其他的所述网络节点上的所述网口再次接收到当前所述网口发送的所述L2Ping探测包之后,以所述接收端MAC地址从接收所述L2Ping探测包的所述网口回复当前所述网口。
[0109] S26:当前所述网口接收到其他的所述网络节点上的所述网口的回复之后,在若干次的探测结果中获取满足当前所述网口自己发自己收或自己发对方收的一组发送端MAC地址和接收端MAC地址,作为后续采用所述L2Ping服务进行探测的所述发送端MAC地址和所述接收端MAC地址。
[0110] 具体的,接收端的L2Ping服务接收到探测包,以ExpectedTunMac发送回复。当前网口接收到回复后,就能够确定在当前发送端和接收端的随机MA C地址下会从哪个网口接收回复。综合每个网口的收发情况,发送端L2Ping优先选择满足“自己发,自己收”的一组源和目的TunMAC(即发送端MAC地址和接收端MAC地址),如果不满足,再退而其次找到满足“自己发,对方收”的一组源和目的TunMAC(即发送端MAC地址和接收端MAC地址)。
[0111] S3:每个所述网络节点中的每个所述网口,采用所述L2Ping服务定期向所有的其他所述网络节点发送所述L2Ping探测包,对所述网口的健康状态进行评估。如图7所示,具体为:
[0112] S31:每个所述网络节点中的每个所述网口,采用所述L2Ping服务定期向所有的其他所述网络节点发送所述L2Ping探测包,并统计所述L2Ping探测包的收发情况,具体为:
[0113] 配置所述L2Ping探测包的等待回复超时时间(如500ms),若超时后未收到其他所述网络节点的回复,判断所述L2Ping探测包丢包。
[0114] 配置所述L2Ping探测包的探测周期(如10s),在所述探测周期内部以一固定时间间隔(1s)向其他所述网络节点发送所述L2Ping探测包,并统计所述往返时间RTT。
[0115] 根据所述L2Ping探测包的丢包情况获取丢包率,根据统计的所述往返时间RTT获取平均延迟。
[0116] S32:判断当前所述网口是否被隔离,若当前所述网口被隔离,判断当前所述网口是否恢复健康,若恢复健康解除所述网口的隔离,若当前所述网口未被隔离,对当前所述网口的健康状态进行判断,并当当前所述网口异常时进行包括重置、隔离、报警在内的操作。
[0117] 其中,若当前所述网口未被隔离,对当前所述网口的健康状态进行判断,并当当前所述网口异常时进行包括重置、隔离、报警在内的操作,具体为:
[0118] 当当前所述网口向其他所有的所述网络节点发送的所述L2Ping探测包出现包括无法与其他所有的所述网络节点完成收发、与其他所有的所述网络节点的所述平均延迟超过延迟阈值、与其他所有的所述网络节点的所述丢包率超过丢包阈值在内的至少一种异常特征,且所述异常特征持续若干个所述探测周期(如3个)时,判断当前所述网口异常;
[0119] 当当前所述网口异常时,对所述网口进行包括重置、隔离、报警在内的操作,具体为:
[0120] 恢复动作一般是重置网口,这能够应对网卡硬件或者驱动持续在异常状态的场景,驱动和硬件的内部状态经过重置后可能有利于网口恢复收发功能。
[0121] 如果重置网口后仍旧异常,可以对该网口做隔离,避免影响网络节点的网络。隔离仅针对多网口网络绑定场景,在另一个网口正常的前提下,先临时从bonding移除异常网口,让bonding处于单网口的状态。如果bonding只剩余一个网口时,该网口发生异常后,只会尝试重置,不会再进行隔离。如果被移除网口后续恢复了,那么自动将被移除网口加回到bonding中。
[0122] 对于LACP模式,如果将网口从bonding中移除,交换机发现无法收到网口的心跳,会暂停对应的交换机端口,导致L2Ping无法继续检测该网口是否恢复健康。因此,限制在LACP模式下不允许隔离网口,而只是采用重置恢复或者报警方式。
[0123] 第二实施例
[0124] 如图8所示,本实施例提供了一种用于执行如第一实施例中的分布式系统的网络异常检测方法的分布式系统的网络异常检测系统,包括:
[0125] 集群配置信息获取模块1,用于启动L2Ping服务,向集群配置服务获取集群配置信息,其中,所述L2Ping服务为运行于集群中每个网络节点内部的用于探测所述网络节点上各个网口的健康状态的探测工具,所述集群配置服务为存储集群中所有所述网络节点的配置信息的服务;
[0126] MAC地址探测模块2,用于基于每个网络节点中的每个网口,为每个所述网口生成若干随机MAC地址,将所述随机MAC地址作为通过所述L2Ping服务生成的L2Ping探测包的头部MAC地址,每个所述网口采用包括不同所述头部MAC地址所述L2Ping探测包在当前所述网口与其他的所述网络节点之间进行若干次探测,在若干次探测结果中获取满足当前所述网口自己发自己收或自己发对方收的一组发送端MAC地址和接收端MAC地址,作为后续采用所述L2Ping服务进行探测的所述发送端MAC地址和所述接收端MAC地址;
[0127] 健康状态评估模块3,用于提供给每个所述网络节点中的每个所述网口,采用所述L2Ping服务定期向所有的其他所述网络节点发送所述L2Ping探测包,对所述网口的健康状态进行评估。
[0128] 一种计算机可读存储介质,计算机可读存储介质存储有计算机代码,当计算机代码被执行时,如上述方法被执行。本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁盘或光盘等。
[0129] 以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
[0130] 以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0131] 应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。