链路聚合
以太网链路聚合 (Eth-Trunk) 简称链路聚合,它通过将多条以太网物理链路捆绑在一起成为一条逻辑链路,最大带宽可以达到各成员接口带宽之和,从而增加链路带宽。这些捆绑在一起的链路也能通过相互间的动态备份,提高链路的可靠性
基本概念
Link Aggregation Group (LAG、链路聚合组)
将若干条以太链路捆绑在一起所形成的逻辑链路,每个聚合组对应一个逻辑接口,这个接口称为链路聚合接口或 Eth-Trunk 接口。链路聚合接口可以作为普通以太网接口来使用,转发数据时链路聚合接口需要从成员接口中选择一个或多个接口来进行转发
成员接口与成员链路
组成链路聚合接口的各个物理接口成为成员接口,成员接口所对应的链路为成员链路
活动接口、非活动接口、活动链路与非活动链路
转发数据的接口为活动接口,不转发则为非活动接口。与接口对应的链路即为活动链路、非活动链路
活动接口数上限下限阈值
上限阈值 : 当活动接口数达到上限阈值时,后续加入的成员接口会作为备份接口
下限阈值 : 当活动接口数低于下限阈值时,聚合接口会转为 down
手工负载分担模式链路聚合不支持配置活动接口数上限阈值
聚合模式
根据是否启用链路聚合控制协议 LACP,链路聚合分为手工模式和 LACP 模式
手工模式
手工模式下,Eth-Trunk 的建立、成员接口的加入由手工配置,没有链路聚合控制协议 LACP 的参与。当需要在两个直连设备之间提供一个较大的链路带宽而设备又不支持 LACP 协议时,可以使用手工模式。手工模式可以实现增加带宽、提高可靠性和负载分担的目的
如果某条活动链路故障,链路聚合组自动在剩余的活动链路中分担流量,且只能检测到同一聚合组内的成员链路的断路故障,无法检测到链路错连等故障,不支持跨设备聚合 (一端的成员接口分布在不同设备)
LACP 模式
为了提高 Eth-Trunk 的容错性,并且能提供备份功能,保证成员链路的高可靠性,推出了链路聚合控制协议 LACP (Link Aggregation Control Protocol),LACP 为交换数据的设备提供一种标准的协商方式,以供设备根据自身配置自动形成聚合链路并启动聚合链路收发数据。聚合链路形成以后,LACP 负责维护链路状态,在聚合条件发生变化时,自动调整或解散链路聚合
在 LACP 模式的 Eth-Trunk 中加入成员接口后,这些接口将通过发送 LACPDU 向对端通告自己的系统优先级、MAC 地址、接口优先级、接口号和操作 Key 等信息。对端接收到这些信息后,将这些信息与自身接口所保存的信息比较,用以选择聚合的接口,双方对哪些接口能够成为活动接口达成一致,确定活动链路
- Destination Address : 目的 MAC 地址
- Source Address : 源 MAC 地址
- Length/Type : 协议类型
- Subtype : 子类型 (0x01,LACP 报文)
- Version Number : 版本号
- TLV_type : 报文类型
- 0x00 : Terminator
- 0x01 : Actor
- 0x02 : Partner
- 0x03 : Collector
- Actor_Information_Length : Actor 信息长度
- Actor_Port : 本端接口号
- Actor_State : 本端状态信息
- Actor_System_Priority : 本端系统优先级,默认 32768
- Actor_System : 系统 ID,本端系统的 MAC 地址
- Actor_key : 接口 KEY 值
- Actor_Port_Priority : 接口优先级,默认 0x8000
- Reserved : 保留
- Partner_Information_Length : Partner 信息字段长度
- Partner_Port : 对端接口号
- Partner_State : 对端状态信息
- Partner_System_Priority : 对端系统优先级
- Partner_System : 对端系统 ID,对端系统的 MAC 地址
- Partner_Key : 对端接口 KEY 值
- Partner_Port_Priority : 对端接口优先级
- Collector_Information_Length : Collector 信息字段长度
- Collector_Max_Delay : 最大延时,默认 0xffff
- Terminator_Length : Terminator 信息字段长度
系统优先级 : 用于选举主动端,优先级越小越优先
接口优先级 : 用于选举活动接口与非活动接口,优先级越小越优先被选为活动接口
成员接口间 M:N 备份
由 LACP 确定聚合组中的活动和非活动链路,又称为 M:N 模式,即 M 条活动链路与 N 条备份链路的模式。这种模式提供了更高的链路可靠性,并且可以在 M 条链路中实现不同方式的负载均衡
建立过程
- 两端互相发送 LACPDU 报文
- 比较 LACPDU 报文中的系统优先级,优先级较小的为主动端(若优先级一致则比较设备 MAC 地址)
- 由主动端决定活动接口,两端选择一致的活动接口后则建立活动链路,活动链路以负载分担的方式转发数据
链路切换
LACP 模式聚合组两端设备中任何一端检测到以下事件,都会触发聚合组的链路切换 :
- 链路 Down 事件
- 以太网 OAM 检测链路失效
- LACP 协议发现链路故障
- 接口不可用
- 使能 LACP 抢占功能前提下,更改备份接口的优先级高于当前活动接口优先级
切换步骤 :
- 关闭故障链路
- 从 N 条备份链路中选中优先级最高的链路替换活动链路中的故障链路
- 优先级最高的备份链路转为活动状态并转发数据
LACP 抢占
使能 LACP 抢占功能后,聚合组会始终保持高优先级的接口作为活动接口的状态
聚合方式
- 同设备聚合 : 指聚合组的成员接口都分布在同一台设备上
- 堆叠设备聚合 : 指聚合组的成员接口分布在堆叠的成员设备上
- 跨设备聚合 : 通过 LACP 实现聚合组的成员接口分布在不同设备上
负载分担
数据流是指一组具有某个或某些相同属性的数据包。这些属性有源 MAC 地址、目的 MAC 地址、源 IP 地址、目的 IP 地址、TCP/UDP 的源端口号、TCP/UDP 的目的端口号等
逐包的负载分担
在使用 Eth-Trunk 转发数据时,由于聚合组两端设备之间有多条物理链路,就会产生同一数据流的第一个数据帧在一条物理链路上传输,而第二个数据帧在另一条物理链路上传输的情况。这样一来同一数据流的第二个数据帧有可能比第一个数据帧先到达对端设备,从而产生接收数据乱序的情况
逐流的负载分担
这种机制把数据帧中的地址通过 Hash 算法生成 Hash-Key 值,然后根据这个数值在 Eth-Trunk 转发表中寻找对应的出接口,不同的 MAC 或 IP 地址 Hash 得出的值不同,从而出接口就不同,这样既保证了同一数据流的帧在同一跳物理链路转发,又实现了流量在聚合组内各物理链路上的负载分担。逐流负载分担能保证包的顺序,但不能保证带宽利用率
为了避免数据包乱序情况的发生,Eth-Trunk 采用逐流负载分担的机制,其中如何转发数据则由于选择不同的负载分担方式而有所差别 :
- 根据报文的源 MAC 地址进行负载分担
- 根据报文的目的 MAC 地址进行负载分担
- 根据报文的源 IP 地址进行负载分担
- 根据报文的目的 IP 地址进行负载分担
- 根据报文的源 MAC 地址和目的 MAC 地址进行负载分担
- 根据报文的源 IP 地址和目的 IP 地址进行负载分担
- 根据报文的 VLAN、源物理接口等对 L2、IPv4、IPv6 和 MPLS 报文进行增强型负载分担
负载分担注意事项
- 负载分担方式只在流量的出接口上生效,如果发现各入接口的流量不均衡,请修改上行出接口的负载分担方式
- 尽量将数据流通过负载分担在所有活动链路上传输,避免数据流仅在一条链路上传输,造成流量拥堵,影响业务正常运行
例如 : 数据报文的目的 MAC 和 IP 地址只有一个,则应选择根据报文的源 MAC 和 IP 地址进行负载分担,如果选择根据报文的目的 MAC 和 IP 地址进行负载分担则会造成流量只在一条链路上传输,造成流量拥堵
链路聚合注意事项
聚合前
- 必须保证两端设备的聚合模式、接口数量、速率、双工方式、流控方式一致
- 成员接口不能配置某些业务,例如成员接口不能修改接口类型、不能配置静态 MAC 地址
- Eth-Trunk 接口不能嵌套,即 Eth-Trunk 接口的成员接口不能是 Eth-Trunk 接口
- 一个 Eth-Trunk 接口中的成员接口必须是以太网类型和速率相同的接口,以太网类型和速率不同的接口不能加入同一个 Eth-Trunk 接口
(如 GE 接口和 FE 接口不能加入同一个 Eth-Trunk 接口,GE 电接口和 GE 光接口不能加入同一个 Eth-Trunk 接口) - 如果本端设备接口加入了 Eth-Trunk,与该接口直连的对端接口也必须加入 Eth-Trunk,两端才能正常通信
聚合后
- 一个以太网接口只能加入到一个 Eth-Trunk 接口,如果需要加入其它 Eth-Trunk 接口,必须先退出原来的 Eth-Trunk 接口
- 当成员接口加入 Eth-Trunk 后,学习 MAC 地址或 ARP 地址时是按照 Eth-Trunk 来学习的,而不是按照成员接口来学习
- 删除聚合组时需要先删除聚合组中的成员接口