本发明涉及负载均衡技术领域,尤其是涉及一种实现负载均衡的方法和装置。
背景技术:
随着网络规模不断扩大,用户对骨干链路的带宽和可靠性提出越来越高的要求。在传统技术中,常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽,但这种方案需要付出高额的费用,而且不够灵活。采用链路聚合技术可以在不进行硬件升级的条件下,通过将多个物理接口捆绑为一个逻辑接口,达到增加链路带宽的目的。在实现增大带宽目的同时,链路聚合采用备份链路的机制,可以有效的提高设备之间链路的可靠性。
但是现有技术是通过检测链路的状态,当一个链路聚合组的某一成员链路突然发生故障时,直接把这个成员从这个成员组内去掉,这样的话故障链路上的数据流量就会从其他几个正常工作的成员链路上出去。但是,把成员从聚合组中去掉不是瞬间完成的,需要更新链路聚合组(laggroup)表和链路聚合组成员(laggroupmember)表,然而在这段时间内可能就有报文从故障链路流出导致被丢掉。并且由于成员数的减少,单一的故障链路会影响到整个组的流量都要重新取出口,到最后,该成员从组表中去掉之后无法再自动添加进来,导致故障修复后,整个链路的带宽变小。
因此,需在此基础上提供一种实现负载均衡的方法,使得报文不会从故障链路中流出,并且不减少故障链路中的带宽。
技术实现要素:
本发明的目的在于克服现有技术的缺陷,提供一种实现负载均衡的方法和装置,保障报文不丢包,维持总带宽不变。
为实现上述目的,本发明提出如下技术方案:一种实现负载均衡的方法,所述方法包括:
s1,将报文进行第一次哈希选路,获得第一成员出口,若所述第一成员出口的链路是故障的,则进入步骤s2;
s2,将报文通过备份组表进行第二次哈希选路,选取出除所述第一成员出口外的其他备份的第二成员出口,报文从所述第二成员出口出去。
优选地,s1中,所述将报文进行第一次哈希选路,获得第一成员出口的过程包括:
s11,根据报文的字段进行哈希运算,计算出一第一哈希值;
s12,从链路聚合组表获取成员个数;
s13,将所述第一哈希值和成员个数进行运算,得到一用于索引所述链路聚合组表的成员表项的成员索引值;
s14,使用所述成员索引值从所述链路聚合组表中索引出所述第一成员出口。
优选地,s11中,所述报文的字段为源ip地址。
优选地,s13中,将所述第一哈希值和成员个数进行取余运算。
优选地,s2中,所述将报文通过备份组表进行第二次哈希选路,选取出除所述第一成员出口外的其他备份的第二成员出口的过程包括:
s21,将报文进行第二次哈希运算,得到一用于索引所述备份组表的成员索引值;
s22,利用所述备份组表的成员索引值从所述备份组表中索引出所述第二成员出口。
优选地,所述备份组表的成员索引值通过将所述第一哈希值与备份组表的成员个数进行运算得到。
优选地,所述s21包括:
s211,根据报文的其他字段进行哈希运算,计算出一第二哈希值;
s212,将所述第二哈希值与备份组表的成员个数进行运算,得到所述备份组表的成员索引值。
优选地,所述s212中,所述第二哈希值与备份组表的成员个数进行取余运算。
优选地,所述s2中,所述备份组表是由第一成员出口索引得到的。
优选地,所述方法还包括:所述第一成员出口的链路故障恢复后,报文重新从所述第一成员出口发送出去。
本发明还公开一种实现负载均衡的装置,所述装置包括:
第一选路模块,用于将报文进行第一次哈希选路,获得第一成员出口;
第二选路模块,用于在检测出所述第一成员出口的链路是故障的后,将报文通过备份组表进行第二次哈希选路,选取出除所述第一成员出口外的其他备份的第二成员出口。
本发明的有益效果是:
1、实现负载均衡,不会产生报文的流失和丢包现象。
2、故障恢复后,总的带宽维持不变。
3、故障链路不会影响其他正常工作链路上已有流量的选路。
附图说明
图1是本发明一种实现负载均衡的装置的示意图;
图2是本发明一种实现负载均衡方法的流程示意图;
图3是本发明实施例链路聚合组成员发生故障的示意图。
具体实施方式
下面将结合本发明的附图,对本发明实施例的技术方案进行清楚、完整的描述。
本发明所揭示的一种实现负载均衡的方法,结合图1及图2所示,所述方法包括:s1,将报文进行第一次哈希选路,获得第一成员出口,若所述第一成员出口的链路是故障的,则进入步骤s2;
具体地过程包括:s11,根据报文的字段进行哈希运算,计算出一第一哈希值;s12,从链路聚合组表获取成员个数;s13,将所述第一哈希值和成员个数进行运算,得到一用于索引所述链路聚合组表的成员表项的成员索引值;s14,使用所述成员索引值从所述链路聚合组表中索引出所述第一成员出口。此时第一成员出口的链路为故障时,则报文不会从此成员出口出去,则进入步骤s2。
进一步地,在s11中,所述报文的字段为源ip地址,也可以定义选取其他字段,所述源ip地址的报文或其他字段进行哈希运算得出第一哈希值。在s13中,将所述第一哈希值和成员个数进行取余运算得到所述成员索引值。
s2,将报文通过备份组表进行第二次哈希选路,选取出除所述第一成员出口外的其他备份的第二成员出口,报文从所述第二成员出口出去。
具体过程包括:s21,将报文进行第二次哈希运算,得到一用于索引所述备份组表的成员索引值;s22,利用所述备份组表的成员索引值从所述备份组表中索引出所述第二成员出口。在s21中,所述备份组表的成员索引值可以通过第一哈希值与备份组表的成员个数进行运算得到,也可以通过s211,根据报文的其他字段进行哈希运算,计算出一第二哈希值;s212,将所述第二哈希值与备份组表的成员个数进行运算,得到所述备份组表的成员索引值。不同的得到所述成员索引值的方法,可以得到相同或不同的成员索引值,相同或不同的成员索引值会索引出相同或不同的第二成员出口,在索引不同的成员出口时,报文会均匀的分散在各个备份组成员上。报文从第二成员出口出去时,不会产生丢包现象。所述备份组成员用于在链路聚合组出现故障时,在其中选出一个新的成员出口,此时成员出口之间不会产生相互影响,并且会均匀的分担故障出口上的流量。
所述s212中,所述第二哈希值与备份组表的成员个数进行取余运算,进一步地,所述实现负载均衡的方法还包括:所述第一成员出口的链路故障恢复后,报文重新从所述第一成员出口发送出去,那么就没有在备份组成员中来进行第二次哈希选路的这一过程,所有成员出口均正常,因此使得原静态链路聚合的总带宽不变。
本发明所揭示一种实现负载均衡的装置,包括第一选路模块和第二选路模块,所述第一选路模块用于将报文进行第一次哈希选路,获得第一成员出口;所述第二选路模块用于将报文通过备份组表进行第二次哈希选路,选取出除所述第一成员出口外的其他备份的成员出口,此出口为第二成员出口。
下面以一个具体的实施例来描述上述在静态链路聚合组成员故障后实现负载均衡的方法:
如图3所示,在静态链路中包含交换机a和交换机b,且交换机a和交换机b之间设有链路聚合组,所述链路聚合组上有4条成员出口link1、link2、link3及link4,当link4出现故障时,先通过第一次哈希选路,此时选的成员出口为故障的成员出口link4,由于是故障的成员出口,因此报文不会从此成员出口出去,因而需启动第二次哈希选路,第二次哈希选路从备份组成员的link1、link2及link3中选出一个新的成员出口link1,此时报文就会从成员出口link1出去,在整个过程中,报文不会发生丢包的现象,故障的成员出口link4也不会影响备份组成员的流量传输。在后续过程中,若故障的成员出口link4修复后,总带宽不会发生变化,并且故障链路不会影响其他工作链路上已有流量的传输,不用进行整个链路聚合组的重新选路。
本发明在静态负载分担模式下的聚合链路组成员的链路故障时,采用第二次哈希选路,从备份组成员中选出新的成员出口,解决了发生故障时不产生丢包的状况,又使得故障恢复后原聚合链路组的总带宽不变,且故障不会影响到其他正常工作链路上已有流量的链路。
本发明的技术内容及技术特征已揭示如上,然而熟悉本领域的技术人员仍可能基于本发明的教示及揭示而作种种不背离本发明精神的替换及修饰,因此,本发明保护范围应不限于实施例所揭示的内容,而应包括各种不背离本发明的替换及修饰,并为本专利申请权利要求所涵盖。