企业网中的业务流量在不断增长,接入与汇聚交换机之间的链路通常承担了很多不同的业务流量,对链路带宽提出了更高的要求。单条链路往往难以满足业务的带宽要求,同时,如果没有冗余链路设计,单条链路故障还可能会导致业务中断。
链路聚合(LA,Link Aggregation)技术可以把多个独立的物理链路捆绑在一起,形成"一条"具有更大带宽、更高可靠性的逻辑链路,是局域网中常用的技术。
我们把链路聚合而成的逻辑链路称为一个聚合组。在一个聚合组内,有若干的物理端口。我们把聚合组内的端口叫做"成员端口",不同类型的设备支持的最大成员端口数量也有所差异。成员端口有两种状态,处于Selected状态(也称为活动状态、Active状态)的成员端口可以转发数据。一个聚合组中同时处于Selected状态的端口数量上限(最大活跃数)可以配置,一般默认为8个。处于Unselected状态(也称为非活动状态、Backup状态、Standby状态)的成员端口不转发数据。
所有成员端口都有一个"操作Key",由端口的速率、双工方式、up/down状态、基本配置自动生成。
基本配置包括STP、QoS、GVRP、VLAN、MAC地址学习、QinQ、BPDU Tunnel等。
在一个聚合组中,如果同时存在多个Selected端口,那么聚合组会对转发的数据进行负载分担。负载分担方式有逐包和逐流两种方式。
逐包方式,是把每个数据包看作独立个体,分配到不同的成员端口上发送。这种方式可以最大限度地利用每条链路的带宽,聚合组带宽是所有成员端口的带宽之和。但缺点是无法保证数据包按顺序到达,造成乱序。
逐流方式是链路聚合默认采用的负载分担方式,缺省是基于IP的逐流方式,也可以修改为基于MAC地址等其他方式。当数据包的源IP地址、目的IP地址都相同,我们把这些数据包叫一条数据流。一条数据流只在同一条成员链路上传输,避免了数据流的乱序问题。不过逐流方式不能最大限度地利用聚合链路带宽。
链路聚合的方法主要有静态聚合和动态聚合。
静态聚合,也叫手工聚合,需分别在聚合链路两端交换机上手工创建聚合组并加入成员端口,没有LACP协议(Link Aggregation Control Protocol,链路聚合控制协议)参与,交换机之间不交互聚合信息。聚合组中所有成员端口中端口号最小的端口,称为参考端口。参考端口为Selected状态,其他成员端口与参考端口操作Key相同,且不超过最大活跃数的端口,均为Selected状态,参与数据转发。若成员端口数量超过最大活跃数,则按端口号由小到大顺序优选Selected端口,其他为Unselected端口。
如端口E0/1、E0/2、E0/3、E0/4、E0/5为成员端口,所有端口操作Key均相同,最大活跃数为3,则参考端口为E0/1,Selected端口为E0/1、E0/2、E0/3,Unselected端口为E0/4、E0/5。
静态聚合的最大缺点是不能检测到聚合组中可能出现的错误,从而造成丢包的情况。常见的错误有两种:一是本端某个成员端口处于Selected状态,而与之相连接的对端端口为Unselected状态,则可能造成丢包;二是本端某个成员端口连接的对端端口不是聚合组成员端口,甚至本端成员端口连接着不同的对端设备,也会造成丢包。
动态聚合实际上有两种,一种是静态LACP聚合,另一种是动态LACP聚合。我们所说的动态聚合通常是指静态LACP聚合。
静态LACP聚合需手工创建聚合组,开启LACP协议,加入成员端口。
聚合链路两端的交换机通过聚合组内的所有成员端口向对端发送LACP报文,确定Selected端口。LACP报文主要内容包括设备ID、端口ID和操作Key。
设备ID由设备优先级和MAC构成,端口ID由优先级和端口号构成。
为避免静态聚合中一端为Selected状态而另一端为Unselected状态的情况,两端交换机需要选出个Master,设备ID较小的一端为Master(先比较设备优先级,优先级相同则比较MAC地址)。
Master聚合组中所有成员端口通过比较端口ID(先比较优先级,优先级相同则比较端口号)选出参考端口,参考端口的对端端口必须也在静态LACP聚合组内,且操作Key与参考端口相同,则两端均为Selected状态,否则均为Unselected状态,Master重新在剩余成员端口中选参考端口。
Master端所有与参考端口操作Key相同的成员端口,若其对端操作Key与本端也相同,同时不超过最大活跃数,则两端端口均为Selected状态,否则均为Unselected状态。
静态LACP聚合组通过交互LACP报文,避免了端口聚合中可能出现的错误,两端端口或者同时为Selected状态,或者同时为Unselected状态。
动态LACP聚合的应用不太多见,这种方式只需在端口开启LACP即可,不必手工配置其他信息,由系统自动创建聚合组并加入成员端口,协商过程和静态LACP聚合相同。
链路聚合在应用中,应注意以下问题:
不要单独对成员端口做任何基本配置项,避免因为操作Key不同而处于Unselected状态;
聚合组不能嵌套,即成员端口不能是一个聚合端口;
一个物理端口只能加入到一个聚合组中;
聚合链路两端的端口必须在同一台设备(可以是物理设备或虚拟设备)上,且必须为聚合组中的成员端口。