端口聚合到底有什么用?

机房上架一台新服务器,网卡是双口的,运维顺手把两根网线插到交换机的两个口上。过两天业务反馈下载速度没变化,一查,两个口都在转发,但流量只跑满了一个。问题就出在没有做端口聚合。

端口聚合(Link Aggregation),也叫链路聚合、网卡绑定、LACP,是把多条物理链路捆成一条逻辑链路的技术。它的作用不只是"变快",很多场景下真正救命的是另外两点。

一、带宽叠加:单条链路跑满时的出路

千兆网卡的实际吞吐上限在 940Mbps 左右,做文件服务器或者备份节点时很容易顶到天花板。把两条千兆口聚合成一条逻辑链路,总带宽变成 2Gbps。

这里有个容易被误解的地方:带宽叠加是按流分配的,不是按包分配的。一条 TCP 连接只会走其中一条物理链路,所以单个大文件传输的速度不会翻倍。只有多个并发连接(比如多个客户端同时访问、多线程下载)才会分摊到不同链路上,总带宽才会叠加。

做 iperf3 测试时用单线程只能测出 940Mbps,开 -P 8 多线程才能看到 1.8Gbps 左右,就是这个原因。

二、冗余:断一根线业务不中断

这是端口聚合最实用的价值。聚合组里的成员口互为备份,某根网线被老鼠咬断、某个光模块烧了、某个交换机端口坏了,流量会自动切换到剩下的链路,上层业务基本无感知。

如果要真正实现跨设备冗余,需要做堆叠或者 M-LAG(跨设备链路聚合),把两台交换机当成一台。单台交换机上做聚合,交换机本身挂了还是全断。

三、减少交换机间的瓶颈

接入交换机和核心交换机之间,往往要跑几十个终端的流量。单条千兆上行在高峰期会堵,做 4 口聚合之后上行变成 4Gbps,同时还有冗余能力。这是园区网里最常见的用法。

四、配置时踩着过的坑

  • 两端配置必须匹配:一端静态聚合,另一端 LACP 动态聚合,通常起不来。要么两边都 static,要么两边都 LACP。
  • LACP 有主动被动之分:active 主动发 LACPDU,passive 只在收到后才回。两边都配 passive 会一直协商不上。
  • 成员口的速率、双工、VLAN 必须一致:速率一台千兆一台百兆,或者一个 trunk 一个 access,聚合组会拒绝加入。
  • 服务器侧要选对模式:Linux bond 有 mode 0 到 mode 6,mode 4(802.3ad)对应 LACP;mode 6(balance-alb)不需要交换机支持,但只对出方向有效。
  • 跨板卡、跨堆叠成员要确认支持:老设备可能限制成员口必须落在同一块板卡上。

五、Windows 和 Linux 上的做法

Windows Server 从 2012 起自带 NIC Teaming,在服务器管理器里就能建组,模式选"动态"或"LACP",具体看交换机侧配置。

Linux 用 bonding 驱动:

# /etc/sysconfig/network-scripts/ifcfg-bond0
BONDING_OPTS="mode=4 miimon=100 lacp_rate=fast xmit_hash_policy=layer3+4"

xmit_hash_policy 建议用 layer3+4,按源目 IP 加端口做哈希,流量分布比 layer2 均匀得多。

如果交换机不支持 LACP,可以用 balance-rr(mode 0)做简单轮询,但对端设备可能因乱序丢包,实际很少用。生产环境推荐 mode 4 或 mode 1(主备)。

六、什么时候不需要做

如果只是单台办公电脑,或者交换机上还有大量空闲端口、带宽早就够用,做聚合的收益基本为零,反而多一层故障点。聚合本质上是解决"带宽瓶颈 + 单点故障"这两个问题,没有这两个问题就不用折腾。