具体实施方式
图4所示为虚拟网络节点集群通过基于交换机switch的LACP进行负载均衡的示意图。在虚拟网络节点集群中,每个网络节点C1-C4都是一台物理服务器,网络节点通过交换机接入具有主IPSec网关和备IPSec网关的网络。在网络节点集群中,为了将流量均衡的分配到每个网络节点,选择基于交换机的LACP即链路聚合方式进行负载均衡。如图5中所示,通过LACP链路聚合,交换机可以将流量通过交换机和node上各自的LACP bond均衡地分配到node1和node2中,相比与三层的负载均衡,如等价路由(Equal-CostMultipathRouting,ECMP),该种链路层上的负载均衡在IP规划、交换机配置、主机节点配置上都更简单:对交换机,只需要将主机的接口加入一个trunk;而对主机,只需要将多个网卡做Linux bond。在链路聚合后,虚拟网络的网络节点集群对外体现为一个IP和MAC地址,可以通过添加主机很方便的进行横向扩展,提升网络节点集群的包转发能力。
而传统的可达性检测方案,如图2及图3中所示的主动和被动可达性检测方案,均需要节点有唯一的IP,是需要有状态的,而在基于交换机的LACP进行流量均衡的网络节点集群中的节点是无状态的,所有节点对外呈现唯一的IP和MAC地址,这样传统的可达性检测方案无法适用于LACP网络节点集群中与IPSec网关的可达性检测。
本申请为了解决以上问题,提出一种基于ARP的LACP网络节点集群与IPSec网关可达性的检测方案,在本方案中基于流表匹配的流量转发能力实时检测IPSec网关定期发送的免费ARP报文,在读取匹配流表中的字段值如idle_age字段就可以确定上次收到目标侦听报文的时间,完成单节点可达性检测,之后,再通过共享存储或ARP报文转发等方式进行网络节点集群内的状态同步,实现每个节点与IPSec网关的可达性检测。
以下对本申请中的检测方案进行说明:
参考图6,为本申请实施例提供的一种网络节点集群中网关可达性的检测方法的实现流程图,该网络节点集群中可以包含多个网络节点,每个网络节点均可以为一台物理服务器,网络节点集群中通过LACP实现链路聚合进行流量负载均衡。本实施例可以应用在网络节点集群中的某个网络节点上,以用于对网络节点集群中各网络节点对网关如IPSec网关可达性的检测,具体包含以下步骤:
步骤601:接收IPSec网关发送的ARP报文。
其中,所述ARP报文是指由IPSec网关定时发送的免费ARP报文,该ARP报文在经过网络节点集群的LACP负载均衡后被本实施例中的网络节点接收。
步骤602:基于所述ARP报文,获得网络节点对IPSec网关的定时任务查询流表即ARP检测流表中的目标字段值。
其中,IPSec网关发送的ARP报文中至少包含接收到该网关所连接的网络节点集群的VLAN信息、网络节点集群的MAC地址及IP地址,本实施例中在获得所述ARP报文之后,可以利用OpenVswitch将该网络节点的网桥上的APR检测流表与所述ARP报文进行流表匹配,从而匹配出流表中的多个目标字段值,如多个idle_age值,这些目标字段值能够表征网络节点集群中各节点到IPSec网关的可达性状态。
如图7中所示,在网络节点集群中,每个网络节点上均创建有网桥结构,br-gw及br-bond网桥为网络节点的网卡流量接入网桥,对应于每个网络节点的网卡会有一个Linuxveth pair绑定为一个Linux bond,网络节点集群交换机上的配置对应为trunk。其中,br-gw网桥上会生成APR检测流表,本实施例中,在接收到IPSec网关发送的ARP报文的网络节点上,将APR检测流表与IPSec网关发送的ARP报文进行匹配,可以得到表征节点到IPSec网关可达性状态的字段值。
其中,交换机上的配置如下:
步骤603:基于所述目标字段值,确定当前的网络节点对IPSec网关的可达性。
在一种实现方式中,目标字段值如idle_age值可以表示网络节点集群中节点上次收到IPSec网关的侦听报文的时间值,本实施例中,在获得目标字段值之后,判断这些目标字段值中是否存在一个值小于预设的超时阈值,如果这些目标字段值中有一个值是小于超时阈值的,那么则判定该网络节点收到了ARP报文并确定该网络节点对IPSec网关的可达性状态为可达,否则,如果目标字段值中所有的值均不小于超时阈值,那么确定该网络节点对IPSec网关的可达性状态为不可达。
步骤604:将所述目标字段值写入所述网络节点集群的共享内存中,以使得所述网络节点集群中的其他节点基于所述共享内存中的目标字段值判定对IPSec网关的可达性状态。
其中,在网络节点集群中,其他节点通过读取共享内存中的目标字段值,判断这些目标字段值中是否存在一个值小于预设的超时阈值,如果这些目标字段值中有一个值是小于超时阈值的,那么判定该节点收到了ARP报文并确定该节点对IPSec网关的可达性状态为可达,否则,如果目标字段值中所有的值均不小于超时阈值,那么确定该节点对IPSec网关的可达性状态为不可达。
在本实施例中实现其他节点对IPSec网关的可达性状态同步时,接收到IPSec网关发送的ARP报文的网络节点复用网络节点集群中已经建立好的管理网络,用读写共享内存的方式实现其他节点对IPSec网关可达性状态的同步,例如:接收到IPSec网关发送的ARP报文的网络节点在通过判断目标字段值完成其对IPSec网关可达性状态的检测判定之后,将表征其他节点对IPSec网关可达性状态的目标字段值写入共享内存的数据库中,其他节点读取这些目标字段值完成对IPSec网关可达性状态的同步,而其他节点通过判断目标字段值实现其对IPSec网关可达性状态的检测判定的技术方案可以与接收到IPSec网关的ARP报文的网络节点基于目标字段值进行网关可达性检测的技术方案相同,如判断目标字段值中是否存在至少一个值小于超时阈值,只要有一个值小于超时阈值,那么确定其他节点对IPSec网关的可达性状态为可达,否则,为不可达。
以上状态同步方案中不需要在网络节点网络中配置新的物理网络,不会为无状态的节点引入状态,执行起来简单可靠。
以下结合图7中节点网桥结构,对以上网络节点集群中节点对IPSec网关可达性检测的实现方案进行举例说明:
如图8中所示,网络节点集群中包含C1-C4四个节点,主IPSec网关定时免费发送ARP报文,在ARP报文通过交换机后经过LACP负载均衡被节点C1收到,C1在接收到ARP报文后,基于OpenVswitch,将Br-gw网桥上的ARP检测流表对ARP报文进行流表匹配,得到流表中的各个idle_age字段,其中,Br-gw网桥上的ARP检测流表内容如下所示:
cookie=0x0,duration=22.656s,table=0,n_packets=5,n_bytes=350,idle_age=1,priority=101,arp,dl_vlan=3503,dl_src=f0:2f:a7:7e:3d:15,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=169.254.195.1,arp_tpa=169.254.195.1,arp_op=2actions=drop。
而节点C1所接收到的ARP报文中包含VLAN、IP和MAC地址等信息,如下(即IPSec网关对象状态模型):
id varchar(36) //IPSec网关对象ID
mac_address varchar(48) //IPSec网关对象MAC地址
ip_address varchar(32) //IPSec网关对象IP地址
相应的,节点C1用Br-gw网桥上的ARP检测流表中arp_spa,arp_tpa,dl_vlan,dl_src匹配其受到的ARP报文,得到idle_age字段,并将这些字段写入共享内存后,其他节点可以通过读取共享内存中的idle_age字段,如下:
其中,这里的共享内存可以为Infinispan网格数据库实现。
之后,每个节点通过对idle_age字段的值大小进行判断当前节点是否对主IPSec网关可达,例如,以下代码为刷新逻辑及判断逻辑的执行代码:
Set idle_age_x=idle_age//刷新当前网络节点维护的idle_age
for idle_age in idle_age_list://只要有一个网络节点的idle_age小于超时阈值就可判定为可达
if idle_age<timeout:
return True
return False
最后,网络节点集群中的节点发现主IPSec网关不可达时,更换备IPSec网关进行流量传输。
也就是说,网络节点集群内部通过infinispan网格数据库进行状态同步,节点C1在检测ARP报文后将保证可达性状态的目标字段值写入共享内存,该目标字段值被集群内的其他节点C2、C3及C4同步,实现集群内节点对IPSec网关的可达性状态同步。
在另一种实现方式中,本实施例中也可以通过以下步骤605来实现所述网络节点集群中其他节点对IPSec网关可达性的检测,如图9中所示,在步骤601之后,所述方法还可以包括:
步骤605:将所述ARP报文通过预设的网络平面广播给所述网络节点集群中的其他节点,以使得所述网络节点集群中的其他节点基于接收到的ARP报文判定对IPSec网关的可达性。
其中,网络节点集群中的其他节点还可能会接收到IPSec网关直接发送来的ARP报文。因此,网络节点集群中的其他节点在接收到集群中广播来的ARP报文之后,基于广播来的ARP报文及节点接收到的IPSec网关发送的免费ARP报文,获得节点中网桥上与IPSec网关相关的定时任务查询流表即ARP检测流表中的目标字段值,这里的目标字段值是包含IPSec网关发送的免费ARP报文中匹配来的字段值,也包含广播来的ARP报文中匹配来的字段值,最后通过判断这些目标字段值中是否存在一个值小于预设的超时阈值,如果这些目标字段值中有一个值是小于超时阈值的,那么则判定该节点收到了ARP报文并确定该节点对IPSec网关的可达性状态为可达,否则,如果目标字段值中所有的值均不小于超时阈值,那么确定该节点对IPSec网关的可达性状态为不可达。
在本实施例中实现对IPSec网关可达性状态同步时,通过在网络节点集群中心配置一个隔离的状态同步网络,ARP报文在该网络平面上以有状态的方式进行换发,实现对IPSec网关可达性状态的同步。例如,在网络节点集群中,其中一个网络节点在接收到IPSec网关发送的ARP报文之后,网络节点自身可以基于该ARP报文实现自己对IPSec网关的可达性状态检测,并且,该网络节点在收到ARP报文之后,通过预先建立的网络平面即状态同步网络去转发该ARP报文,使得ARP报文能够通过该网络达到集群中的其他所有节点,每个其他节点以是否收到该报文的方式判定是否可达,如通过流表匹配得出报文中的目标字段值,再判断目标字段值中是否有一个值小于超时阈值,从而在目标字段值中有一个值小于超时阈值时,确定该节点收到了ARP报文并确定该节点对IPSec网关的可达性状态为可达。
在以上实现方案中,在无节点状态的网络节点集群中引入一个有状态网络去进行报文的转发,从而实现各节点对IPSec网关的可达性检测。
以下结合图7中节点的网桥结构,对以上网络节点集群中节点对IPSec网关可达性检测的实现方案进行举例说明:
如图10中所示,在网络节点集群中新增一个网络平面,即状态同步网络平面,该网络平面用于集群状态同步,不加入LACP集群,相应,如图11中所示,为新增网络平面后的节点网桥结构,网络节点集群中,每个网络节点的br-status网桥通过状态同步网络平面互联,转发该节点收到的ARP报文,而IPSec网关发出的ARP报文通过LACP聚合接口进入网络节点。
为了实现状态同步网络平面与IPSec业务平面的隔离,可以为状态同步网络平面配置不同的VLAN,而为了实现不同节点对IPSec网关检测报文在状态同步网络平面转发,可以将ARP报文的VLAN转为该平面的VLAN,由于根据ARP波阿文的目的地址可以识别不同的IPSec网关,因而ARP报文的源MAC可以用来存放ARP报文转换前的VLAN。其中,具体实现方案如下:
主IPSec网关定时免费发送ARP报文,在ARP报文通过交换机后经过LACP负载均衡被节点C1收到,C1在接收到ARP报文后,基于OpenVswitch,将Br-gw网桥上的ARP检测流表对ARP报文进行流表匹配,得到流表中的各个idle_age字段,并将ARP报文通过网络平面转发给网络节点集群中的其他节点,如C2、C3、C4,由此,这些节点基于转发来的ARP报文及从IPSec网关发送来的ARP报文与网桥上的检测流表进行匹配,得到各个idle_age字段。其中,br-gw网桥上的ARP检测流表如下:
⑴cookie=0x0,duration=22.656s,table=0,n_packets=5,n_bytes=350,idle_age=1,priority=101,in_port=br-bond,arp,dl_vlan=3503,dl_src=f0:2f:a7:7e:3d:15,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=169.254.195.1,arp_tpa=169.254.195.1,arp_op=2actions=resubmit(,br-status)#从br-bond口收到的报文未IPSec网关发送的ARP报文,匹配后转至br-status网桥
(2)cookie=0x0,duration=22.656s,table=0,n_packets=5,n_bytes=350,idle_age=1,priority=101,in_port=br-status,arp,dl_vlan=3503,dl_src=f0:2f:a7:7e:3d:15,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=169.254.195.1,arp_tpa=169.254.195.1,arp_op=2actions=drop#br-status收入的报文为其他网络节点转发的报文,匹配后drop掉,不再转发
而br-status网桥上的转换流表如下:
⑴cookie=0x0,duration=22.656s,table=0,n_packets=5,n_bytes=350,idle_age=1,priority=101,arp,dl_vlan=3503,in_port=br-gw,dl_src=f0:2f:a7:7e:3d:15,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=169.254.195.1,arp_tpa=169.254.195.1,arp_op=2actions=mod_dl_vlan:500,mod_dl_src:da:ff:a7:7e:3d:15,output:eth6#从br-gw收入的报文进行VLAN转换,转为状态同步平面的VLAN,同时将原VLAN存入源MAC地址的高12位,从状态同步网络平面转发
(2)cookie=0x0,duration=22.656s,table=0,n_packets=5,n_bytes=350,idle_age=1,priority=101,arp,dl_vlan=500,in_port=eth6,dl_src=da:ff:a7:7e:3d:15,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=169.254.195.1,arp_tpa=169.254.195.1,arp_op=2actions=mod_dl_vlan:3503,mod_dl_src:f0:2f:a7:7e:3d:15,output:br-gw#从状态同步平面收到的报文进行VLAN转换,感觉源MAC,将VLAN还原为原业务VLAN,转发到br-gw进行状态检测匹配
之后,每个节点通过对idle_age字段的值大小进行判断当前节点是否对主IPSec网关可达,例如,以下代码为判断逻辑的执行代码:
Sudo ovs-ofctl dump-flows br-gw table=0,
dl_src=f0:2f:a7:7e:3d:15,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=169.254.195.1,arp_tpa=169.254.195.1,arp_op=2,vlan=3503//查看匹配免费ARP报文的流表,获取idle_age
For flow in flow_list://只要有一个网络节点的idle_age小于超时阈值就可判定为可达
If flow.idle_age<timeout:
Return True
Return False
最后,网络节点集群中的节点发现主IPSec网关不可达时,更换备IPSec网关进行流量传输。
也就是说,网络节点集群中的节点通过新增一个网络平面,进行集群状态同步。
图12所示为网络节点集群中网络节点上所设置的装置的结构示意图,该装置为网络节点集群中网关可达性的检测装置,主要用于实现图6中所示的技术方案,以实现对网络节点集群中各网络节点对网关可达性状态的检测。其中,以上检测装置可以包括以下结构:
报文接收单元1201,用于接收网关发送的ARP报文。
字段获得单元1202,用于基于所述ARP报文,获得所述网络节点的ARP检测流表中的目标字段值。
其中,所述字段获得单元1202可以通过以下方式实现:
将所述网络节点的ARP检测流表与所述ARP报文进行流表匹配,得到所述ARP检测流表中的目标字段值。
单点检测单元1203,用于基于所述目标字段值,确定所述网络节点对所述网关的可达性状态。
其中,所述单点检测单元1203可以通过以下方式实现:
判断所述目标字段值中是否存在一个值小于预设的超时阈值,如果是,确定所述网络节点对所述网关的可达性状态为可达,否则,确定所述网络节点对所述网关的可达性状态为不可达。
状态同步单元1204,用于将所述ARP报文或者所述目标字段值传输给所述网络节点集群中的其他节点,以使得所述其他节点基于所述ARP报文或者所述目标字段值确定其对所述网关的可达性状态。
其中,所述状态同步单元1204可以通过以下方式实现:
将所述目标字段值写入所述网络节点集群中的共享内存,以使得所述其他节点读取所述共享内存中的目标字段值,并基于所述目标字段值确定所述其他节点对所述网关的可达性状态。
或者,所述状态同步单元1204也可以通过以下方式实现:
将所述ARP报文通过预设的网络平面广播给所述网络节点集群中的其他节点,以使得所述网络节点集群中的其他节点基于所述ARP报文确定所述其他节点对所述网关的可达性状态。
以上检测装置中的各个结构单元的具体实现方式可以参考前文中相应技术实现,此处不再详述。
可见,本实施例中通过对网络节点的ARP检测流表与网关发送的ARP报文进行匹配,得到表征网络节点对网关的可达性状态的目标字段值之后,可以在确定网络节点对网关的可达性状态的同时,将ARP报文或目标字段值传输给网络节点集群中的其他节点,使得其他节点也能够根据ARP报文或目标字段值来进行可达性状态的检测,这一过程中,无需网络节点集群中的节点各自有唯一的IP,也不需要有状态,从而在基于LACP负载均衡的网络节点集群中也能够实现租户粒度上的可达性状态检测。
图13所示为图1中网络节点的结构示意图,网络节点由终端实现,如各种物理服务器等,该终端在具体实现中可以包含以下结构:
存储器1301,用于存储应用程序及应用程序运行所产生的数据。
其中,存储器1301可以包括存储程序区和存储数据区,其中,存储程序区可以存储操作系统、应用程序等,存储数据区可以存储操作系统及应用程序运行所产生的数据。
处理器1302,用于接收所述网络节点集群的网关发送的ARP报文,基于所述ARP报文,获得所述网络节点的ARP检测流表中的目标字段值,再基于所述目标字段值,确定所述网络节点的可达性状态,将所述ARP报文或者所述目标字段值传输给所述网络节点集群中的其他节点,以使得所述其他节点基于所述ARP报文或者所述目标字段值确定其对所述网关的可达性状态。
本实施例中处理器1302的具体实现方式可以参考前文中相应内容,此处不再详述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。