背景

在企业服务器环境中,单一网卡带宽有限且存在单点故障风险。Linux 内核提供了 bonding 驱动,通过将多个物理网卡聚合为逻辑接口,实现带宽叠加和故障切换。本文详细介绍七种绑定模式的工作原理、配置步骤及故障切换验证方法。

绑定模式概述

Linux bonding 支持七种模式,归纳为两类:

负载均衡模式(需交换机配合):

  • mode 1(active-backup):主备模式,一主一备
  • mode 2(balance-xor):基于源MAC的负载均衡
  • mode 4(802.3ad):LACP动态链路聚合,需交换机启用LACP
  • mode 5/6:基于流量的负载均衡(mode 5=基于源IP,mode 6=基于轮询)

高可用模式(交换机无特殊要求):

  • mode 0(balance-rr):轮询负载均衡,缺点是数据包可能乱序
  • mode 3(broadcast):广播模式,所有从机都发送相同数据

生产环境最常用的是 mode 1(主动备份)和 mode 4(LACP)。

配置步骤

1. 加载Bonding模块

1
2
3
4
5
# 临时加载
modprobe bonding

# 永久加载,编辑 /etc/modprobe.d/bonding.conf
echo "alias bond0 bonding" > /etc/modprobe.d/bonding.conf

2. 创建Bond接口配置文件

编辑 /etc/sysconfig/network-scripts/ifcfg-bond0

1
2
3
4
5
6
7
8
9
10
11
DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1"
# mode=1: 主动备份模式
# miimon=100: 每100ms检查链路状态
# fail_over_mac=1: 故障时新主节点MAC随切换变化,防止ARP缓存问题
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8

3. 配置成员网卡

编辑成员网卡配置,例如 ifcfg-eth0

1
2
3
4
5
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes

同样配置 eth1,两个网卡都指向同一个 bond0。

4. 重启网络服务

1
systemctl restart network

5. 验证绑定状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看bonding信息
cat /proc/net/bonding/bond0

# 示例输出:
Ethernet Channel Bonding Driver: v3.7.1
Bonding Mode: fault-tolerance (active-backup) # mode 1
Primary Slave: eth0 (primary)
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0

LACP模式配置(mode 4)

如果采用 mode 4,需在交换机侧启用 LACP。以 Cisco 交换机为例:

1
2
3
interface range ethernet 1/0/1 -2
channel-group 1 mode active # 启用LACP
switchport mode trunk

服务器侧配置:

1
2
3
BONDING_OPTS="mode=4 miimon=100 lacp_rate=1 xmit_hash_policy=layer2+3"
# lacp_rate=1: 快速协商(每秒一次),0为慢速(每30秒一次)
# xmit_hash_policy: 流量分布策略,layer2+3 兼顾MAC和IP层

故障切换验证

人工触发故障

1
2
3
4
5
6
7
# 模拟链路断开
ip link set eth0 down

# 检查bond状态
cat /proc/net/bonding/bond0

# 预期:Currently Active Slave 变为 eth1

恢复验证

1
2
3
4
5
# 恢复链路
ip link set eth0 up

# 检查是否自动恢复为主
cat /proc/net/bonding/bond0 | grep -E "Primary|Slave"

监控脚本示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
BOND=bond0
ALERT_EMAIL="ops@example.com"

CHECK=$(cat /proc/net/bonding/$BOND | grep "Currently Active Slave")
EXPECTED_SLAVE="eth0"

if echo "$CHECK" | grep -q "$EXPECTED_SLAVE"; then
echo "Bond正常,当前活跃: $EXPECTED_SLAVE"
else
echo "Bond故障,切换至备用网卡"
# 触发告警
echo "Bond故障告警" | mail -s "Bonding故障" $ALERT_EMAIL
fi

常见故障排查

问题 原因 解决方法
无流量 bond模块未加载 `modprobe bonding; lsmod
频繁切换 miimon值过低 增大至200-500ms
交换机侧端口ERR 端口模式不匹配 确认双工和速率协商一致
无法ping网关 ARP问题 启用 fail_over_mac=1

总结

网络绑定是提升服务器网络可用性的基础手段。mode 1 适合简单场景,mode 4 适合需要带宽叠加的高吞吐场景。配置时注意成员网卡速率一致,交换机端口配置匹配,并在部署后进行故障切换演练确保高可用真正生效。