4. 链路聚合(EtherChannel)深度配置:LACP与PAgP协议对比、负载均衡算法选择与调优、跨设备链路聚合(vPC/M-LAG)配置与高可用性设计
链路聚合,说白了就是把多条物理链路捆成一条逻辑链路。你想想看,一根千兆网线带宽不够,两根呢?三根呢?但直接插上去不配置,STP 会帮你堵住冗余链路,反而更慢。EtherChannel 就是解决这个问题的。
我刚开始接触这个技术时,总觉得不就是把线插上、配个组嘛。直到有一次在数据中心割接,因为负载均衡算法选错了,导致一条链路跑满、其他链路闲置,业务直接告警。嗯,从那以后我再也不敢小看这个配置了。
4.1 LACP 与 PAgP:两种协议,两种哲学
链路聚合有两种协商协议:LACP(IEEE 802.3ad)和 PAgP(Cisco 私有)。我个人习惯,只要不是纯 Cisco 老环境,一律用 LACP。为什么?
| 特性 | LACP | PAgP |
|---|---|---|
| 标准 | IEEE 802.3ad(开放) | Cisco 私有 |
| 跨厂商兼容 | 支持 | 仅 Cisco |
| 最大链路数 | 16(8 活动 + 8 备份) | 8(全部活动) |
| 模式 | Active / Passive | Desirable / Auto |
| 检测机制 | LACPDU 每 1 秒(快)/ 30 秒(慢) | PAgP PDU 每 1 秒 |
核心建议:新项目一律使用 LACP Active 模式。PAgP 只用于遗留 Cisco 设备对接,且必须两端都是 Cisco。
配置上其实不复杂。LACP 两端模式必须匹配:一端 Active,另一端可以是 Active 或 Passive。PAgP 也一样,Desirable 对 Desirable 或 Auto。
# LACP 配置示例(Cisco IOS)
interface Port-channel1
no switchport
ip address 10.1.1.1 255.255.255.0
!
interface GigabitEthernet1/0/1
channel-group 1 mode active
!
interface GigabitEthernet1/0/2
channel-group 1 mode active
个人经验:我曾经遇到过一个坑——两端都配了 LACP,但一端是 Active,另一端是 Passive,结果协商失败。检查了半天才发现是模式不匹配。记住:Active 对 Active 最稳,Active 对 Passive 也行,但 Passive 对 Passive 绝对不行。
4.2 负载均衡算法:选错了,聚合等于白配
很多人以为链路聚合配好就完事了。其实不然。负载均衡算法决定了流量怎么分配到各条链路上。选错了,你会发现一条链路跑满,其他链路在「摸鱼」。
EtherChannel 的负载均衡是基于流的,不是基于包的。它通过哈希计算,把属于同一个流的报文固定到同一条链路上。这样能保证报文不乱序。
常见的哈希因子有这些:
- 源 MAC:适合二层交换环境,流量均匀度一般
- 目的 MAC:适合服务器到网关的场景
- 源 + 目的 MAC:二层最常用,均匀度较好
- 源 IP:适合三层路由环境
- 目的 IP:适合访问单一服务器集群
- 源 + 目的 IP:三层最推荐,均匀度最高
- 源 + 目的 IP + 端口:四层负载均衡,最精细
避坑指南:我曾经在一个数据中心项目中,所有流量都经过一对核心交换机做 EtherChannel。默认算法是源 MAC,结果因为所有服务器的 MAC 都集中在同一块板卡上,哈希结果严重倾斜。改成源 + 目的 IP 后,链路利用率从 90%/10% 变成了 45%/55%。
查看当前负载均衡算法:
# 查看 EtherChannel 负载均衡算法
Switch# show etherchannel load-balance
EtherChannel Load-Balancing Configuration:
src-dst-ip
# 查看每条链路的流量分布
Switch# show etherchannel port-channel
Port-channel1 (Primary Aggregator)
Age of the Port-channel = 0d:00h:05m:32s
Logical slot/port = 1/1 Number of ports = 2
HotStandBy port = null
Port state = Port-channel Ag-Inuse
Protocol = LACP
Ports in the Port-channel:
Index Port Oper-State Load
0 Gi1/0/1 up 0x55
1 Gi1/0/2 up 0xAB
Load 值 0x55 和 0xAB 表示哈希分布。如果两个值差距很大,说明算法需要调整。
调优建议:如果流量模型是南北向(客户端到服务器),用 src-dst-ip;如果是东西向(服务器之间),用 src-dst-mac 或 src-dst-ip。端口级哈希(src-dst-port)虽然最均匀,但会消耗更多硬件资源,老设备可能不支持。
4.3 跨设备链路聚合:vPC 与 M-LAG
单台交换机做 EtherChannel,一旦设备挂了,聚合也就断了。跨设备链路聚合就是为了解决这个问题——让两台设备看起来像一台,共同提供链路聚合。
Cisco 叫 vPC(Virtual Port Channel),华为叫 M-LAG(Multi-Chassis Link Aggregation),其他厂商各有各的叫法。原理大同小异。
4.3.1 vPC 核心组件
- vPC Domain:两台设备组成一个域,必须有相同的 domain ID
- vPC Keepalive:通过独立链路(通常是管理口)检测对端存活
- vPC Peer-Link:两台设备之间的数据同步链路,通常用 40GE/100GE
- vPC Member Port:连接到下游设备的物理端口
4.3.2 vPC 配置要点
! 配置 vPC Domain(Switch A)
vpc domain 100
role priority 1000 ! 数值小为主设备
system-priority 32667
!
! 配置 Keepalive 链路
interface mgmt0
vpc peer-link keepalive destination 10.0.0.2 source 10.0.0.1
!
! 配置 Peer-Link
interface port-channel10
switchport mode trunk
vpc peer-link
!
! 配置 vPC Member Port
interface port-channel20
switchport mode trunk
vpc 20
!
interface Ethernet1/1
channel-group 20 mode active
!
interface Ethernet1/2
channel-group 20 mode active
重要提醒:Peer-Link 必须使用独立端口通道,不能与业务流量复用。我曾经见过一个案例,Peer-Link 带宽不够,导致 vPC 域分裂,两台设备都认为自己是主设备,结果广播风暴直接打垮了整个网络。
4.3.3 vPC 高可用性设计
vPC 的高可用性体现在几个层面:
- 设备级:一台交换机故障,另一台接管所有流量
- 链路级:Peer-Link 断了,Keepalive 还在,设备不会分裂
- 转发级:vPC 成员链路故障,流量自动切换到其他链路
最佳实践:
- Keepalive 使用独立 VRF 或管理口,避免与业务网络混用
- Peer-Link 至少配置 2 条物理链路做 EtherChannel
- vPC member port 分布在不同的线卡上,避免单点故障
- 开启 vPC ARP 同步,减少故障切换时的 ARP 学习时间
4.4 故障排查:遇到问题怎么办?
链路聚合的故障,我总结下来就三类:协商失败、负载不均、vPC 分裂。
协商失败排查步骤:
- 检查两端协议模式是否匹配(Active/Active 或 Active/Passive)
- 检查物理链路状态(show interface status)
- 检查 VLAN 允许列表是否一致(show interface trunk)
- 检查两端速率和双工是否一致
负载不均排查:
- 用 show etherchannel load-balance 查看当前算法
- 用 show etherchannel port-channel 查看 Load 值分布
- 根据流量模型调整哈希因子
vPC 分裂排查:
- 检查 Keepalive 是否可达(ping 对端管理口)
- 检查 Peer-Link 状态(show vpc peer-link)
- 检查 vPC 一致性(show vpc consistency-parameters)
我的习惯:每次做完 vPC 配置,我都会用 show vpc brief 确认两台设备状态都是「up」,然后用 show vpc consistency-parameters global 检查全局参数是否一致。这一步能避免 90% 的潜在问题。
链路聚合看起来简单,但真正用好它,需要对协议、算法和架构都有深入理解。嗯,希望这些经验能帮你少走一些弯路。