Linux bonding(链路聚合)将多块物理网卡绑定为逻辑接口,实现链路冗余和带宽扩展。在服务器运维场景中,单网卡故障导致服务中断是高频问题,bonding通过对等网卡自动切换规避单点故障,部分模式还可叠加带宽。本文覆盖bonding的七种工作模式、CentOS/Ubuntu配置方法及交换机侧适配。
Bonding七种工作模式对比与选型
bonding驱动提供7种模式,编号0-6,各模式在冗余能力、带宽扩展和交换机要求上差异显著:
Mode 0 (balance-rr):轮询分发,数据包依次从各网卡发出,带宽叠加,需要交换机配置静态聚合。无冗余能力,单链路中断会导致丢包。
Mode 1 (active-backup):主备模式,同一时刻只有一块网卡活动,故障时自动切换。无需交换机特殊配置,兼容性最好,是服务器运维中应用最广泛的模式。
Mode 2 (balance-xor):基于源的哈希分发,同一源MAC固定走同一网卡,带宽叠加,需交换机配置静态聚合。
Mode 3 (broadcast):所有数据包从所有网卡发出,容错能力最强但带宽利用率最低,适用于特殊组播场景。
Mode 4 (802.3ad):LACP动态聚合,标准协议,带宽叠加且支持冗余,需交换机支持LACP并配置动态聚合组。这是数据中心首选模式。
Mode 5 (balance-tlb):自适应发送负载均衡,出口流量按负载分发,入口流量走活动网卡。不需交换机特殊配置。
Mode 6 (balance-alb):在Mode 5基础上增加入口负载均衡,通过ARP协商实现。不需交换机特殊配置,兼容性好。
选型建议:跨交换机堆叠环境用Mode 1,同交换机高带宽需求用Mode 4,无法改交换机配置时用Mode 6。
CentOS 7/8 bonding配置与网络接口绑定
以两块网卡enp3s0和enp3s1配置Mode 1(active-backup)为例。先加载bonding模块并确认:
modprobe bonding
echo "bonding" >> /etc/modules-load.d/bonding.conf
创建bond接口配置文件:
# /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
TYPE=Bond
NAME=bond0
BONDING_MASTER=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
BONDING_OPTS="mode=1 miimon=100 primary=enp3s0"
修改从接口配置,将其绑定到bond0:
# /etc/sysconfig/network-scripts/ifcfg-enp3s0
DEVICE=enp3s0
TYPE=Ethernet
ONBOOT=yes
MASTER=bond0
SLAVE=yes
# /etc/sysconfig/network-scripts/ifcfg-enp3s1
DEVICE=enp3s1
TYPE=Ethernet
ONBOOT=yes
MASTER=bond0
SLAVE=yes
miimon参数指定链路监测间隔(毫秒),100ms是常用值,降低该值加快故障检测但增加开销。primary参数指定主网卡,正常状态下优先使用。重启网络服务生效:
systemctl restart network
Ubuntu 22.04 netplan配置bonding与VLAN叠加
Ubuntu使用netplan管理网络,配置语法不同。新建或编辑/etc/netplan/01-bond.yaml:
network:
version: 2
renderer: networkd
bonds:
bond0:
interfaces: [enp3s0, enp3s1]
parameters:
mode: 802.3ad
lacp-rate: fast
mii-monitor-interval: 100
transmit-hash-policy: layer3+4
addresses: [192.168.1.100/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
ethernets:
enp3s0:
dhcp4: no
enp3s1:
dhcp4: no
transmit-hash-policy设为layer3+4使流量按IP和端口号哈希分发,避免同源同目的流量集中到单链路。lacp-rate设为fast加快LACP协商速度(每1秒发送一次LACPDU),default为slow(每30秒)。应用配置:
sudo netplan apply
如果配置错误导致网络中断,物理终端执行netplan try可自动回滚。
交换机侧LACP配置与兼容性验证
Mode 4(802.3ad)需要交换机配置端口聚合组。以Cisco交换机为例:
interface Port-channel1
switchport mode access
switchport access vlan 10
!
interface GigabitEthernet0/1
channel-group 1 mode active
!
interface GigabitEthernet0/2
channel-group 1 mode active
mode active表示主动发送LACP协商报文,passive表示被动等待。两端至少一端为active才能建立聚合。华为交换机使用Eth-Trunk配置:
interface Eth-Trunk1
trunkport gigabitethernet 0/0/1
trunkport gigabitethernet 0/0/2
mode lacp-static
bonding状态监控与故障切换验证
使用/proc/net/bonding查看实时状态:
cat /proc/net/bonding/bond0
# 输出示例
Ethernet Channel Bonding Driver: v3.7.1
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: enp3s0
Currently Active Slave: enp3s0
MII Status: up
MII Polling Interval (ms): 100
Slave Interface: enp3s0
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Slave Interface: enp3s1
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
验证故障切换效果,手动down掉主网卡:
ip link set enp3s0 down
# 查看切换
cat /proc/net/bonding/bond0 | grep "Currently Active"
# 应显示 enp3s1
切换过程中有少量丢包(通常1-2个包),应用层重试机制可覆盖。恢复主网卡后,根据primary参数决定是否回切:
ip link set enp3s0 up
# primary=enp3s0时自动回切到enp3s0
监控告警方面,建议在Prometheus中采集node_network_up指标,对bond0的Slave接口状态做告警规则:任何Slave接口MII Status非up持续30秒触发告警,确保双链路环境下单链路故障能及时发现。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/fu-wu-qi-duo-wang-ka-bang-ding-shi-zhan-linuxbonding-qi/