一种链路负载均衡应用中进行会话保持的方法及装置与流程

文档序号:16886570发布日期:2019-02-15 22:41阅读:202来源:国知局
本发明涉及一种负载均衡技术,尤其是涉及一种在链路负载均衡应用中进行会话保持的方法及装置。
背景技术
::在现在的网络环境中,为了增加网络带宽和负载分担,往往把几个端口绑成一个组作为一个端口使用,这种技术就是链路聚合(linkaggregation)技术。通常通过静态哈希(hash)算法在逻辑链路中的物理堆叠链路间实现负载均衡,其原理为:基于报文字段,比如最常用的五元组(源ip地址,目的ip地址,四层协议类型,四层源端口,四层目的端口),通过hash算法,算出一个hash值,然后用该hash值对成员数量取模,得到的值即为当前出口。但是静态哈希的算法由于采用hash值对成员数量取模,所以一旦成员数量发生变化,模值一定变化,所有正在转发的流都会受到影响,无法做到会话保持。另有,动态负载均衡(dynamicloadbalance,dlb)原理为:根据当前负载均衡成员表成员的负载状况来选择出口。针对每一个新流,都会选择当前最轻的负载作为出口,并且保持该流后续报文仍然用这个成员作为出口,不发生变化,可以做到会话保持。但是需要动态评估当前组成员的负载状况,代价比较大,实现复杂。并且,带宽是一个瞬时概念,而评估是基于一定的反馈机制,有滞后性,有时候不能及时反映出当前链路的负载状态。在现有负载均衡的应用场景中,主要有等价链路(equalcostmultipath,ecmp)和链路聚合(linkaggregationgroup,lag),ecmp是三层等价路由,lag是二层应用场景。在数据中心的应用中,需要通过负载均衡将流量引到不同的服务器进行处理。同时,需要根据当前服务器的负载情况,做灵活的增加、减少服务器的操作,对于负载均衡成员表来说,就是成员端口的增删。在这样的应用场景中,会话保持的需求就提出来了。如果不能做到会话保持,一旦发生成员数量的变化,就会影响现有流量所访问的服务器,势必导致客户体验变差。所以,会话保持在这样的场景中意义重大。因此,有必要提出一种能够在链路负载均衡应用中能够满足会话保持要求的技术方案。技术实现要素:本发明的目的在于克服现有技术的缺陷,提供一种在链路负载均衡应用中进行会话保持的方法及装置。为实现上述目的,本发明提出如下技术方案:一种在链路负载均衡应用中进行会话保持的方法,包括:s1,基于报文内容产生第一哈希值和第二哈希值;s2,根据所述第一哈希值查找负载均衡成员表得到对应的一个第一成员出口,同时根据所述第二哈希值查找聚合流表得到对应的一条流表,所述流表中的字段包括第二成员出口、流表状态;s3,根据所述流表状态,选择所述第一成员出口或第二成员出口作为报文转发出口;或在选择的第二成员出口为down状态时,查找备份链路表,选取出一个与选择的第二成员出口相对应的备份成员出口,作为报文当前转发出口。优选地,所述流表状态包括第一状态和第二状态,所述流表状态为第一状态时,选择第二成员出口作为报文转发出口;所述流表状态为第二状态时,选择第一成员出口作为报文转发出口,且将所述第一成员出口写入所述流表中,同时更新所述流表状态。优选地,所述第一状态为active状态,第二状态为inactive状态。优选地,s3中,查找备份链路表的过程包括:以第二成员端口id从备份链路表中索引出其备份成员出口列表,并用第二哈希值从所述备份成员出口列表中选取出一个与选择的第二成员出口相对应的备份成员出口,作为报文当前转发出口,且将所述备份成员出口写入流表中。优选地,所述流表中的字段还包括老化状态,报文在聚合流表中查找到对应的流表后,都会更新流表中的所述老化状态。优选地,所述方法还包括:老化聚合流表中的流表,所述老化聚合流表中的流表的过程包括:按一定的老化周期扫过聚合流表中的每一条流表;每个报文查到对应的流表后,根据扫到的当前流表状态,或根据扫到的流表状态及老化状态,判断是否老化当前所述流表,同时更新老化状态。本发明还揭示了另外一种技术方案:一种在链路负载均衡应用中进行会话保持的装置,包括:哈希值产生模块,用于基于报文内容产生第一哈希值和第二哈希值;负载均衡成员表,用于根据所述第一哈希值查找得到对应的一个第一成员出口;聚合流表,用于根据所述第二哈希值查找得到一条流表,所述流表中字段包括第二成员出口、流表状态,根据所述流表状态,选择所述第一成员出口或第二成员出口作为报文转发出口,或在选择的第二成员出口为down状态时,查找备份链路表;备份链路表,用于在从聚合流表中选出的第二成员端口为down状态时,选取一个与选出的第二成员出口相对应的备份成员出口,作为报文当前转发出口。优选地,所述装置还包括用于老化聚合流表中的流表的老化模块,所述老化模块按一定的老化周期扫过聚合流表中的每一条流表,每个报文查到对应的流表后,根据扫到的当前流表状态,或根据扫到的流表状态及老化状态,判断是否老化当前所述流表,同时更新老化状态。本发明的有益效果是:1、本发明通过在静态哈希选路的机制基础上,新增聚合流表和备份链路表这两张表,满足在链路负载均衡应用中进行会话保持的要求。2、实现方法简单,方便硬件实现,且可以支持高性能交换机在在高转发性能下进行部署。3、可以实现以较小的memory数量实现较大的流表,控制粒度更细。附图说明图1是本发明装置的原理示意图;图2是本发明方法的流程示意图。具体实施方式下面将结合本发明的附图,对本发明实施例的技术方案进行清楚、完整的描述。本发明所揭示的一种在链路负载均衡应用中进行会话保持的方法及装置,通过在静态哈希选路的机制基础上,新增聚合流表和备份链路表这两张表,满足在链路负载均衡应用中进行会话保持的要求,可以支持高性能交换机在高转发性能下进行部署。如图1所示,本发明所揭示的一种在链路负载均衡应用中进行会话保持的装置,包括哈希值产生模块(flexhashmechanism)、负载均衡成员表(membertable)、聚合流表(flowtable)和备份链路表(backupmembertable),其中,哈希值产生模块,用于基于报文内容产生第一哈希值和第二哈希值。具体地,哈希值产生模块可以基于报文内容灵活产生所需要的hash值,这里会用到两个hash值,即第一哈希值和第二哈希值,分别定义为哈希a值和哈希b值。其中,哈希a值用于选取成员出口(member),哈希b值用于选取流表。哈希b值是一个流的特征值,是一组有相同b值的流的合集。为了实现简单,本发明并没有记录整个流的五元组(这样需要消耗的存储器(memory)会非常巨大,硬件基本无法实现)。所以本发明是通过一个hash值(即这里的哈希b值)来表征这个流。因此,完全可能有多个流的哈希b值一样,这时候这几个流在本发明中会当成一个流来进行处理。所以,哈希b值的取值范围越大,能够区分的流的粒度也就越大。负载均衡成员表是一个基于静态hash选择成员的模块,其中有多条条目(entry),每一条entry对应一个成员的转发出口。本实施例中,负载均衡成员表的索引值是由负载均衡组的基址(base)值、哈希b值(hashb)和成员数(membernumber)计算得到,具体为base+(hashb%membernumber),其中,每个负载均衡组(ecmpgroup)会有一个base,即这里的base由负载均衡组决定,根据这个基址,可以在ecmp成员列表中找到第一个成员对应的条目,membernumber是链路聚合(lag)的成员数量。根据该索引值查找负载均衡成员表得到对应的一个第一成员出口。流表,代表了一组在一定hash算法下具有相同hash值(即这里的hashb)的流的集合,流表的深度和选取使用的hashb值相对应。优选地,聚合流表中的每一条流表包括多个字段,本实施例中,包括第二成员出口(destport)、流表状态(a)和老化状态(s),其中,destport为当前这个流表对应的成员出口,a字段表示当前流表是否处于active状态,本实施例中,a=1时,表示当前流表处于active状态,此时聚合流表的第二成员出口会优于负载均衡成员表的第一成员出口选择;a=0时,表示当前流表处于inactive状态,即表示流表中没有记录成员出口,此时要选取负载均衡成员表中的第一成员出口,作为报文转发出口。s字段表示流表的老化状态,每个报文查到对应的流表后,sbit置1,老化计时器(agingtimer)扫到一条流表后sbit置0,如果扫到当前流sbit仍然是0,则由硬件删掉对应流表,触发老化(aging),即真正的老化。当一个流根据哈希b值从聚合流表中取到一条流表(entry)之后,如果流表中有一个状态为active的第二成员出口,则会使用流表中的该第二成员出口,而不是负载均衡成员表(membertable)中的第一成员出口;当一个流根据哈希b值从聚合流表中取到一条流表之后,如果流表状态为inactive状态,则会使用membertable中的第一成员出口,并且将该第一成员出口写入到流表中,这一过程称为学习;当一个流根据哈希b值从flowtable中取到一条entry之后,如果有active状态的第二成员出口,但是该端口状态是down的话,会从备份链路表中选取出一个与该第二成员出口相对应的备份成员出口,作为报文当前转发出口,并将该备份成员出口写入流表中。备份链路表,用于在上述聚合流表中选中的成员链路down了之后,选取出一条备份链路。具体地,以down掉的第二成员出口id为索引去索引备份链路表,得到当前第二成员出口的备份出口成员列表,并且用哈希b值从备份出口成员列表中选取一个备份成员出口,作为当前报文转发出口出口。优选地,上述备份链路表和聚合流表中,备份链路表不大,并且报文只读,由cpu写。聚合流表则跟需要支持的流表数量有关,并且对于每个报文都需要一读一写。考虑到流表中的上述三个字段种,字段destport和字段abit,这两个字段只有在成员端口发生变化需要更新流表的时候才需要写,频率很低;而sbit表示agingstatus,需要每包(per-packet)写。所以,在设计的时候可以考虑把流表进行分离,一部分包含字段destport和字段abit,另一部分和老化模块一样,只需要存放agingstatus对应的sbit。这样设计之后,流表只需要一读的能力就可以了,写只有aging和更新流表状态的时候会发生,属于低频事件。并且为了保证执行(performance),写事件可以丢,这样不会挡住正常转发的报文,导致丢包。基于该设计,分流后的流表中需要放字段destport,还需要放一个activebit,总共加起来是10个bit。以一块8k*320bit的memory可以提供256k的流表支持,因此仅需要4块这样的memory,就可以支持1m的流表数量。即可以实现以较小的memory数量可以实现较大的流表,控制粒度更细。本发明所揭示的一种在链路负载均衡应用中进行会话保持的装置,还包括一老化模块,本实施例中的老化模块采用通用的老化机制,用于老化在聚合流表中建立起来的流表。每一个流的报文在聚合流表中查找到对应的成员出口之后都会更新sbit(写1),而老化模块会在一定的老化(aging)周期内清除流表的sbit(写0)。并且,当老化模块扫到一条流表的sbit=0,那么老化发生,这条流表对应的abit写0。如图2所示,本发明所揭示的一种在链路负载均衡应用中进行会话保持的方法,包括:s1,基于报文内容产生第一哈希值和第二哈希值;s2,根据第一哈希值查找负载均衡成员表得到对应的一个第一成员出口,同时根据第二哈希值查找聚合流表得到对应的一条流表;s3,根据流表状态,选择第一成员出口或第二成员出口作为报文转发出口;或在选择的第二成员出口为down状态时,查找备份链路表,选取出一个与选择的第二成员出口相对应的备份成员出口,作为报文当前转发出口。下面以一具体实施例来描述上述在链路负载均衡应用中进行会话保持的方法及装置的工作原理。如图1所示,设一交换机(switch)中,有一个负载均衡组,包含四个成员端口,1/2/3/4,以此为例,来说明一下本发明工作原理。当四个成员端口都是up的时候,收到一个流f的报文,根据报文内容产生哈希a值和哈希b值。根据哈希a值,在负载均衡成员表中取到一个第一成员出口,假设是1口。根据哈希b值,在聚合流表中取到一条流表,此时流表为空,即abit=0。这时需要学习这条流,即将1口写入流表,并使用负载均衡成员表中的1口作为报文转发出口,同时将字段abit置1,字段sbit置1。流f的第二个报文收到,同样根据报文内容产生哈希a值和哈希b值。根据哈希a值在负载均衡成员表中取到出口1,根据哈希b值在聚合流表中也取到出口1,并且流表状态为active,则更新aging对应的字段sbit,将该报文从1口发出。若成员端口1口down掉后,再收到一个流f的报文。该报文根据哈希a值在负载均衡成员表中取到的出口为1,根据哈希b值在聚合流表中取到的出口也为1,但1口是down的。此时用1口的portid作为索引读取备份链路表,得到可能的备份成员出口列表,然后根据哈希b值从备份成员出口列表中选取一个备份成员出口作为当前需要发送出去的端口,假设是3口。则将3口写入流表中,并且更新aging对应的字段sbit,将报文从3口发出。需要说明的是,成员端口down掉后报文的操作与删除成员出口的操作是一样的。若流f又来了一个报文,根据哈希a值得到的出口是1口,根据哈希b值得到的出口是3口,并且流表状态为active,将报文从3口发出,并且更新aging状态。若此时1口up了,又收到流f的一个报文,根据哈希a值得到出口是1,根据哈希b值得到的出口是3,并且流表状态为active,则将报文从3口发出,并且更新aging状态。若此时新增加一个成员端口5,然后收到流f的一个报文。根据a值得到的出口是1,根据b值得到的出口是3,并且流表状态为active,则将报文从3口发出,并且更新aging状态。后台的aging机制和普通的aging一样,以一定的时间间隔扫过流表中的每一条entry。如果扫到的这条entry的abit=0,则表示流表无效,不需要aging。如果abit=1,则继续判断sbit的状态,如果sbit=1,则将sbit清零,继续扫下一跳;如果sbit=0,则aging当前的流表,将该流表内容写成全0。由上述工作原理可知,本发明满足了在链路负载均衡应用中的会话保持要求,即会做到以下几点:1)当前流所在成员组的成员数量发生变化时,当前流选中的成员不变;2)当前流选中的成员链路断开时,当前流能够均匀的分摊到其他正常工作的链路上;3)组成员数量增加(或者是之前断开的链路,现在又恢复工作)时,不影响现在已经转发的流的选路。且本发明还能够以比较简单的方法实现,方便硬件实现,可以支持高性能交换机在在高转发性能下进行部署。本发明的技术内容及技术特征已揭示如上,然而熟悉本领域的技术人员仍可能基于本发明的教示及揭示而作种种不背离本发明精神的替换及修饰,因此,本发明保护范围应不限于实施例所揭示的内容,而应包括各种不背离本发明的替换及修饰,并为本专利申请权利要求所涵盖。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1