Linux主备无缝切换最可靠方式是bonding active-backup模式(mode=1),需协同配置miimon=100、fail_over_mac=1及从网卡清空IP/路由;验证需实测拔线丢包数≤2个。

Linux 系统中实现主备无缝切换,最可靠、最常用的方式是使用 bonding 的 active-backup 模式(mode=1)。它不追求带宽叠加,专注链路高可用——主网卡故障时,流量在毫秒级内自动切到备用网卡,上层业务几乎无感知。
核心配置要点
要真正达到“无缝”,不能只配对模式,必须协同设置以下三项关键参数:
- miimon=100:启用 MII 链路检测,每 100ms 检查一次物理连接状态。设为 50~200ms 区间较稳妥;低于 50ms 易误判,高于 200ms 会导致切换延迟明显(拔线后可能等半秒才恢复)。
- fail_over_mac=1:强制所有从网卡使用与当前 active 网卡相同的 MAC 地址。这是防交换机丢包的关键——避免切换后因 MAC 表未更新而形成流量黑洞。
- 从网卡清空 IP 和路由配置:eth0、eth1 的配置文件中必须删除 IPADDR、GATEWAY、BOOTPROTO 等字段,只保留 MASTER=bond0 和 SLAVE=yes。否则 NetworkManager 或 systemd-networkd 可能绕过 bond0 自行建路由,引发双网关或 ARP 冲突。
典型配置步骤(以 RHEL/CentOS/rocky 系统为例)
所有配置文件位于 /etc/sysconfig/network-scripts/:
- 创建
ifcfg-bond0:配 IP、子网、网关,BOOTPROTO=none或static均可,但不要写GATEWAY在从网卡里; - 修改
ifcfg-eth0和ifcfg-eth1:仅保留DEVICE、ONBOOT=yes、MASTER=bond0、SLAVE=yes,其余网络参数全部删掉; - 在
/etc/modprobe.d/bonding.conf中写入:alias bond0 bondingoptions bond0 mode=active-backup miimon=100 fail_over_mac=1; - 重启网络服务:
systemctl restart network或nmcli connection reload && nmcli connection up bond0(视网络管理器而定)。
验证是否真“无缝”
不能只看 cat /proc/net/bonding/bond0 显示谁是 Active Slave。必须实测故障场景:
- 执行
ping -c 100 -i 0.2 网关IP保持连通监控; - 拔掉当前 active 网卡的网线;
- 观察 ping 是否中断:理想情况是最多丢 1~2 个包(对应 200~400ms 内完成切换),之后立即恢复;
- 再执行
cat /proc/net/bonding/bond0 | grep "Active Slave",确认已变更; - 用
ethtool eth0和ethtool eth1分别检查 Link detected 状态,排除物理接触不良干扰。
常见踩坑提醒
很多“配置成功却切不动”的问题,根源在于细节遗漏:
- 虚拟机环境需用 e1000 或 vmxnet3 网卡驱动,rtl8139 对 miimon 支持不稳定;
- 某些旧版 ifup 脚本要求
MASTER=bond0 SLAVE=yes必须写在同一行,换行会被忽略; - 若用 NetworkManager,建议禁用其对物理网卡的管理(
nmcli dev set eth0 managed no),防止接管冲突; - mode=1 不需要交换机做任何配置,但务必确保两块网卡接入的是同一广播域(比如同一台交换机或堆叠交换机),否则 gratuitous ARP 可能无法生效。


















