应选用mode=1(active-backup)实现双网卡主备切换,配置bond0并指定primary=ens33,清空物理网卡ip,设bootproto=none,加载bonding模块后验证状态及故障切换。

要在Linux服务器上实现双网卡主备切换并兼顾基础负载能力,必须避开mode=4(需交换机LACP)和mode=6(需驱动支持ethtool改MAC),直接选用【mode=1(active-backup)】——它不依赖交换机配置、兼容性最强、故障切换快,且能通过primary参数锁定主卡,避免随机切换带来的会话中断。
确认物理网卡名称与状态
运行ip link show,记下两块待绑定网卡名(如ens33、ens37),确保它们当前state DOWN或UP但未配IP;若已启用DHCP或静态IP,先临时清空:ip addr flush dev ens33。
这一步跳过会导致后续bond0启动时提示“device is busy”,因为内核拒绝将已配置IP的接口加入bond。
创建bond0主配置文件
执行sudo vim /etc/sysconfig/network-scripts/ifcfg-bond0,写入以下内容:
TYPE=bond
BOOTPROTO=static
DEVICE=bond0
ONBOOT=yes
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
USERCTL=no
BONDING_OPTS="mode=1 miimon=100 primary=ens33"
【primary=ens33必须明确指定,否则failover时可能选错主卡,导致ARP响应混乱】。miimon=100表示每100ms探测链路,低于50ms易误判,高于200ms则故障恢复延迟明显。
配置物理网卡为从属设备
分别编辑ifcfg-ens33和ifcfg-ens37:
DEVICE=ens33
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
DEVICE=ens37
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
注意:两个物理网卡的BOOTPROTO必须设为none,不能留空或写static;若设为static,systemd-networkd或NetworkManager可能绕过bonding直接启用该卡,引发路由冲突。
加载bonding模块并启用bond0
第一步:确认模块未被占用,运行lsmod | grep bonding,如有输出则先sudo modprobe -r bonding卸载。
第二步:加载带参数的模块:sudo modprobe bonding mode=1 miimon=100 primary=ens33。
第三步:重启网络服务:sudo systemctl restart network(CentOS/RHEL)或sudo systemctl restart networking(Debian/Ubuntu)。
第四步:验证状态:cat /proc/net/bonding/bond0,看到Currently Active Slave: ens33且两块卡MII Status: up即成功。
第五步:模拟主卡故障,拔掉ens33网线,等待约300ms后执行ip link show bond0,观察Currently Active Slave是否已变为ens37——此时业务连接不会断开,SSH会话保持活跃。











