day4-bond模式讲解

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接口
    “`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
“`

  1. 添加从属网卡
    bash
    # 将网卡加入bond
    nmcli con add type bond-slave ifname ens33 master bond0
    nmcli con add type bond-slave ifname ens34 master bond0

  2. 配置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

  3. 启动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 配置 (传统方法)

配置文件方式

  1. 创建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"

  2. 配置从属网卡
    “`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
“`

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

环境准备

  1. 虚拟机配置要求
    – 内存:至少2GB
    – CPU:2核心以上
    – 网卡:至少2块网卡
    – 系统:CentOS 7/8 或 Ubuntu 18.04+

  2. 网络适配器设置

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

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

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

模拟环境搭建

方案一:单虚拟机bond测试
  1. 查看网卡状态
    “`bash
    # 查看所有网卡
    ip link show

# 查看网卡详细信息
ethtool ens33
ethtool ens34
“`

  1. 创建测试用的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

  2. 测试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负载均衡测试
  1. 环境架构
    客户端VM ←→ [交换机/路由器] ←→ 服务器VM(bond配置)

  2. 服务器端配置(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

  3. 客户端测试脚本
    “`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进行网络性能测试
  1. 安装iperf3
    “`bash
    # CentOS
    yum install -y iperf3

# Ubuntu
apt install -y iperf3
“`

  1. 服务器端(bond配置的机器)
    bash
    # 启动iperf3服务
    iperf3 -s -p 5001

  2. 客户端测试
    “`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

故障模拟测试

网络故障模拟
  1. 物理链路故障模拟
    “`bash
    # 方法1:禁用网卡
    ifconfig ens33 down

# 方法2:移除网卡驱动
modprobe -r 网卡驱动名

# 方法3:使用tc添加网络延迟和丢包
tc qdisc add dev ens33 root netem delay 100ms loss 10%
“`

  1. 恢复测试
    “`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网络配置优化
  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(生产环境)
  • 说明:值越小检测越频繁,但会增加系统开销

其他重要参数

# 设置完整的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 "网络异常"

生产环境注意事项

  1. 交换机配置
    – mode 4 (802.3ad) 需要交换机支持LACP
    – 确保交换机端口配置一致

  2. 监控告警
    – 配置bond状态监控
    – 设置网卡故障告警
    – 监控网络性能指标

  3. 备份策略
    – 备份网络配置文件
    – 准备故障恢复方案
    – 定期测试故障切换

暂无评论

发送评论 编辑评论


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