Eth-Trunk基本原理
以太网链路聚合Eth-Trunk简称链路聚合,它通过将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的。同时,这些捆绑在一起的链路通过相互间的动态备份,可以有效地提高链路的可靠性。
Trunk接口连接的链路可以看成是一条点到点的直连链路,在一个Trunk内,可以实现流量负载分担,同时也提供了更高的连接可靠性和更大的带宽。用户通过对逻辑口进行配置,实现各种路由协议以及其它业务部署。
Eth-Trunk三大优势
- 增加带宽: 链路聚合接口的最大带宽可以达到各成员接口带宽之和。
- 提高可靠性:当某条活动链路出现故障时,流量可以切换到其他可用的成员链路上,从而提高链路聚合接口的可靠性。
- 负载分担:在一个链路聚合组内,可以实现在各成员活动链路上的负载分担。
Eth-Trunk相关知识
链路聚合组和链路聚合接口
链路聚合组LAG(Link Aggregation Group)是指将若干条以太链路捆绑在一起所形成的逻辑链路。
每个聚合组唯一对应着一个逻辑接口,这个逻辑接口称之为链路聚合接口或Eth-Trunk接口。链路聚合接口可以作为普通的以太网接口来使用,与普通以太网接口的差别在于:转发的时候链路聚合组需要从成员接口中选择一个或多个接口来进行数据转发。
成员接口和成员链路
组成Eth-Trunk接口的各个物理接口称为成员接口。成员接口对应的链路称为成员链路。
活动接口和非活动接口、活动链路和非活动链路
链路聚合组的成员接口存在活动接口和非活动接口两种。转发数据的接口称为活动接口,不转发数据的接口称为非活动接口。
活动接口对应的链路称为活动链路,非活动接口对应的链路称为非活动链路。
活动接口数上限阈值
设置活动接口数上限阈值的目的是在保证带宽的情况下提高网络的可靠性。当前活动链路数目达到上限阈值时,再向Eth-Trunk中添加成员接口,不会增加Eth-Trunk活动接口的数目,超过上限阈值的链路状态将被置为Down,作为备份链路。
例如,有8条无故障链路在一个Eth-Trunk内,每条链路都能提供1G的带宽,现在最多需要5G的带宽,那么上限阈值就可以设为5或者更大的值。其他的链路就自动进入备份状态以提高网络的可靠性。
注:手工负载分担模式链路聚合不支持活动接口数上限阈值的配置。
活动接口数下限阈值
设置活动接口数下限阈值是为了保证最小带宽,当前活动链路数目小于下限阈值时,Eth-Trunk接口的状态转为Down。
例如,每条物理链路能提供1G的带宽,现在最小需要2G的带宽,那么活动接口数下限阈值必须要大于等于2。
设备支持的链路聚合方式
- 同板∶是指链路聚合时,同一聚合组的成员接口分布在同一单板上。
- 跨板∶是指链路聚合时,同一聚合组的成员接口分布在不同的单板上。
- 跨框∶是指在集群场景下,成员接口分布在集群的各个成员设备上。
- 跨设备∶是指E-Trunk基于LACP进行了扩展,能够实现多台设备间的链路聚合。
Eth-Trunk的转发原理
对于负载分担,可以分为逐包的负载分担和逐流的负载分担。
逐包的负载分担
在使用Eth-Trunk转发数据时,由于聚合组两端设备之间有多条物理链路,就会产生同一数据流的第一个数据帧在一条物理链路上传输,而第二个数据帧在另外一条物理链路上传输的情况。这样一来同一数据流的第二个数据帧就有可能比第一个数据帧先到达对端设备,从而产生接收数据包乱序的情况。
逐流的负载分担
这种机制把数据帧中的地址通过HASH算法生成HASH-KEY值,然后根据这个数值在Eth-Trunk转发表中寻找对应的出接口,不同的MAC或IP地址HASH得出的HASH-KEY值不同,从而出接口也就不同,这样既保证了同一数据流的帧在同一条物理链路转发,又实现了流量在聚合组内各物理链路上的负载分担。逐流负载分担能保证包的顺序,但不能保证带宽利用率。
注:目前AR系列路由器仅支持逐流的负载分担。
Eth-Trunk的实现方式
手工模式链路聚合
手工模式下,Eth-Trunk的建立、成员接口的加入由手工配置,没有链路聚合控制协议 LACP的参与。如图所示,DeviceA与DeviceB之间创建Eth-Trunk,手工模式下三条活动链路都参与数据转发并分担流量。当一条链路故障时,故障链路无法转发数据,链路聚合组自动在剩余的两条活动链路中分担流量。
LACP模式链路聚合
作为链路聚合技术,手工负载分担模式Eth-Trunk可以完成多个物理接口聚合成一个Eth-Trunk口来提高带宽,同时能够检测到同一聚合组内的成员链路有断路等有限故障,但是无法检测到链路层故障、链路错连等故障。
为了提高Eth-Trunk的容错性,并且能提供备份功能,保证成员链路的高可靠性,出现了链路聚合控制协议LACP(Link Aggregation Control Protocol),LACP模式就是采用LACP的一种链路聚合模式。
LACP为交换数据的设备提供一种标准的协商方式,以供设备根据自身配置自动形成聚合链路并启动聚合链路收发数据。聚合链路形成以后,LACP负责维护链路状态,在聚合条件发生变化时,自动调整或解散链路聚合。
LACP模式Eth-Trunk建立的过程如下:
1. 两端互相发送LACPDU报文。
在DeviceA和DeviceB上创建Eth-Trunk并配置为LACP模式,然后向Eth-Trunk中手工加入成员接口。此时成员接口上便启用了LACP协议,两端互发LACPDU报文。
2. 确定主动端和活动链路
如图所示,两端设备均会收到对端发来的LACPDU报文。以DeviceB为例,当DeviceB收到 DeviceA发送的报文时,DeviceB会查看并记录对端信息,然后比较系统优先级字段,如果 DeviceA的系统优先级高于本端的系统优先级,则确定DeviceA为LACP主动端。如果DeviceA和 DeviceB的系统优先级相同,比较两端设备的MAC地址,确定MAC地址小的一端为LACP主动端。
选出主动端后,两端都会以主动端的接口优先级来选择活动接口,如果主动端的接口优先级都相同则选择接口编号比较小的为活动接口。两端设备选择了一致的活动接口,活动链路组便可以建立起来,从这些活动链路中以负载分担的方式转发数据。
3. LACP抢占
使能LACP抢占功能后,聚合组会始终保持高优先级的接口作为活动接口的状态
以下两种情况需要使能LAXP的抢占功能:
Port1接口出现故障而后又恢复了正常。当接口Port1出现故障时被Port3所取代,如果在Eth-Trunk接口下未使能LACP抢占功能,则故障恢复时Port1将处于备份状态;如果使能了LACP抢占功能,当Port1故障恢复时,由于接口优先级比Port3高,将重新成为活动接口,Port3再次成为备份接口。
如果希望Port3接口替换Port1、Port2中的一个接口成为活动接口,可以使能了LACP抢占功能,并配置Port3的接口LACP优先级较高。如果没有使能LACP抢占功能,即使将备份接口的优先级调整为高于当前活动接口的优先级,系统也不会进行重新选择活动接口的过程,不切换活动接口。
LACP抢占延时:
抢占延时是LACP抢占发生时,处于备用状态的链路将会等待一段时间后再切换到转发状态。配置抢占延时是为了避免由于某些链路状态频繁变化而导致Eth-Trunk数据传输不稳定的情况。
活动链路与非活动链路的切换
- LACP模式链路聚合组两端设备中任何一端检测到以下事件,都会触发聚合组的链路切换:
- 链路Down事件。
- 以太网OAM检测到链路失效。
- LACP协议发现链路故障。
- 接口不可用。
- 在使能了LACP抢占功能的前提下,更改备份接口的优先级高于当前活动接口的优先级。
当满足上述切换条件其中之一时,按照如下步骤进行切换:
- 关闭故障链路。
- 从N条备份链路中选择优先级最高的链路接替活动链路中的故障链路。 优先级最高的备份链路转为活动状态并转发数据,完成切换。
配置注意事项
链路聚合前
- 成员接口不能配置某些业务,例如成员接口不能修改接口类型、不能配置静态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来学习的,而不是按照成员接口来学习。
- 删除聚合组时需要先删除聚合组中的成员接口。
缺省配置
链路聚合模式: 手工负载分担模式
活动接口数上限阈值: 8
活动接口数下限阈值: 1
系统LACP优先级: 32768
接口LACP优先级: 32768
LACP抢占: 去使能
LACP抢占等待时间: 30s
接收LACP报文超时时间: 90s
配置命令
手工模式
[SW1]dis current-configuration
#
sysname SW1
#
vlan batch 10 20
#
interface Eth-Trunk1
port link-type trunk
port trunk allow-pass vlan 10 20
#
interface GigabitEthernet0/0/1
eth-trunk 1 //加入Eth-trunk接口
#
interface GigabitEthernet0/0/2
eth-trunk 1 //加入Eth-trunk接口
#
interface GigabitEthernet0/0/3
eth-trunk 1 //加入Eth-trunk接口
#
LACP模式
[SW3]dis current-configuration
#
sysname SW3
#
lacp priority 100
//配置系统LACP优先级
#
interface Eth-Trunk1
//创建eth-trunk接口
mode lacp-static
//配置链路聚合模式为LACP模式
least active-linknumber 2
//配置链路聚合活动接口数下限阈值
max bandwidth-affected-linknumber 3
//配置带宽计算的端口数量
load-balance dst-ip
//配置负载分担方式
lacp timeout fast
//配置当前接口接收LACP协议报文的超时时间
lacp preempt enable
//使能当前Eth-Trunk接口的LACP抢占功能
max active-linknumber 2
//配置链路聚合活动接口数上限阈值
lacp preempt delay 20
//配置当前Eth-Trunk接口的LACP抢占等待时间
//配置为fast,对端发送LACP报文的周期为1秒。
//配置为slow,对端发送LACP报文的周期为30秒。
//LACP协议报文的超时时间为LACP报文发送周期的3倍
lacp selected speed
//更改LACP模式Eth-Trunk依据接口速率来选择活动接口
#
interface GigabitEthernet0/0/1
eth-trunk 1 //加入Eth-trunk接口
lacp priority 100
//配置当前接口的LACP优先级
#
interface GigabitEthernet0/0/2
eth-trunk 1
#
interface GigabitEthernet0/0/3
eth-trunk 1
#
其他命令
trunkport interface gi 0/0/1 to 0/0/3
//将多个接口同时加上eth-turnk接口中
display eth-trunk [ trunk-id [ interface interface-type interface-number | verbose ] ]
//查看Eth-Trunk接口的配置信息
display lacp statistics eth-trunk 1
//查看LACP模式下LACP报文收发统计信息
display interface eth-trunk 1
//查看eth-trunk接口的状态信息
display trunkmembership eth-trunk 1
//查看eth-trunk的成员接口信息
reset lacp statistics eth-trunk 1
//清除LACP收发报文的统计信息
reset lacp error packet statistics
//清除LACP错误报文的统计信息
集群环境下的链路聚合
Eth-Trunk与E-Trunk