• 文章搜索:
  • 目录

        • 分享到...

        • 新浪微博
        • 腾讯微博
        • 推荐到豆瓣 豆瓣空间
        • 分享到搜狐微博 搜狐微博
        • 分享到QQ空间 QQ空间
        • 分享到腾讯朋友 腾讯朋友
        • 网易微博分享 网易微博
        • 添加到百度搜藏 百度搜藏
        • 转贴到开心网 开心网
        • 转发好友 告诉聊友
    • 推荐
    • 打印
    • 收藏

    链路聚合技术

    作者:  |  上传时间:2015-10-09  |  关键字:链路聚合技术

    /吴帅

    1      链路聚合概述

    链路聚合(Link Aggregation)由IEEE802.3ad定义,包括链路聚合目标及实现、聚合子层的功能及操作、链路聚合控制及LACP等。链路聚合将多条物理以太链路聚合形成为一个逻辑链路聚合组,这种聚合对于上层协议和应用是透明的,上层协议和应用将同一聚合组内的多条物理链路视为单一链路,无需改变即可在其上运行。

                                           图1 链路聚合示意图

    1.1         链路聚合的主要优点

    ²  增加带宽:聚合链路的带宽最大为聚合组中所有成员链路的带宽和,目前H3C的交换机产品支持最多64条物理链路聚合,极大的拓展了链路带宽;

    ²  增加可靠性:聚合组存在多条成员链路的情况下,单条成员链路故障不会引起聚合链路传输失败,故障链路承载的业务流量可自动切换到其他成员链路进行传输;

    ²  可负载分担:业务流量按照一定的规则被分配到多条成员链路进行传输,提高了链路使用率;

    ²  可动态配置:缺少人工配置的情况下,链路聚合组能够根据对端和本端的信息灵活调整聚合成员端口的选中/非选中状态。

    正是由于链路聚合所具有的链路冗余性和可分担性,使其在很多

    实际应用场景中,成为提供链路级HA的不二之选,与此同时,其所具有的可动态配置性也保证了不需人为干预便可达到预期的高可用性效果。

     

    1.2         链路聚合分类

    当前主流厂商的链路聚合实现方式不尽相同,H3C按照是否与对端交互LACP协议,链路聚合可分为静态聚合和动态聚合,静态聚合模式下的成员端口选中状态不受网络环境的影响,稳定性较高;动态聚合模式下的成员端口可根据对端相应成员端口的状态自动调整本端的选中状态,灵活性较高。在Cisco设备上支持LACPPAgPPort Aggregation ProtocolCisco私有协议)两种聚合模式,可配置端口为强制加入,或者主动发送协议报文(LACPPAgP)协商,或者被动处理协议报文,来与对端设备形成链路聚合。

    另外,当前主流设备厂商都支持按照聚合成员端口的类型不同,将链路聚合分为二层聚合和三层聚合,二层聚合(bridge-aggregation)的成员端口全部为二层以太网接口,三层聚合(route-aggregation)的成员端口全部为三层以太网接口。

    用户可根据不同的需求选择不同的聚合模式,H3C设备的链路聚合可与使用IEEE802.3ad标准LACP协议的友商设备完美互通。

    2      链路聚合工作机制

    链路聚合所提供的链路级HA与其工作机制息息相关,下面针对H3C实现对链路聚合工作机制进行简要介绍。

    2.1         操作Key

    操作Key是用来表示端口的聚合能力的一个数值,它是根据端口信息的组合自动计算而来,组合中任何一项的变化都会引起操作Key的重新计算,从而引起端口的选中状态发生改变,影响操作Key计算的端口信息包括:

    ²  聚合组ID

    ²  端口速率

    ²  端口双工模式

    ²  端口硬件限制值

    ²  端口聚合相关配置

    在同一聚合组中,所有的选中端口的操作Key一定相同;在同一设备上,不同聚合组的操作Key一定不同;操作Key只是本端端口属性,聚合链路两端成员端口的操作Key可能不同。

    2.2         聚合相关配置

    端口的聚合相关类配置会影响操作Key计算,只有与聚合口的聚合相关类配置相同的成员端口才有可能成为选中端口,聚合相关类配置包括:

    ²  端口类型配置(Access/Trunk/Hybrid

    ²  端口隔离配置

    ²  VLAN相关配置

    ²  QinQ /VLAN mapping

    在聚合口上进行的聚合相关类配置,会同步到所有成员端口,在成员端口上进行聚合相关类配置,只会影响该成员端口的操作Key计算,另外需要注意的是,只有二层聚合成员端口的Key值计算才关心聚合相关类配置。

    另外,有些端口配置不会影响操作Key计算,但这些配置只会在端口退出聚合组后生效,此类配置称为非聚合相关类配置,比如STPGVRPMAC地址学习等。

    2.3         静态聚合

    静态聚合组中的成员端口不会和对端交互LACP报文,所以系统不会自动根据对端信息调整本端成员端口的选中状态,系统将按照以下原则确定端口为选中还是非选中:

    首先选择参考端口,聚合组内所有up的成员端口按照端口的高端口优先级->全双工/高速率->全双工/低速率->半双工/高速率->半双工/低速率的优先次序,选择优先次序最高、且聚合相关类配置与对应聚合接口相同的端口作为参考端口;如果优先次序相同,则选择其中端口号最小的端口作为参考端口。

    选出参考端口后,系统将下面几种端口置为非选中状态:存在硬件限制的端口、down掉的端口、与参考端口Key值不同的端口以及按端口号排序超出选中端口数量上限的端口。除此之外的端口则置为选中状态,承担转发数据流量的任务。

    2.4         动态聚合

    动态聚合组内的成员端口通过收发LACP协议报文来将本端和对端的端口信息进行比较,以选择能够处于选中状态的成员端口,使双方可以对各自端口的选中/非选中状态达成一致。

    在动态聚合组中,参考端口的选择是设备通过交互信息,首先比较设备ID(系统优先级+系统MAC地址),先比较系统优先级,如果相同再比较系统MAC地址,设备ID小的一端为优。然后,对于设备ID为优的一端,比较聚合组内成员端口的端口ID(端口优先级+端口号),端口ID最小且聚合相关类配置与聚合口一致的端口做为参考端口。

    在动态聚合组中确定端口的选中/非选中状态时,除了和静态聚合相同的判断条件之外,还需要判断本端端口的对端端口的操作Key和聚合相关类配置是否与参考端口的对端端口相同,如果不同,是不能成为选中端口的。另外,设备上支持的选中端口数量有限,如果后加入的成员端口一旦比当前选中端口更优,则会立刻取代其选中端口的位置。

    3      链路聚合负载分担

    链路聚合的可负载分担特性是其能够提供链路级HA的关键所在,目前负载分担主要有两种方式:逐包和逐流负载分担。逐包负载分担虽然能够达到更加均匀的分担效果,但这种方式容易产生报文乱序,所以当前主流厂商所采用的负载分担方式都是逐流负载分担,使用Hash算法决定使用具体哪条聚合成员链路转发流量。

    3.1         聚合负载分担算法简述

    聚合链路虽然被上层协议和应用视为单一链路,但是实际的业务流量转发任务必须要由聚合组中的物理成员链路来承担,为了提高聚合带宽及物理链路使用率,链路聚合使用负载分担策略将业务流量近似均匀的分配到各条成员链路,H3C交换机采用hash算法来实现链路聚合的负载分担。

    聚合环境下,在入方向,聚合选中端口接收报文,进行地址学习,但是和普通的物理端口不同,报文进入选中端口,根据内部端口ID查询此端口为哪个聚合组的成员端口,将MACARP学习在对应的聚合接口而不是学在接收报文的物理成员端口。比如H3CS5800交换机,其端口的内部端口ID由端口所在芯片号和内部端口号两部分组成,通过端口ID进行查询,如果返回信息中相应的字段为真则说明此端口为聚合成员端口,并且从返回信息的其他字段也能够得知此端口为哪一个聚合组的成员端口。

    在出方向,如果转发表指示出端口为聚合接口,则需要根据聚合组号查询选中端口信息。以聚合组号为索引,可以查到聚合组选中端口的端口ID,以及Hash算法所使用的报文字段指示,然后根据Hash的输出结果决定报文最终的出端口。     

    另外,对于已知单播和组播或者广播,在出方向的处理是不同的。

    H3CS5800为例,对于已知单播,Hash算法对报文相关字段取最后3bit进行异或运算,然后与当前聚合组中的选中端口数量进行求模运算,Hash的结果决定了报文最终的出端口。对于组播流量,如果聚合接口是已知组播的出端口,则聚合组中所有选中端口在组播表项里都是出端口,组播流量“泛洪”到各芯片,有出端口的芯片需要进一步查看位图信息,决定是否分担该流量。这需要以Hash值为索引,查询端口阻塞列表,该表置1的位所对应的端口将被阻塞。广播报文的处理和组播类似,所不同的是参与Hash计算的报文字段不同。

    虽然当前主流厂商都采用逐流,基于Hash算法的负载分担,但因为在逐流分担中会产生分担不均的问题,尤其在成员链路的数量不为2的指数倍时,将来应该可以实现在现有基础上,根据当前成员链路所剩余带宽进行二次Hash,从而实现更加均匀的负载分担效果。

    3.1.1  负载分担方式

    当前主流厂商都支持使用比如报文源MAC、目的MAC、源IP、目的IP、源端口、目的端口或者它们的组合等做为Hash算法的输入字段,来实现不同的负载分担方式。对于H3C交换机来说,在系统视图下进行全局聚合负载分担类型配置,H3C交换机支持如下负载分担方式:

    ²  根据源IP地址进行聚合负载分担;

    ²  根据目的IP地址进行聚合负载分担;

    ²  根据源MAC地址进行聚合负载分担;

    ²  根据目的MAC地址进行聚合负载分担;

    ²  根据源IP地址与目的IP地址进行聚合负载分担;

    ²  根据源IP地址与源端口进行聚合负载分担;

    ²  根据目的IP地址与目的端口进行聚合负载分担;

    ²  根据报文入端口、源MAC地址、目的MAC地址之间不同的组合进行聚合负载分担。

    在二层聚合接口视图下进行聚合组的聚合负载分担模式配置,H3C交换机支持:

    ²  根据源IP地址进行聚合负载分担;

    ²  根据目的IP地址进行聚合负载分担;

    ²  根据源MAC地址进行聚合负载分担;

    ²  根据目的MAC地址进行聚合负载分担;

    ²  根据目的IP地址与源IP地址进行聚合负载分担;

    ²  根据目的MAC地址与源MAC地址进行聚合负载分担。

    H3C IRF环境下,存在跨设备链路聚合时,默认采用本地转发优先的负载分担方式,即从本设备接收的已知单播出接口若为聚合接口,优先从本设备上的选中端口发送出去,本设备上有多个选中端口时,在本单板的选中端口之间负载分担,如果本设备上没有选中端口,才在其他成员设备的所有选中端口间负载分担,这样做的好处是避免了框间流量对于IRF堆叠口带宽的消耗,增强设备稳定性。

    3.2         聚合流量重定向

    目前H3C主流交换机产品都支持动态聚合组流量重定向功能,从而能够提供更加细致的HA特性。

    在动态聚合链路两端都使能了聚合流量重定向功能后,对于集中式设备,当关闭聚合组内某选中端口或者IRF环境下重启某台有聚合组选中端口的成员设备时,系统可以将这些端口上的流量重定向到其他选中端口上,从而实现聚合链路上流量的不中断。对于分布式设备,当重启某块有聚合选中端口的单板或者IRF环境下重启某个有聚合选中端口的成员设备或单板时,同样能够实现聚合链路上流量不中断。

    需要注意的是,如果同时使能聚合流量重定向功能和生成树功能,因为聚合口参与生成树计算,在重启单板、设备时会出现少量的丢包,因此不建议同时使能上述两个功能。