1. 什么是Bond聚合链路?
Bonding 是 Linux 提供的一种网络聚合技术,可以将多块物理网卡绑定成一个逻辑网卡(称为 Bond 接口)
Bond接口有以下几个作用:
- 高可用性:实现故障切换,某个网卡故障后,流量会自动切换到其他正常网卡。
- 负载均衡:将流量分散到多个物理网卡中,增加网络吞吐量。
- 提高带宽:通过多个链路并行传输,提高总带宽。
2. Bond的工作模式
Bonding 的行为由其工作模式(mode)决定
2.1 各个模式说明
模式编号 | 模式名称 | 工作机制 | 特点及适用场景 |
---|---|---|---|
mode=0 | 轮询负载均衡 | 数据包轮流通过每个接口发送,需要交换机支持,可能导致数据包乱序。 | 适用于高带宽但对交换机要求较高的场景。 |
mode=1 | 主备模式 | 主接口处理所有流量,故障时切换到备接口,无需交换机支持。 | 适用于高可用性需求的场景,如关键业务服务器 |
mode=2 | XOR 模式 | 基于 MAC 地址或 IP 地址的散列算法分配流量,需交换机支持 IEEE 802.3ad 标准。 | 适用于需稳定分配流量的大型网络环境。 |
mode=3 | 广播模式 | 数据包广播到所有接口,实现高容错。 | 适用于需要所有路径冗余的特殊场景,如广播网络。 |
mode=4 | 动态链路聚合(802.3ad/LACP) | 基于 IEEE 802.3ad 标准,需交换机支持 LACP 协议,提供动态链路聚合和负载均衡。 | 适用于数据中心或高性能网络需求场景。 |
mode=5 | 发送负载均衡 | 根据负载动态调整传输方向,无需交换机支持,但接收流量固定使用主接口。 | 适用于对性能和兼容性均有要求但交换机不支持聚合的环境。 |
mode=6 | 发送/接收负载均衡 | 在 mode=5 基础上增加接收流量的负载均衡,需交换机支持 ARP 协议。 | 适用于无需复杂交换机配置、对负载均衡有要求的场景。 |
2.2 模式选择指南
- 高可用性:选择 mode=1(主备模式)。
- 高性能与负载均衡:选择 mode=4和mode=0
- 无需交换机支持的负载均衡:选择 mode=6
- 特殊广播需求:选择 mode=3。
【温馨提示】
- mode 1、5、6不需要交换机设置
- mode 0、2、3、4需要交换机设置
3. Bond配置实例
下面以配置bond0为例,其他模式差不多的。
3.1 创建bond虚拟接口配置文件
创建bond0配置文件模式为mode=0
vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
TYPE=Bond
BONDING_MASTER=yes
BOOTPROTO=static
IPADDR=10.0.0.25
NETMASK=255.255.255.0
GATEWAY=10.0.0.2
ONBOOT=yes
BONDING_OPTS="mode=0 miimon=100 updelay=200 downdelay=200"
3.2 修改物理接口配置
将 ens33 和 ens37 绑定到 bond0:
编辑网卡1: /etc/sysconfig/network-scripts/ifcfg-ens33:
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
SLAVE=yes
MASTER=bond0
编辑网卡2: /etc/sysconfig/network-scripts/ifcfg-eth1:
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
NAME="ens37"
DEVICE="ens37"
ONBOOT="yes"
SLAVE=yes
MASTER=bond0
3.3 重启网络服务
systemctl restart network
3.4 验证bond配置
查看 Bonding 状态:
# 查看bond模式
cat /sys/class/net/bond1/bonding/mode
# 查看bond状态信息
cat /proc/net/bonding/bond0
可以看到已经完成了聚合。
4. Bond参数详解
4.1 常用参数
miimon
:链路监控间隔(单位:ms)。例如,miimon=100 表示每 100ms 检查链路状态。updelay 和 downdelay
:链路启用或禁用的延迟时间(单位:ms)。primary
:在 mode=1 下指定主接口。arp_interval
:设置 ARP 检测间隔(单位:ms)。arp_ip_target
:指定用于 ARP 检测的目标 IP 地址。
4.2 参数优化建议
- 链路检测间隔:miimon 值设置过低可能导致系统负载增加,建议设置为 100-200ms。
- 主备切换延迟:通过设置 updelay 和 downdelay,避免频繁切换。
5. 调试与管理
5.1 查看 Bonding 状态
通过以下命令查看 Bonding 配置和链路状态:
cat /proc/net/bonding/bond0
5.2 调试常见问题
Bonding 接口无法启动
- 检查 bonding 模块是否加载:
lsmod | grep bonding。
- 检查配置文件的语法是否正确。
主备切换失败
- 确保链路检测(miimon 或 ARP)配置正确。
- 检查物理接口状态:
ip link show dev ethX。
- 负载均衡不生效
- 在 mode=4 下,确保交换机配置了 LACP。
6 自动化配置脚本
以下是一个自动化脚本,用于一键配置 Bonding 接口:
#!/bin/bash
BOND_NAME="bond0"
MODE="1"
IPADDR="192.168.1.100"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
SLAVES=("eth0" "eth1")
# 加载 bonding 模块
modprobe bonding
# 创建 Bond 接口
nmcli connection add type bond ifname $BOND_NAME con-name $BOND_NAME mode $MODE
nmcli connection modify $BOND_NAME ipv4.addresses "$IPADDR/$NETMASK"
nmcli connection modify $BOND_NAME ipv4.gateway $GATEWAY
nmcli connection modify $BOND_NAME ipv4.method manual
# 绑定物理接口
for SLAVE in "${SLAVES[@]}"; do
nmcli connection add type bond-slave ifname $SLAVE master $BOND_NAME
done
# 启动接口
nmcli connection up $BOND_NAME
echo "Bonding configuration completed."
如果使用上面的脚本之前需要在测试环境操作。测试通过再上生产环境操作。