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接口
“`bash
# 创建bond0,模式1(主备)
nmcli con add type bond con-name bond0 ifname bond0 mode active-backup
# 或者指定模式数字
nmcli con add type bond con-name bond0 ifname bond0 mode 1
“`
-
添加从属网卡
bash
# 将网卡加入bond
nmcli con add type bond-slave ifname ens33 master bond0
nmcli con add type bond-slave ifname ens34 master bond0 -
配置IP地址
bash
# 配置静态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
“`bash
# 启动从属接口
nmcli con up bond-slave-ens33
nmcli con up bond-slave-ens34
# 启动bond接口
nmcli con up bond0
“`
验证配置
# 查看bond状态
cat /proc/net/bonding/bond0
# 查看IP配置
ip addr show bond0
# 查看连接状态
nmcli con show
CentOS 6 配置 (传统方法)
配置文件方式
-
创建bond0配置文件
bash
# /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" -
配置从属网卡
“`bash
# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
# /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
“`
- 加载bonding模块
“`bash
# 加载模块
modprobe bonding
# 重启网络服务
systemctl restart network
“`
常用管理命令
修改bond配置
# 修改bond模式
nmcli con modify bond0 mode balance-rr
# 修改监控间隔
nmcli con modify bond0 bond.options "mode=1,miimon=100"
# 重新加载配置
nmcli con up bond0
管理从属网卡
# 添加网卡到bond
nmcli con add type bond-slave ifname ens35 master bond0
# 删除从属网卡
nmcli con delete bond-slave-ens35
# 查看所有连接
nmcli con show
删除bond
# 删除所有从属接口
nmcli con delete bond-slave-ens33
nmcli con delete bond-slave-ens34
# 删除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测试
- 查看网卡状态
“`bash
# 查看所有网卡
ip link show
# 查看网卡详细信息
ethtool ens33
ethtool ens34
“`
-
创建测试用的bond配置
bash
# 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故障切换
“`bash
# 启动bond
nmcli con up test-bond
# 查看当前活动网卡
cat /proc/net/bonding/bond0
# 模拟网卡故障(禁用当前活动网卡)
ifconfig ens33 down
# 再次查看bond状态,应该切换到ens34
cat /proc/net/bonding/bond0
# 恢复网卡
ifconfig ens33 up
“`
方案二:多虚拟机bond负载均衡测试
-
环境架构
客户端VM ←→ [交换机/路由器] ←→ 服务器VM(bond配置) -
服务器端配置(bond mode 0)
bash
# 创建负载均衡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 -
客户端测试脚本
“`bash
#!/bin/bash
# 创建测试文件
dd if=/dev/zero of=test_file bs=1M count=100
# 持续传输测试
for i in {1..10}; do
echo “传输测试 $i”
scp test_file root@192.168.1.100:/tmp/test_$i &
done
# 监控网络流量
iftop -i bond0
“`
性能测试工具
使用iperf3进行网络性能测试
- 安装iperf3
“`bash
# CentOS
yum install -y iperf3
# Ubuntu
apt install -y iperf3
“`
-
服务器端(bond配置的机器)
bash
# 启动iperf3服务
iperf3 -s -p 5001 -
客户端测试
“`bash
# 测试TCP性能
iperf3 -c 192.168.1.100 -p 5001 -t 60
# 测试UDP性能
iperf3 -c 192.168.1.100 -p 5001 -u -t 60
# 并发连接测试
iperf3 -c 192.168.1.100 -p 5001 -P 4 -t 60
“`
网络监控脚本
#!/bin/bash
# bond_monitor.sh - bond状态监控脚本
BOND_INTERFACE="bond0"
LOG_FILE="/var/log/bond_monitor.log"
while true; do
echo "=== $(date) ===" >> $LOG_FILE
# 检查bond状态
if [ -f /proc/net/bonding/$BOND_INTERFACE ]; then
cat /proc/net/bonding/$BOND_INTERFACE >> $LOG_FILE
# 检查活动slave
ACTIVE_SLAVE=$(grep "Currently Active Slave" /proc/net/bonding/$BOND_INTERFACE | awk '{print $4}')
echo "当前活动网卡: $ACTIVE_SLAVE" >> $LOG_FILE
# 网络流量统计
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
故障模拟测试
网络故障模拟
- 物理链路故障模拟
“`bash
# 方法1:禁用网卡
ifconfig ens33 down
# 方法2:移除网卡驱动
modprobe -r 网卡驱动名
# 方法3:使用tc添加网络延迟和丢包
tc qdisc add dev ens33 root netem delay 100ms loss 10%
“`
- 恢复测试
“`bash
# 恢复网卡
ifconfig ens33 up
# 清除tc规则
tc qdisc del dev ens33 root
“`
自动化故障切换测试
#!/bin/bash
# failover_test.sh - 自动故障切换测试
BOND_INTERFACE="bond0"
TEST_IP="8.8.8.8"
echo "开始故障切换测试..."
# 获取当前活动slave
get_active_slave() {
grep "Currently Active Slave" /proc/net/bonding/$BOND_INTERFACE | awk '{print $4}'
}
# 连通性测试
connectivity_test() {
ping -c 3 $TEST_IP > /dev/null 2>&1
return $?
}
INITIAL_SLAVE=$(get_active_slave)
echo "初始活动网卡: $INITIAL_SLAVE"
# 连通性检查
if connectivity_test; then
echo "初始连通性正常"
else
echo "初始连通性异常,请检查网络配置"
exit 1
fi
# 禁用当前活动网卡
echo "禁用网卡 $INITIAL_SLAVE"
ifconfig $INITIAL_SLAVE down
# 等待故障切换
sleep 5
# 检查新的活动网卡
NEW_SLAVE=$(get_active_slave)
echo "故障切换后活动网卡: $NEW_SLAVE"
# 连通性测试
if connectivity_test; then
echo "故障切换成功,网络连通正常"
else
echo "故障切换失败,网络连通异常"
fi
# 恢复网卡
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(生产环境)
- 说明:值越小检测越频繁,但会增加系统开销
其他重要参数
# 设置完整的bond选项
nmcli con modify bond0 bond.options "mode=1,miimon=100,updelay=200,downdelay=200"
- updelay:网卡启动后延迟多久才加入bond(毫秒)
- downdelay:网卡故障后延迟多久才从bond移除(毫秒)
- primary:指定主网卡(mode 1时有效)
故障排查
常见问题及解决方法
1. Bond无法启动
# 检查bonding模块
lsmod | grep bonding
# 手动加载模块
modprobe bonding
# 查看系统日志
journalctl -u NetworkManager -f
2. 故障切换不工作
# 检查miimon设置
cat /proc/net/bonding/bond0 | grep "MII Polling Interval"
# 检查网卡物理状态
ethtool ens33 | grep "Link detected"
# 手动测试故障切换
ifconfig ens33 down
3. 性能问题
# 检查bond模式
cat /proc/net/bonding/bond0 | grep "Bonding Mode"
# 查看网卡中断分布
cat /proc/interrupts | grep eth
# 检查网卡队列
ethtool -l ens33
监控脚本
#!/bin/bash
# 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状态监控
– 设置网卡故障告警
– 监控网络性能指标 -
备份策略
– 备份网络配置文件
– 准备故障恢复方案
– 定期测试故障切换