day4-bond模式讲解
  1. 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)

基本配置步骤

  1. 创建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
  2. 添加从属网卡

    1. 将网卡加入bond
    nmcli con add type bond-slave ifname ens33 master bond0
    nmcli con add type bond-slave ifname ens34 master bond0
  3. 配置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
  4. 启动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 配置 (传统方法)

配置文件方式

  1. 创建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"
  2. 配置从属网卡

    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
  3. 加载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配置

环境准备

  1. 虚拟机配置要求

    • 内存:至少2GB
    • CPU:2核心以上
    • 网卡:至少2块网卡
    • 系统:CentOS 7/8 或 Ubuntu 18.04+
  2. 网络适配器设置

    在VMware中为虚拟机添加多个网络适配器:

    虚拟机设置 → 添加 → 网络适配器

    建议配置:

    • 网络适配器1:NAT模式(用于外网访问)
    • 网络适配器2:NAT模式(用于bond测试)
    • 网络适配器3:主机模式(可选,用于管理)

模拟环境搭建

方案一:单虚拟机bond测试
  1. 查看网卡状态

    1. 查看所有网卡
    ip link show
    
    1. 查看网卡详细信息
    ethtool ens33
    ethtool ens34
  2. 创建测试用的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
  3. 测试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负载均衡测试
  1. 环境架构

    客户端VM ←→ [交换机/路由器] ←→ 服务器VM(bond配置)
  2. 服务器端配置(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
  3. 客户端测试脚本

    #!/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进行网络性能测试
  1. 安装iperf3

    1. CentOS
    yum install -y iperf3
    
    1. Ubuntu
    apt install -y iperf3
  2. 服务器端(bond配置的机器)

    1. 启动iperf3服务
    iperf3 -s -p 5001
  3. 客户端测试

    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. 方法1:禁用网卡
    ifconfig ens33 down
    
    1. 方法2:移除网卡驱动
    modprobe -r 网卡驱动名
    
    1. 方法3:使用tc添加网络延迟和丢包
    tc qdisc add dev ens33 root netem delay 100ms loss 10%
  2. 恢复测试

    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网络配置优化
  1. 虚拟机网络设置

    编辑虚拟机设置 → 网络适配器 → 高级
    勾选:禁用加速功能(某些bond模式需要)
  2. 虚拟网络编辑器配置

    编辑 → 虚拟网络编辑器
    选择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 "网络异常"

生产环境注意事项

  1. 交换机配置

    • mode 4 (802.3ad) 需要交换机支持LACP
    • 确保交换机端口配置一致
  2. 监控告警

    • 配置bond状态监控
    • 设置网卡故障告警
    • 监控网络性能指标
  3. 备份策略

    • 备份网络配置文件
    • 准备故障恢复方案
    • 定期测试故障切换
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇