HCIA 链路聚合与LACP
一、前言
虽然很多文章在介绍链路聚合时会从链路备份的角度来介绍链路聚合的作用,然后再说其有提升链路带宽的作用,但我感觉链路聚合主要还是提升链路带宽的作用,链路备份只是顺带的不是主要目标。
二、链路聚合
考虑下面的网络,我们使用两根网线将交换机LSW1和LSW2连接在一起,在STP生效的情况下,其实只有一路是能走流量的,另一路会被“阻塞”。当主用的那路出现故障后被阻塞的一路会自动成为主用,此时就已经实现了链路的备份。
然后我们会发现只允许STP的话,链路有点浪费啊,占用了2个端口但一直只使用其中一个,如果我们用三根网线来连接最后还是只使用其中一根而已。如果可以同时使用这2根网线来跑流量岂不是就很美,链路聚合就可以实现这样的功能。
原理不复杂,如下图所示。数字代表交换机想要发送的数据包编号,只需要像下图这样错开来并同时发送数据,就能实现双倍的速度。如果单端口的速度是100M/s,聚合后就可以达到200M/s。
三、手工链路聚合
配置也是非常的简单:
system-view #进入系统视图
interface Eth-Trunk 1 #创建一个链路组
trunkport Ethernet 0/0/1 #将E0/0/1加入链路组
trunkport Ethernet 0/0/2 #将E0/0/2加入链路组
mode manual load-balance #设置为手动模式
两台交换机一样的设置,过一会就会发现两台PC可以ping通了。
不过在eNSP中进行抓包发现流量只会从其中一个端口走,不会实现所谓的“负载均衡”,应该是模拟器无法实现这么细的细节(找大牛问的)。
四、手工聚合的问题
1、不好维护
在逻辑图中我们可以清晰看到链路的连接,包括哪一根线连到哪里,但在现实中线是到处乱插的,很多时候网络负责人会“搞忘了”。比如某天需要需要做网络变更,某个端口需要换个交换机对接,这时候很难去回想起还有个链路聚合。
由于端口状态是UP的,我们检查LSW1的状态会发现一切正常,但实际运行会有问题,又不好去排查。
2、端口故障
存在一种情况,端口状态是UP,但实际上无法转发流量,这时候由于负载分担部分流量会被错误的转发到故障的端口。
五、LACP聚合
Link Aggregation Control Protocol(链路汇聚控制协议)简称LACP,是一种实现链路动态汇聚的协议。它的“动态”是与前面手工聚合相对来说,它配置过程与手工聚合类似,为了说明特性我们使用3个端口来连接两个交换机。
先清理之前的配置,两台交换机一样的操作:
interface Eth-Trunk 1
undo trunkport Ethernet 0/0/1
undo trunkport Ethernet 0/0/2
undo mode
新的网络结构:
LACP的配置:
interface Eth-Trunk 1
mode lacp-static
trunkport Ethernet 0/0/1
trunkport Ethernet 0/0/2
trunkport Ethernet 0/0/4
LACP与手工聚合配置过程差不多,最大不同在于在LACP协议下,交换机会定时发一个叫LACPDU的报文来进行端口协商并检查端口的状态。
1、端口状态检查
运行在LACP协议下的交换机会向对方端口发LACPDU报文,如果能收到对方的报文那自然对端就是正常状态,如果一定时间后没有收到LACPDU报文,交换机也就知道对方可能出现问题(比如挂了或者插到别的交换机上了),这时候就可以知道该端口异常从而不再使用该链路传流量。
2、端口协商
协商的内容其实还挺多,但是不想赘述了,其实来来去去都差不太多,我们主要关注由于端口协商的存在,使LACP相较手工聚合多了那些特性。
(1) 活跃端口数量限制
在人工聚合中我们配置了2端口则2个端口是平等的聚合在一起,可以理解传输流量时他们是平等分配工作的,如果你聚合3个4个也都是这样大家平均分配。但LACP由于有报文了嘛,所以它可以做到只用几个端口跑流量,其他端口都歇着。比如用下面的命令,可以将活跃端口数量限制在2个(两台交换机都要设置)。
max active-linknumber 2
然后查看下汇聚的情况,会发现其中一个端口自动就down了。
其实就这么一个特性,我感觉还挺疑惑的,这有啥用?
这看起来LACP其实也就是能不停用LACPDU报文来检测端口状态,此外没有什么特别的感觉。
六、负载分担方式
我们之前用下面这个图来示意链路聚合的效果,但实际运行中不可能是这样工作的,比如2如果比1更早到目标交换机,那岂不是还得等一等?过程太复杂了。
所以实际工作中聚合链路是按“流”的方式来负载分担的,比如发给IP1的包全部都走E0/0/1,发给IP2的包全部都走E0/0/2,这样就避免了包的乱序。而以目标IP作为负载分担方式称为按“目的IP地址”模式。常见的有6种,看名字都能知道是啥意思。
(1)src-mac 源MAC地址模式
(2)dst-mac目的MAC地址模式
(3)src-dst-mac源MAC地址和目的MAC地址模式
(4)src-ip源IP地址模式
(5)dst-ip目的IP地址模式
(6)src-dst-ip源IP地址和目的IP地址模式
默认是“src-dst-ip”,修改用下面的命令:
load-balance src-ip #修改为源IP模式
无乱是手工聚合还是LACP都支持修改负载分担模式。
七、回顾
本篇我们了解了链路聚合,他分为手工链路聚合和LACP聚合,二者的最大区别并不是LACP就实现了自动聚合,而是LACP可以通过LACPDU报文来检查端口的状态。聚合以后的链路以负载分担的方式运行,可以实现链路的备份以及带宽的扩展。
此外,网上看到说LACP可以实现自动聚合,也就是只需要在某一台交换机上开启协议,就能自动通过LACPDU报文来自动聚合链路,我查了半天也没搞明白。
就目前我找到的资料,链路聚合都是手动的,并不是LACP就自动了,它一样需要配置参与聚合的链路,但在一定程度上它实现了自动化,但不是聚合本身的自动化。