发明内容
本发明提供了一种实现VRRP组管理的方法及装置,用以解决多个成员相同的VRRP组在状态切换、响应接口事件等VRRP组管理过程中消耗时间,浪费资源且不易于管理的问题。
为实现上述目的,本发明的主要目的在于提供一种实现VRRP组管理的方法,该方法的具体实现步骤为:
创建至少一个虚拟路由器冗余协议VRRP汇聚组;将系统中具有相同组成员的多个VRRP组加入到同一个VRRP汇聚组,并任命其中任意一个VRRP组为组长VRRP组;当判断同一VRRP汇聚组中各非组长VRRP组成员状态与组长VRRP组对应成员状态不一致时,初始化同一个VRRP汇聚组中每个非组长VRRP组的各成员与组长VRRP组的对应成员的状态一致。
进一步地,所述方法还包括:对同一个VRRP汇聚组,仅启动组长VRRP组中各成员的状态机维护。
进一步地,所述仅启动组长VRRP组中各成员的状态机维护,具体包括:组长VRRP组的组成员按照自定义的小于标准VRRP定义的通告周期时间,采用区别于标准VRRP通告报文的报文类型实现各成员的状态机维护。
进一步地,所述VRRP汇聚组由VRRP定义的全局变量来实现。
进一步地,所述VRRP汇聚组由VRRP定义的全局变量来实现,具体包括:所有VRRP汇聚组采用数组来组织,每个VRRP汇聚组下以链表形式保存其所包括的组长VRRP组和非组长VRRP组,链表中还保存有用于表示VRRP组是组长还是非组长的标识信息。
进一步地,初始化同一个VRRP汇聚组中每个非组长VRRP组的各成员与组长VRRP组的对应成员的状态一致,包括:先将每个非组长VRRP组各成员的状态转换为initialize初始状态,再将其状态转换为和组长VRRP组中对应成员的状态一致。
本发明的又一目的还在于,提供一种实现VRRP组管理的装置,所述装置包括:
配置模块,用于创建虚拟路由器冗余协议VRRP汇聚组,并将本装置上各VRRP成员接口所属的具有相同组成员的多个VRRP组加入到同一个VRRP汇聚组,并配置其中任意一个VRRP组为组长VRRP组;
同步模块,用于对本装置上属于同一VRRP汇聚组的VRRP组依次进行遍历,将每个非组长VRRP组的各成员与组长VRRP组的对应成员的状态同步为一致。
进一步地,所述装置还包括交互模块,
所述交互模块,用于启动本装置上VRRP汇聚组中属于组长VRRP组成员的状态机维护。
进一步地,所述交互模块具体用于,隶属于组长VRRP组的成员接口按照自定义的小于标准VRRP定义的通告周期时间,采用区别于标准VRRP通告报文的报文类型实现本VRRP组各成员的状态机维护。
进一步地,所述VRRP汇聚组由VRRP定义的全局变量来实现,具体包括:所有VRRP汇聚组采用数组来组织,每个VRRP汇聚组下以链表形式保存其所包括的组长VRRP组和非组长VRRP组,链表中还保存有用于表示VRRP组是组长还是非组长的标识信息。
本发明提供的一种实现VRRP组管理的方法及装置使所有同属一个VRRP汇聚组的VRRP成员状态切换一致,减小每个VRRP组处理状态机时所带来的资源占用;通过处理少量VRRP汇聚组报文,减小网络和设备的报文处理压力,通过VRRP汇聚组报文毫秒级周期,降低了切换所带来的时延。
具体实施方式
为使本发明的技术方案更加清楚明白,现结合附图对本发明做进一步详细说明:
如图2所示,为本发明实施例提供的一种实现VRRP组管理的方法,该方法的具体实现步骤为:
S101、创建至少一个虚拟路由器冗余协议VRRP汇聚组。本发明实施例中的VRRP汇聚组在全局模式下配置,不属于接口下的配置。VRRP汇聚组创建之初为空,需要添加VRRP组才能工作。
S102、将系统中具有相同成员的多个VRRP组加入到该VRRP汇聚组。
S103、任命其中任意一个VRRP组为组长VRRP组。每个VRRP汇聚组有且仅有一个组长VRRP组,组长VRRP组负责整个VRRP汇聚组的状态、报文处理等,即VRRP汇聚组的状态机由组长VRRP组来决定。组长VRRP组的状态转移在加入VRRP汇聚组前后没有变化,只是提高了组长VRRP组通告报文的发送频率,即减小了VRRP汇聚组通告的周期时间。
图3为本发明实施例采用的VRRP汇聚组的数据结构,VRRP汇聚组由VRRP的全局结构来控制,采用数组的形式来决定最大可配置汇聚组的范围。VRRP汇聚组结构vrrp_agg下挂VRRP组vrrp_router,vrrp_router中的vc_flags标识其为组长VRRP组或非组长VRRP组的身份,组长VRRP组或非组长VRRP组在VRRP汇聚组内以链表的形式呈现。
vrrp_info:VRRP全局数据结构,包括VRRP全局定时和VRRPARP链表。
vrrp_intf:VRRP接口数据结构,每个配置VRRP组的接口都对应一个该结构。
vrrp_router:VRRP组数据结构,每个VRRP组对应一个该结构,记录VRRP组配置信息等。其中,vc_grid记录其所加入VRRP汇聚组ID,vc_flags中记录了VRRP组是否以组长身份加入VRRP汇聚组。
vg_agg:VRRP汇聚组数据结构,每个VRRP汇聚组对应一个该结构。VRRP汇聚组中所有成员VRRP组以双向链表方式组织。
vg_timer:VRRP全局定时器,VRRP任务通过select被定时唤醒。
vg_arp:VRRP全局ARP链表,当VRRP组处于master状态时,需要响应对虚拟IP的ARP请求,该链表保存了虚拟IP对应ARP信息。
S104、当判断同一VRRP汇聚组中各非组长VRRP组成员状态与组长VRRP组对应成员状态不一致时,初始化同一个VRRP汇聚组中每个非组长VRRP组的各成员与组长VRRP组的对应成员的状态一致。VRRP组以非组长身份加入到VRRP汇聚组后,非组长VRRP组先将自身状态转换为initialize初始状态,再将状态转换为和组长VRRP组的状态一致。加入到VRRP汇聚组后的非组长VRRP组不再发送通告报文,不再设定通告定时器或超时定时器,其自身的状态变化完全依赖于组长VRRP组成员的状态。
VRRP汇聚组组建完成后,由组长VRRP组负责发送和接收VRRP协议通告报文,组长VRRP组发送的通告报文与标准VRRP通告报文的主要区别是报文类型的定义,本发明实施通告报文的格式见下表。
表1
本实施例中的通告报文格式没有对标准VRRP标准通告报文格式进行调整,主要修改了Type字段的定义,并增加了一个VRRP汇聚组通告周期时间。上述报文格式中,各字段的定义如下:
Version:VRRP协议版本号。
Type:VRRP报文类型,报文类型等于1,表示发送的标准VRRP协议通告报文;报文类型等于2,表示本发明实施例属于VRRP汇聚组的组长VRRP组成员发送的非标准VRRP协议通告报文。
VRID:VirtualRouterIdentifier,接口配置的VRID。
Priority:优先级,接口上配置的priority。拥有虚拟IP地址的路由器的priority等于255,其余路由器只能为1~254,缺省是100。
CountIPAddr:虚拟IP地址的个数,一般等于1。
AuthType:认证类型,0-无认证,AuthData字段全为0;1-简单文本认证;2-MD5认证。
AdverInterval:VRRP通告报文发送周期时间,单位为s。当type字段为1时,该字段有效。
Aggadv_interval:VRRP汇聚组通告周期时间,单位为ms。当type字段为2时,该字段有效。该字段为本发明实施例新定义的字段。建议配置区间为10~30000ms,例如本发明默认定义为20ms。本发明实施例中的该字段的位置仅仅是用于举例,具体实现时不限于表1所示的定义方式。
IPAddress:虚拟IP地址。
Checksum:整个VRRP报文的校验和。
AuthData:最多8个字符,不足8个补0。
本发明实施例由于只有组长VRRP组负责报文的处理,所以对于报文的发送和接收还是沿用原有的机制,这样有助于提高代码的复用率。加入到VRRP汇聚组后,组长VRRP组进行一些影响行为的配置,如优先级的改变、通告报文时间设定、track功能、抢占功能等,非组长VRRP组不再生效这些配置。
为了进一步对本发明的理解,下面进一步阐述VRRP组加入到VRRP汇聚组后,组长VRRP组成员及非组长VRRP组成员的状态转换分别为:
1、组长VRRP组成员的状态转换为:
initialize初始状态:当收到一个开始事件,且配置的真实IP与虚拟IP相等,则从initialize初始状态转换成master状态;当收到一个开始事件,且配置的真实IP与虚拟IP不相等,则从initialize初始状态转换成backup状态。
master状态:当收到一个关闭事件或者加入汇聚组,则从master状态转换成initialize初始状态;当收到一个优先级比自己高或优先级相同且首IP地址比本地IP地址大的通告报文,则master状态转换成backup状态。
backup状态:当收到一个关闭事件或加入汇聚组,则从backup状态转换成initialize初始状态;当收到master_down_timer超时定时器超时,则从backup状态转换成master状态。
2、非组长VRRP组成员的状态转换为:
initialize初始状态:当收到一个开始事件且汇聚组状态为master状态,则从initialize初始状态转换成master状态;当收到一个开始事件且汇聚组状态为backup状态,则从initialize初始状态转换成backup状态。
master状态:当收到一个关闭事件或者汇聚组状态转换为initialize初始状态,则从master状态转换成initialize初始状态;当汇聚组状态转换为backup状态,则从master状态转换成backup状态。
backup状态:当收到一个关闭事件或汇聚组状态转换为initialize初始状态,则从backup状态转换成initialize初始状态;当汇聚组状态转换为master状态,则从backup状态转换成master状态。
如图4所示,本发明实施例还提供了实现上述方法的实现VRRP组管理的装置,该装置提供配置VRRP组的成员接口,至少包含:
配置模块,创建虚拟路由器冗余协议VRRP汇聚组,并将本装置上各VRRP成员接口所属的具有相同组成员的多个VRRP组加入到同一个VRRP汇聚组,并配置其中任意一个VRRP组为组长VRRP组。
同步模块,用于对本装置上属于同一VRRP汇聚组的VRRP组依次进行遍历,将每个非组长VRRP组的各成员与组长VRRP组的对应成员的状态同步为一致。VRRP汇聚组组成员的状态具体转换流程同方法部分的相应内容,此处不再赘述。
交互模块,用于启动本装置上VRRP汇聚组中属于组长VRRP组成员的状态机维护。具体包含对隶属于组长VRRP组的成员接口按照自定义的小于标准VRRP定义的通告周期时间,采用区别于标准VRRP通告报文的报文类型实现本VRRP组各成员的状态机维护。
在本装置中,VRRP汇聚组由VRRP定义的全局变量来实现,具体包括:所有VRRP汇聚组采用数组来组织,每个VRRP汇聚组下以链表形式保存其所包括的组长VRRP组和非组长VRRP组,链表中还保存有用于表示VRRP组是组长还是非组长的标识信息。其中涉及的VRRP报文通告周期时间、报文类型及VRRP汇聚组的数据结构参见上述方法部分的相应内容,此处不再赘述。
以下结合图1,对本发明的技术方案以及技术效果进行详细说明。在设备上SW_1和SW_2依次配置group1-group5共5个VRRP汇聚组,因为group1、group3、group5均包括相同的成员SW_1和SW_2,且在每个VRRP组中,组成员的状态相同(SW_1为Master,SW_2为Backup),可以将它们放到VRRP汇聚组1中,并任命group1为组长,group3、group5的身份为非组长;同理,我们将group2、group4放到VRRP汇聚组2中,任命group2为组长,group4为非组长。两个VRRP汇聚组配置完成,由于VRRP汇聚组中只有组长VRRP组负责报文的处理,所以采用VRRP汇聚组后,报文的交互量从原来的5个减小到2个,当有更多的VRRP组加入到这两个VRRP汇聚组时,就会极大的减小报文量和减少报文处理的流程。且在切换时间上,假如设定发送VRRP汇聚组报文的最小周期为20毫秒,所以在本实施例中的理论上切换的超时时间在60毫秒左右,这和标准的最小3秒相比也是一次极大的提升。
本发明还有一种实现方式,同时将group1-group5放到同一个VRRP汇聚组,并任命group1为组长,其余VRRP组的身份为非组长VRRP组,由于两台设备在group2、group4中的状态与在组长上group1上的状态不一致,需要分别将SW_1在group2和group4中的Backup状态转换成SW_1在组长group1的Master状态一致,同理需要将SW_2在group2和group4中的Master状态转换成SW_2在组长group1的Backup状态一致。VRRP汇聚组配置完成,由于VRRP汇聚组中只有组长VRRP组负责报文的处理,所以采用VRRP汇聚组后,报文的交互量从原来的5个减小到1个,当有更多的VRRP组加入到这两个VRRP汇聚组时,就会极大的减小报文量和减少报文处理的流程。且在切换时间上,假如设定发送VRRP汇聚组报文的最小周期为10毫秒,所以在本实施例中理论上切换的超时时间在30毫秒左右。
在本发明中,使所有同属一个VRRP汇聚组的成员VRRP组状态切换一致,减小每个VRRP组处理状态机时所带来的资源占用;通过处理少量汇聚组报文,减小网络和设备的报文处理压力;通过VRRP汇聚组报文毫秒级周期,降低了切换所带来的时延。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请的保护范围,凡在本申请技术方案的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。因此本发明的保护范围应所述以权利要求的保护范围为准。