服务器网络冗余是生产环境的基本要求。单网卡故障会导致服务中断,存储链路单点失效会造成数据不可访问。Linux Bonding驱动通过将多块物理网卡绑定为一个逻辑接口,提供链路聚合、故障切换和负载均衡能力。结合多路径存储配置,可以构建高可用的服务器网络与存储架构。
Bonding七种工作模式与适用场景对比
Bonding驱动提供7种工作模式,不同模式在冗余能力、负载均衡方式和交换机要求上差异显著:
Mode 0 (balance-rr):轮询负载均衡。数据包按顺序依次从每张网卡发出,提供负载均衡和容错能力。要求交换机支持静态聚合(无LACP协商),两端配置需一致。
Mode 1 (active-backup):主备模式。同一时刻只有一张网卡活跃,其他作为备份。主网卡故障时自动切换到备份网卡。不要求交换机支持任何特殊功能,兼容性最好。切换时间约1-3秒。
Mode 2 (balance-xor):基于MAC地址XOR的负载均衡。源MAC和目标MAC做XOR运算选择网卡,同一会话固定走同一网卡。需要交换机支持静态聚合。
Mode 3 (broadcast):广播模式。所有数据包从所有网卡发送,仅在需要极高可靠性的场景使用。带宽利用率最低。
Mode 4 (802.3ad / LACP):动态链路聚合。使用LACP协议与交换机协商,提供标准化的负载均衡和冗余。要求交换机支持802.3ad,是最推荐的生产环境方案。
Mode 5 (balance-tlb):自适应发送负载均衡。出站流量按当前负载分配到各网卡,入站由当前活跃网卡接收。不需要交换机特殊支持。
Mode 6 (balance-alb):自适应负载均衡。在Mode 5基础上增加入站负载均衡,通过ARP协商实现。不需要交换机特殊支持,但ARP处理会增加少量CPU开销。
Mode 4 LACP模式配置与交换机端协商
Mode 4是生产环境首选,需要服务器和交换机两端同时配置。以CentOS/RHEL 9为例:
# 1. 加载bonding模块
modprobe bonding mode=802.3ad miimon=100 lacp_rate=fast
# 2. 创建bond接口配置文件
cat > /etc/sysconfig/network-scripts/ifcfg-bond0 << 'EOF'
DEVICE=bond0
TYPE=Bond
BONDING_OPTS="mode=802.3ad miimon=100 lacp_rate=fast xmit_hash_policy=layer3+4"
IPADDR=10.0.1.100
PREFIX=24
GATEWAY=10.0.1.1
ONBOOT=yes
BOOTPROTO=static
BONDING_MASTER=yes
EOF
# 3. 配置成员网卡enp68s0f0
cat > /etc/sysconfig/network-scripts/ifcfg-enp68s0f0 << 'EOF'
DEVICE=enp68s0f0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
EOF
# 4. 配置成员网卡enp68s0f1
cat > /etc/sysconfig/network-scripts/ifcfg-enp68s0f1 << 'EOF'
DEVICE=enp68s0f1
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
EOF
# 5. 重启网络
nmcli connection reload
nmcli connection up bond0
nmcli connection up enp68s0f0
nmcli connection up enp68s0f1
xmit_hash_policy参数控制负载均衡的流量分配粒度:
layer2:基于MAC地址,同一目标MAC走同一网卡,分配粒度粗。
layer3+4:基于IP地址和端口号,同一连接走同一网卡,分配更均匀。生产环境推荐此设置。
Bonding状态监控与故障排查命令
# 查看bond接口状态
cat /proc/net/bonding/bond0
# 输出示例(正常状态):
# Ethernet Channel Bonding Driver: v3.7.1
# Bonding Mode: IEEE 802.3ad Dynamic link aggregation
# Transmit Hash Policy: layer3+4 (layer3+4)
# MII Status: up
# MII Polling Interval (ms): 100
#
# Slave Interface: enp68s0f0
# MII Status: up
# Speed: 25000 Mb/s
# Duplex: full
# Link Failure Count: 0
# Aggregator ID: 1
# Aggregator link state: active
#
# Slave Interface: enp68s0f1
# MII Status: up
# Speed: 25000 Mb/s
# Duplex: full
# Link Failure Count: 0
# Aggregator link state: active
# 实时监控bond状态变化
watch -n 1 'cat /proc/net/bonding/bond0 | grep -E "MII Status|Speed|Link Failure"'
# 查看LACP协商状态
cat /proc/net/bonding/bond0 | grep -A5 "LACP"
# 手动测试故障切换(拔掉一根网线后观察)
dmesg | grep -i bond | tail -20
# 查看bond接口统计信息
ip -s link show bond0
常见故障排查:
LACP协商失败:检查交换机端口是否配置了LACP模式,lacp_rate=fast要求交换机也设为fast模式。若交换机设为slow,将lacp_rate改为slow。
单卡模式下带宽不翻倍:Mode 4的LACP聚合中,同一会话(相同源IP+目标IP+端口)始终走同一物理链路,不会跨链路分配。这是协议限制,不是故障。使用layer3+4策略可使不同连接分布到不同链路。
Bonding配合多路径存储链路冗余配置
存储网络(如iSCSI、FC)的多路径与Bonding是不同层面的冗余机制。Bonding提供链路层冗余,多路径(multipath)提供SCSI层冗余。两者配合可构建端到端的存储高可用。
# 1. 安装多路径工具
dnf install -y device-mapper-multipath
# 2. 生成默认配置
mpathconf --enable --with_multipathd y
# 3. 配置多路径策略
cat > /etc/multipath.conf << 'EOF'
defaults {
user_friendly_names yes
find_multipaths yes
path_grouping_policy multibus
path_checker readsector0
path_selector "round-robin 0"
failback immediate
no_path_retry 18
polling_interval 2
}
# 存储阵列特定配置
multipaths {
multipath {
wwid 3600508b1001c3a0b48e2c6c7d8e9f0a1
alias data-lun-01
path_grouping_policy multibus
path_selector "round-robin 0"
}
}
# 存储控制器黑名单(本地磁盘)
blacklist {
devnode "^sd[a-b]$"
wwid "*"
}
blacklist_exceptions {
wwid "3600508b1001c3a0b48e2c6c7d8e9f0a1"
}
EOF
# 4. 重启multipath服务
systemctl restart multipathd
systemctl enable multipathd
# 5. 查看多路径状态
multipath -ll
# 输出示例:
# data-lun-01 (3600508b1001c3a0b48e2c6c7d8e9f0a1) dm-1
# size=2.0T features='1 queue_if_no_path' hwhandler='0' wp=rw
# |-+- policy='round-robin 0' status=active
# | |- 5:0:0:1 sdc 8:32 active ready running
# | |- 6:0:0:1 sde 8:64 active ready running
# |-+- policy='round-robin 0' status=enabled
# |- 5:0:1:1 sdd 8:48 active ready running
# |- 6:0:1:1 sdf 8:80 active ready running
# 6. 使用多路径设备
mkfs.xfs /dev/mapper/data-lun-01
mount /dev/mapper/data-lun-01 /data
round-robin 0策略将IO轮询分配到所有活跃路径,提供负载均衡。multibus分组策略将所有路径放入同一组,故障时自动切换到组内其他路径。
no_path_retry 18设置所有路径失效时重试18次(约36秒),避免IO立即返回错误导致文件系统挂起。超过重试次数后返回IO错误,上层应用可感知并处理。
生产环境Bonding与多路径联合部署检查清单
1. 确认交换机端口配置与Bonding模式匹配。Mode 4需要在交换机端配置LACP(Cisco为channel-group mode active,华为为eth-trunk mode lacp-static)。
2. Bonding成员网卡应连接到不同交换机,避免单交换机故障导致bond完全失效。
3. 存储多路径的两条链路应分别走不同HBA卡、不同Bond接口、不同交换机,形成物理隔离。
4. 部署后进行故障注入测试:依次拔掉每个链路,验证业务无中断、路径自动切换。使用fio工具进行持续IO测试的同时拔线,观察IO延迟变化和恢复时间。
5. 配置监控告警:通过snmpd暴露bond接口状态,配合Zabbix/Prometheus监控链路状态变化和Link Failure Count增长。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-bonding-wang-ka-bang-ding-mo-shi-yu-duo-lian/