2. 链路冗余技术:EtherChannel(LACP/PAgP)原理与配置

说到链路冗余,很多人第一反应就是STP。但STP有个天生的毛病——它会把冗余链路给block掉。说白了,你明明多拉了几根线,结果只有一条在干活,其他的都在睡觉。这太浪费了。

那有没有办法让多条链路同时工作,还能互相备份?有,就是EtherChannel。我习惯叫它「链路聚合」。这玩意儿能把2到8条物理链路捆成一条逻辑链路,带宽叠加,故障自动切换。我在数据中心项目里,几乎每个机柜的上行都在用这个技术。

2.1 EtherChannel的两种协议:LACP vs PAgP

EtherChannel有两种协商协议。一个是IEEE标准LACP,一个是思科私有PAgP。我个人建议,能用LACP就别用PAgP。为什么?因为LACP是开放的,跨厂商兼容性好。你想想看,万一哪天机房要混用华为和思科的设备,PAgP就废了。

特性 LACP (802.3ad) PAgP (思科私有)
标准 IEEE标准,跨厂商 仅思科设备
模式 Active / Passive Desirable / Auto
最大链路数 8条(可扩展到16条) 8条
检测机制 LACPDU报文,1秒一次 PAgP报文,1秒一次

这里有个坑,我踩过。LACP的Passive模式不会主动发起协商,必须对端是Active才能建立。我曾经有一次配了两端都是Passive,结果链路死活起不来。排查了半天,发现两边都在等对方先开口。嗯,这就像两个人都在等对方先打招呼,场面一度非常尴尬。

避坑指南: 我曾经在割接时遇到过,一端配了LACP Active,另一端忘了配,结果流量全断了。建议两端都配成Active模式,最省心。

2.2 链路聚合的负载均衡算法

很多人以为EtherChannel是把流量平均分配到每条链路上。其实不是。它用的是哈希算法。说白了,就是根据数据包的某些字段算出一个哈希值,然后决定走哪条链路。

默认情况下,思科设备用的是源MAC和目的MAC的组合。但我在实际项目中遇到过一个问题:如果所有流量都是同一个MAC对在通信,那哈希值永远一样,所有流量都挤在一条链路上,其他链路闲着。这就失去了聚合的意义。

所以,你需要根据业务场景调整算法。常见的算法有:

  • src-dst-mac:基于源目MAC,适合二层环境
  • src-dst-ip:基于源目IP,适合三层路由环境
  • src-dst-port:基于源目端口号,适合NAT或负载均衡场景

我个人习惯在数据中心里用src-dst-ip。因为服务器之间的流量,IP对变化多,哈希分布更均匀。你想想看,几百台虚拟机互相通信,源目IP千变万化,每条链路都能跑满。

配置示例(Cisco IOS):
!
interface Port-channel1
 no switchport
 ip address 10.1.1.1 255.255.255.0
!
interface GigabitEthernet0/1
 channel-group 1 mode active
!
interface GigabitEthernet0/2
 channel-group 1 mode active
!
! 调整负载均衡算法
port-channel load-balance src-dst-ip
!

2.3 故障切换场景演示

EtherChannel的故障切换速度,比STP快得多。STP收敛要几十秒,EtherChannel只要几毫秒。为什么?因为EtherChannel检测到链路down了,直接重新计算哈希,把流量切到其他链路上。不需要像STP那样重新计算拓扑。

我记得有一次机房巡检,不小心踢掉了一根光纤。当时心里一紧,以为要出事故了。结果ping了一下,一个包都没丢。这就是EtherChannel的好处——故障对业务完全透明。

但要注意,EtherChannel只能检测物理链路故障。如果链路是通的,但质量很差(比如光衰大、误码率高),EtherChannel不会自动切换。我曾经遇到过这种情况:光纤被老鼠咬了一口,光功率掉到-25dBm,但链路没down。结果业务卡得要死,EtherChannel还在往那条坏链路上发流量。

经验之谈: 建议配合链路质量监控一起用。比如用SNMP监控光模块的收发光功率,一旦低于阈值就告警。或者用UDP Jitter检测链路延迟和抖动。别光靠EtherChannel自己。

另外,EtherChannel的故障切换有个细节:它只切换新流量,不会重传已经发送的包。也就是说,如果某个包正在坏链路上传输,链路突然断了,这个包就丢了。上层协议(比如TCP)会负责重传。所以,如果你的业务是UDP的,而且对丢包敏感,建议在应用层做冗余。

最后说一句,EtherChannel不是万能的。它解决的是链路层面的冗余和带宽叠加。但如果你要跨设备做冗余(比如两台交换机互为备份),那就得用MLAG或者VPC了。那是另一个话题,咱们后面再聊。

EtherChannel 核心逻辑图 交换机A LACP Active 交换机B LACP Active Port-channel 1 (逻辑链路) 物理链路1 (Gi0/1) 物理链路2 (Gi0/2) 物理链路3 (Gi0/3) 哈希算法:src-dst-ip / src-dst-mac 流量均匀分布到3条物理链路
关键总结:
  • EtherChannel把多条物理链路捆成一条逻辑链路,带宽叠加
  • LACP是标准协议,PAgP是思科私有,建议用LACP Active模式
  • 负载均衡靠哈希算法,不是简单的轮询。根据业务选src-dst-ip或src-dst-mac
  • 故障切换毫秒级,但只检测物理断链,不检测链路质量

好了,EtherChannel这块就聊到这儿。这东西配置不难,但要想用好,得理解它的原理和局限。下次你配链路聚合的时候,想想我今天说的那几个坑,应该能帮你省不少事。

专注资料整理