Linux 服务器上用 bonding 做网卡绑定,配置完会看到 bond0、bond1 这样的网卡名。很多人以为是两种模式,其实 bond0、bond1 只是内核创建的绑定设备编号,真正决定行为的是每个 bond 配置的模式参数。

编号只是设备名

加载 bonding 模块时可以通过 max_bonds 参数指定默认创建几个 bond 设备,所以开机就会看到 bond0。后续再绑定第二组网卡,自然就叫 bond1。它们没有功能上的固定含义,谁装哪块网卡都可以。

ip addr show bond0
cat /proc/net/bonding/bond0

第二组可以用 bond1,也可以直接起名叫 bond2,取决于 /etc/modprobe.d/bonding.conf 或者 systemd 的网卡命名规则。

真正的区别在模式

bond0 和 bond1 如果模式不同,行为差异就大了:

  • mode=1(主备):只有一块网卡工作,另一块待命,主口断开自动切换,带宽不叠加;
  • mode=4(802.3ad):需要交换机配 LACP,多块网卡同时转发,按哈希分配流量;
  • mode=0(轮询):不需要交换机配合,但可能出现乱序,实际很少用。

很多服务器出厂时 bond0 配的是主备,bond1 配的是 LACP,这属于厂商的部署习惯,不是规则。

查看当前模式

cat /proc/net/bonding/bond0 | head -20

输出里的 Bonding Mode 就是模式,Currently Active Slave 是当前工作的网卡,MII Status 表示链路状态。做切换测试时就用这个文件确认。

配置时容易踩的坑

  • 两个 bond 的成员口不能重叠,一块网卡只能属于一个 bond;
  • mode=4 时交换机侧必须配置 LACP,两端模式不匹配可能直接不通;
  • bond0 被 NetworkManager 接管后,又用 ifcfg 手写配置,容易被覆盖,二选一;
  • 改完配置用 nmcli connection reload 加 up,别直接重启网络服务,容易断 SSH。

结论

bond0 和 bond1 本质是同一类设备的不同实例,区别来自各自绑定的网卡和模式参数。看配置时先看模式,再看成员口和交换机侧的对应关系。