- Linux Bond网卡绑定配置指南
Bond概述
Linux Bond(网卡绑定)是将多个网络接口绑定成一个逻辑接口,提供负载均衡和高可用性的网络解决方案。
Bond模式详解
| Mode | 名称 | 特点 | 适用场景 | 交换机要求 |
|---|---|---|---|---|
| 0 | balance-rr | 轮询负载均衡 | 内网高带宽 | 无 |
| 1 | active-backup | 主备模式 | 生产环境推荐 | 无 |
| 2 | balance-xor | XOR负载均衡 | 特定网络架构 | 无 |
| 3 | broadcast | 广播模式 | 很少使用 | 无 |
| 4 | 802.3ad | LACP聚合 | 企业级应用 | 支持LACP |
| 5 | balance-tlb | 发送负载均衡 | 较少使用 | 无 |
| 6 | balance-alb | 自适应负载均衡 | 高性能需求 | 无 |
常用模式说明
Mode 0 (balance-rr) – 轮询模式
- 工作原理:数据包轮流从各网卡发送
- 优点:带宽翻倍,负载均衡
- 缺点:可能导致数据包乱序
- 推荐场景:内网文件传输、备份
Mode 1 (active-backup) – 主备模式 ⭐
- 工作原理:只有一个网卡工作,故障时自动切换
- 优点:稳定可靠,兼容性好
- 缺点:带宽无法叠加
- 推荐场景:生产环境首选
Mode 4 (802.3ad) – LACP聚合
- 工作原理:遵循IEEE 802.3ad标准
- 优点:带宽叠加,标准化
- 缺点:需要交换机支持
- 推荐场景:企业级网络环境
Mode 6 (balance-alb) – 自适应负载均衡
- 工作原理:发送和接收都做负载均衡
- 优点:无需交换机支持,性能好
- 缺点:配置复杂
- 推荐场景:高性能服务器
配置方法
CentOS 7/8 配置 (推荐使用nmcli)
基本配置步骤
-
创建bond接口
1. 创建bond0,模式1(主备) nmcli con add type bond con-name bond0 ifname bond0 mode active-backup 1. 或者指定模式数字 nmcli con add type bond con-name bond0 ifname bond0 mode 1 -
添加从属网卡
1. 将网卡加入bond nmcli con add type bond-slave ifname ens33 master bond0 nmcli con add type bond-slave ifname ens34 master bond0 -
配置IP地址
1. 配置静态IP nmcli con modify bond0 ipv4.addresses 192.168.1.100/24 ipv4.method manual nmcli con modify bond0 ipv4.gateway 192.168.1.1 nmcli con modify bond0 ipv4.dns 8.8.8.8 -
启动bond
1. 启动从属接口 nmcli con up bond-slave-ens33 nmcli con up bond-slave-ens34 1. 启动bond接口 nmcli con up bond0
验证配置
1. 查看bond状态
cat /proc/net/bonding/bond0
1. 查看IP配置
ip addr show bond0
1. 查看连接状态
nmcli con show
CentOS 6 配置 (传统方法)
配置文件方式
-
创建bond0配置文件
1. /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 BONDING_OPTS="mode=1 miimon=100" -
配置从属网卡
1. /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none ONBOOT=yes MASTER=bond0 SLAVE=yes 1. /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 BOOTPROTO=none ONBOOT=yes MASTER=bond0 SLAVE=yes -
加载bonding模块
1. 加载模块 modprobe bonding 1. 重启网络服务 systemctl restart network
常用管理命令
修改bond配置
1. 修改bond模式
nmcli con modify bond0 mode balance-rr
1. 修改监控间隔
nmcli con modify bond0 bond.options "mode=1,miimon=100"
1. 重新加载配置
nmcli con up bond0
管理从属网卡
1. 添加网卡到bond
nmcli con add type bond-slave ifname ens35 master bond0
1. 删除从属网卡
nmcli con delete bond-slave-ens35
1. 查看所有连接
nmcli con show
删除bond
1. 删除所有从属接口
nmcli con delete bond-slave-ens33
nmcli con delete bond-slave-ens34
1. 删除bond接口
nmcli con delete bond0
虚拟机网络环境模拟
VMware虚拟机bond配置
环境准备
-
虚拟机配置要求
- 内存:至少2GB
- CPU:2核心以上
- 网卡:至少2块网卡
- 系统:CentOS 7/8 或 Ubuntu 18.04+
-
网络适配器设置
在VMware中为虚拟机添加多个网络适配器:
虚拟机设置 → 添加 → 网络适配器
建议配置:
- 网络适配器1:NAT模式(用于外网访问)
- 网络适配器2:NAT模式(用于bond测试)
- 网络适配器3:主机模式(可选,用于管理)
模拟环境搭建
方案一:单虚拟机bond测试
-
查看网卡状态
1. 查看所有网卡 ip link show 1. 查看网卡详细信息 ethtool ens33 ethtool ens34 -
创建测试用的bond配置
1. CentOS 7/8 使用nmcli nmcli con add type bond con-name test-bond ifname bond0 mode active-backup nmcli con add type bond-slave ifname ens33 master test-bond nmcli con add type bond-slave ifname ens34 master test-bond nmcli con modify test-bond ipv4.addresses 192.168.100.10/24 ipv4.method manual -
测试bond故障切换
1. 启动bond nmcli con up test-bond 1. 查看当前活动网卡 cat /proc/net/bonding/bond0 1. 模拟网卡故障(禁用当前活动网卡) ifconfig ens33 down 1. 再次查看bond状态,应该切换到ens34 cat /proc/net/bonding/bond0 1. 恢复网卡 ifconfig ens33 up
方案二:多虚拟机bond负载均衡测试
-
环境架构
客户端VM ←→ [交换机/路由器] ←→ 服务器VM(bond配置) -
服务器端配置(bond mode 0)
1. 创建负载均衡bond nmcli con add type bond con-name lb-bond ifname bond0 mode balance-rr nmcli con add type bond-slave ifname ens33 master lb-bond nmcli con add type bond-slave ifname ens34 master lb-bond nmcli con modify lb-bond ipv4.addresses 192.168.1.100/24 ipv4.method manual nmcli con up lb-bond -
客户端测试脚本
#!/bin/bash 1. 创建测试文件 dd if=/dev/zero of=test_file bs=1M count=100 1. 持续传输测试 for i in {1..10}; do echo "传输测试 $i" scp test_file root@192.168.1.100:/tmp/test_$i & done 1. 监控网络流量 iftop -i bond0
性能测试工具
使用iperf3进行网络性能测试
-
安装iperf3
1. CentOS yum install -y iperf3 1. Ubuntu apt install -y iperf3 -
服务器端(bond配置的机器)
1. 启动iperf3服务 iperf3 -s -p 5001 -
客户端测试
1. 测试TCP性能 iperf3 -c 192.168.1.100 -p 5001 -t 60 1. 测试UDP性能 iperf3 -c 192.168.1.100 -p 5001 -u -t 60 1. 并发连接测试 iperf3 -c 192.168.1.100 -p 5001 -P 4 -t 60
网络监控脚本
#!/bin/bash
1. bond_monitor.sh - bond状态监控脚本
BOND_INTERFACE="bond0"
LOG_FILE="/var/log/bond_monitor.log"
while true; do
echo "=== $(date) ===" >> $LOG_FILE
1. 检查bond状态
if [ -f /proc/net/bonding/$BOND_INTERFACE ]; then
cat /proc/net/bonding/$BOND_INTERFACE >> $LOG_FILE
1. 检查活动slave
ACTIVE_SLAVE=$(grep "Currently Active Slave" /proc/net/bonding/$BOND_INTERFACE | awk '{print $4}')
echo "当前活动网卡: $ACTIVE_SLAVE" >> $LOG_FILE
1. 网络流量统计
RX_BYTES=$(cat /sys/class/net/$BOND_INTERFACE/statistics/rx_bytes)
TX_BYTES=$(cat /sys/class/net/$BOND_INTERFACE/statistics/tx_bytes)
echo "接收字节: $RX_BYTES, 发送字节: $TX_BYTES" >> $LOG_FILE
else
echo "Bond接口 $BOND_INTERFACE 不存在" >> $LOG_FILE
fi
echo "" >> $LOG_FILE
sleep 10
done
故障模拟测试
网络故障模拟
-
物理链路故障模拟
1. 方法1:禁用网卡 ifconfig ens33 down 1. 方法2:移除网卡驱动 modprobe -r 网卡驱动名 1. 方法3:使用tc添加网络延迟和丢包 tc qdisc add dev ens33 root netem delay 100ms loss 10% -
恢复测试
1. 恢复网卡 ifconfig ens33 up 1. 清除tc规则 tc qdisc del dev ens33 root
自动化故障切换测试
#!/bin/bash
1. failover_test.sh - 自动故障切换测试
BOND_INTERFACE="bond0"
TEST_IP="8.8.8.8"
echo "开始故障切换测试..."
1. 获取当前活动slave
get_active_slave() {
grep "Currently Active Slave" /proc/net/bonding/$BOND_INTERFACE | awk '{print $4}'
}
1. 连通性测试
connectivity_test() {
ping -c 3 $TEST_IP > /dev/null 2>&1
return $?
}
INITIAL_SLAVE=$(get_active_slave)
echo "初始活动网卡: $INITIAL_SLAVE"
1. 连通性检查
if connectivity_test; then
echo "初始连通性正常"
else
echo "初始连通性异常,请检查网络配置"
exit 1
fi
1. 禁用当前活动网卡
echo "禁用网卡 $INITIAL_SLAVE"
ifconfig $INITIAL_SLAVE down
1. 等待故障切换
sleep 5
1. 检查新的活动网卡
NEW_SLAVE=$(get_active_slave)
echo "故障切换后活动网卡: $NEW_SLAVE"
1. 连通性测试
if connectivity_test; then
echo "故障切换成功,网络连通正常"
else
echo "故障切换失败,网络连通异常"
fi
1. 恢复网卡
echo "恢复网卡 $INITIAL_SLAVE"
ifconfig $INITIAL_SLAVE up
sleep 5
echo "测试完成"
虚拟机特殊配置
VMware网络配置优化
-
虚拟机网络设置
编辑虚拟机设置 → 网络适配器 → 高级 勾选:禁用加速功能(某些bond模式需要) -
虚拟网络编辑器配置
编辑 → 虚拟网络编辑器 选择VMnet网络 → 取消DHCP → 设置子网IP
KVM/QEMU配置
<!-- 虚拟机网络配置示例 -->
<interface type='bridge'>
<mac address='52:54:00:xx:xx:01'/>
<source bridge='br0'/>
<model type='virtio'/>
</interface>
<interface type='bridge'>
<mac address='52:54:00:xx:xx:02'/>
<source bridge='br0'/>
<model type='virtio'/>
</interface>
重要参数说明
miimon参数
- 作用:链路监测间隔(毫秒)
- 推荐值:100ms(生产环境)
- 说明:值越小检测越频繁,但会增加系统开销
其他重要参数
1. 设置完整的bond选项
nmcli con modify bond0 bond.options "mode=1,miimon=100,updelay=200,downdelay=200"
- updelay:网卡启动后延迟多久才加入bond(毫秒)
- downdelay:网卡故障后延迟多久才从bond移除(毫秒)
- primary:指定主网卡(mode 1时有效)
故障排查
常见问题及解决方法
1. Bond无法启动
1. 检查bonding模块
lsmod | grep bonding
1. 手动加载模块
modprobe bonding
1. 查看系统日志
journalctl -u NetworkManager -f
2. 故障切换不工作
1. 检查miimon设置
cat /proc/net/bonding/bond0 | grep "MII Polling Interval"
1. 检查网卡物理状态
ethtool ens33 | grep "Link detected"
1. 手动测试故障切换
ifconfig ens33 down
3. 性能问题
1. 检查bond模式
cat /proc/net/bonding/bond0 | grep "Bonding Mode"
1. 查看网卡中断分布
cat /proc/interrupts | grep eth
1. 检查网卡队列
ethtool -l ens33
监控脚本
#!/bin/bash
1. bond_status.sh - 快速检查bond状态
BOND_NAME="bond0"
echo "=== Bond基本信息 ==="
cat /proc/net/bonding/$BOND_NAME | head -20
echo -e "\n=== 当前活动网卡 ==="
grep "Currently Active Slave" /proc/net/bonding/$BOND_NAME
echo -e "\n=== 网卡状态 ==="
grep "Slave Interface" /proc/net/bonding/$BOND_NAME -A 2
echo -e "\n=== 网络连通性测试 ==="
ping -c 3 8.8.8.8 > /dev/null && echo "网络正常" || echo "网络异常"
生产环境注意事项
-
交换机配置
- mode 4 (802.3ad) 需要交换机支持LACP
- 确保交换机端口配置一致
-
监控告警
- 配置bond状态监控
- 设置网卡故障告警
- 监控网络性能指标
-
备份策略
- 备份网络配置文件
- 准备故障恢复方案
- 定期测试故障切换