4. 链路聚合与服务器网卡绑定

在服务器接入网络中,单条物理链路既是带宽瓶颈,也是单点故障源。链路聚合(Link Aggregation)通过把多条物理链路捆绑成一条逻辑链路,同时解决两个问题:带宽叠加与链路冗余。在交换机侧,这由 H3C Comware 的 link-aggregation 功能实现;在服务器侧,则由 Linux bonding、Windows Teaming 或网卡厂商驱动完成。两端必须使用一致的聚合模式,否则会出现链路震荡、流量丢弃甚至聚合口无法 UP 的情况。

一、两种聚合模式的核心差异

Comware 支持静态聚合与动态聚合两类。静态聚合不运行协商协议,只要成员口的速率、双工、VLAN 等属性一致,且至少有一条成员链路 UP,聚合口即进入转发状态。它的优点是配置简单、启动快;缺点是缺乏对端一致性校验,若对端配置错误,本端无法感知,容易形成环路或黑洞。

动态聚合基于 IEEE 802.3ad 的 LACP(Link Aggregation Control Protocol)。两端通过 LACPDU 报文交换系统优先级、系统 MAC、端口优先级、端口号与操作状态等参数,协商出哪些链路可以加入聚合组。只有双方都确认的链路才被置为 Selected 状态并转发流量,其余为 Unselected 备用。LACP 还支持主动/被动模式:主动端周期性发送 LACPDU,被动端只在收到对端报文后响应。生产环境通常两端都配为主动,以便快速检测链路异常。

服务器侧的对应关系需要特别注意:Linux bonding 的 mode=4(802.3ad)对应交换机动态 LACP;mode=0(balance-rr)或 mode=2(balance-xor)通常对应交换机静态聚合。若服务器用 mode=4 而交换机配静态聚合,LACP 报文无人应答,bond 无法进入正常工作状态。

静态聚合与动态LACP聚合对照 静态聚合(Static) 交换机:interface Bridge-Aggregation 1 link-aggregation mode static 成员口:GE1/0/1、GE1/0/2 属性一致即加入,无协议协商 对端不一致时无法自动感知 服务器:bond mode=0 / mode=2 balance-rr 或 balance-xor 无需 LACP 报文交互 适用场景 对端设备不支持LACP 拓扑简单、追求快速上线 动态聚合(LACP 802.3ad) 交换机:interface Bridge-Aggregation 1 link-aggregation mode dynamic 成员口:GE1/0/1、GE1/0/2 LACPDU 协商,Selected/Unselected 双方确认后才转发流量 服务器:bond mode=4 802.3ad,lacp_rate=fast xmit_hash_policy=layer3+4 适用场景 服务器双上行、核心汇聚互联 需要故障快速切换与一致性校验 对比

二、交换机侧配置要点

无论静态还是动态,交换机侧的基本流程一致:创建聚合接口、设置聚合模式、把物理口加入聚合组。以下以 H3C S5560 系列为例,给出动态 LACP 的配置片段:

interface Bridge-Aggregation 1
 link-aggregation mode dynamic
 port link-type trunk
 port trunk permit vlan 10 20 30
#
interface GigabitEthernet 1/0/1
 port link-aggregation group 1
#
interface GigabitEthernet 1/0/2
 port link-aggregation group 1

静态聚合只需把 link-aggregation mode dynamic 改为 static 或直接省略(Comware 默认即为静态)。配置完成后,用 display link-aggregation verbose 查看聚合状态。动态聚合下,成员口应显示为 S(Selected);若显示 U(Unselected),说明 LACP 协商未通过,常见原因是两端模式不匹配、端口属性不一致或对端未启用 LACP。

还有一个容易被忽略的细节:聚合口的成员口数量与哈希算法共同决定实际带宽。Comware 默认采用基于源/目的 MAC 或 IP 的哈希,同一台服务器与同一台存储之间的单条 TCP 流只会走其中一条成员链路,因此“4 条千兆聚合”并不等于单流 4Gbps,而是多流场景下总带宽可达 4Gbps。若服务器与存储之间是单流大流量,需要调整哈希策略或使用多路径。

三、服务器侧 bonding/teaming 配置

以 Linux 为例,动态 LACP 对应的 bond 配置如下(以 CentOS/RHEL 的 nmcli 为例):

nmcli con add type bond con-name bond0 ifname bond0 \
  mode 802.3ad miimon 100 lacp-rate fast \
  xmit_hash_policy layer3+4
nmcli con add type bond-slave ifname ens1f0 master bond0
nmcli con add type bond-slave ifname ens1f1 master bond0
nmcli con up bond0

关键参数说明:miimon 100 表示每 100ms 检测一次链路状态;lacp-rate fast 让 LACPDU 以 1 秒间隔发送,故障切换更快;xmit_hash_policy layer3+4 按 IP 和端口做哈希,适合服务器与存储之间多连接并发的场景。Windows Server 则通过“服务器管理器 → 网卡组合”创建 Team,模式选择“LACP”,并确保与交换机侧一致。

服务器侧 bond 的 mode=4 必须与交换机 link-aggregation mode dynamic 配对;若交换机是静态聚合,服务器应使用 mode=0 或 mode=2。两端模式错配是链路聚合最常见的故障原因。

四、验证与排障

配置完成后,建议按以下顺序验证:

  • 交换机侧执行 display link-aggregation verbose,确认所有成员口为 Selected,聚合口状态为 UP。
  • 服务器侧执行 cat /proc/net/bonding/bond0,查看 Bonding Mode、Currently Active Slave、MII Status 以及各 slave 的 link status。
  • 用 ethtool bond0 确认 Speed 为聚合后的速率(如 2000Mb/s 表示双千兆聚合)。
  • 拔掉一条成员链路,观察 bond 是否在 miimon 周期内切换,业务是否中断。
  • 用 iperf3 多流并发测试总吞吐,验证带宽叠加效果。

若聚合口无法 UP,优先检查:成员口是否被其他配置占用、两端速率/双工是否一致、VLAN 放通是否匹配、LACP 主动/被动角色是否至少有一端为主动。静态聚合下若出现流量黑洞,重点排查对端是否也做了聚合,以及哈希结果是否把流量引向了错误的成员口。

链路聚合不是“配了就一定生效”。动态 LACP 需要两端协议参数匹配,静态聚合需要两端手工保持一致。上线前务必用拔纤测试和吞吐测试验证冗余与带宽叠加是否真正达成。