跳转到内容
搜索 Rocky Linux 文档

    浏览当前文档目录

    Rocky 10:bond 与 VLAN 的故障切换实测

    在 Rocky Linux 10.2 虚拟机(内核 6.12.0-211.16.1.el10_2)中实测:3 块 virtio 网卡(ens18 管理网、ens19/ens20 分别接两块隔离 bridge),ip link 建 active-backup bond、/proc/net/bonding 观察 Active Slave、down 掉一块验证切换、在 bond 上建 802.1Q VLAN。日志:plans/content-expansion/evidence/logs/rocky-bonding-vlan.log。

    没有真实交换机:LACP(802.3ad)与交换机 trunk 配置未验证,文中标注。

    容器的「网卡」是 dummy 或共享宿主网络,ip link 能建 bond 但链路状态是假的。VM 的 virtio 网卡有真实 carrier:两块 vNIC 分别接两块 bridge,down 掉一块时内核 bonding 驱动会真的检测到 link down 并切换。

    这和真机差在交换机侧:VM 没有对端交换机,LACP 协商无法验证;active-backup 不依赖交换机,所以能完整测。

    Terminal window
    sudo nmcli device set ens19 managed no
    sudo nmcli device set ens20 managed no
    sudo ip link add bond0 type bond mode active-backup miimon 100
    sudo ip link set ens19 down && sudo ip link set ens20 down
    sudo ip link set ens19 master bond0
    sudo ip link set ens20 master bond0
    sudo ip link set ens19 up && sudo ip link set ens20 up
    sudo ip link set bond0 up
    cat /proc/net/bonding/bond0 | head -6
    Ethernet Channel Bonding Driver: v6.12.0-211.16.1.el10_2.0.1.x86_64
    Bonding Mode: fault-tolerance (active-backup)
    Currently Active Slave: ens19
    MII Status: up
    MII Polling Interval (ms): 100

    先把 slave down 再 master,是为了避免 NetworkManager 在中间态自动接管;nmcli device set ... managed no 把两块网卡从 NM 手里摘出来。

    Terminal window
    sudo ip link set ens19 down
    sleep 3
    grep -E "Currently Active Slave|MII Status" /proc/net/bonding/bond0
    bond0: (slave ens19): link status definitely down, disabling slave
    bond0: (slave ens20): making interface the new active one
    Currently Active Slave: ens20
    MII Status: up

    内核日志的两行就是切换证据。再 up 回 ens19 不会自动切回(active-backup 默认不回切),要回切需设 primary= 或手动切换。

    Rocky Linux 10.2:ens19 断开后 Active Slave 切到 ens20

    Terminal window
    sudo ip link add link bond0 name bond0.100 type vlan id 100
    ip -d link show bond0.100 | head -2
    bond0.100@bond0: <BROADCAST,MULTICAST> ... state DOWN ...
    vlan protocol 802.1Q id 100 <REORDER_HDR>

    新建的 VLAN 接口默认 DOWN,要 ip link set bond0.100 up 才承载流量。

    一次真实事故:同一 bridge 上两个 bond 口会成环

    Section titled “一次真实事故:同一 bridge 上两个 bond 口会成环”

    实验时把两块 vNIC 都接到同一块 vmbr2,然后建 bond——VM 立刻失联。原因是两块网卡在同一 L2 域:bond 的广播从一块口出去、从另一块口回来,形成环路和广播风暴。

    正确做法:bond 的两个端口必须接不同的 bridge/交换机(或交换机上配 LACP 端口组)。这也是本页把 ens19/ens20 分到两块隔离 bridge 的原因。

    Terminal window
    sudo nmcli con add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup,miimon=100"
    sudo nmcli con add type ethernet con-name bond0-p1 ifname ens19 master bond0
    sudo nmcli con add type ethernet con-name bond0-p2 ifname ens20 master bond0
    sudo nmcli con up bond0

    本页用 ip link 验证内核行为;生产上建议用 nmcli 或配置管理,保证重启后仍生效。

    模式交换机
    active-backup无需配置,两口同 VLAN 即可
    802.3ad(LACP)必须配 LACP 端口组,两端速率/周期一致
    balance-alb通常无需,依赖 ARP

    VLAN 侧:交换机端口必须是 trunk 并放行对应 VLAN ID。

    下面的终端录制来自 Rocky Linux 10.2 虚拟机,完整记录了「建 bond → 看 Active Slave → 断开链路 → 切换 → 恢复」的顺序(.cast 只有 857 字节,默认不自动播放):

    bond active-backup 故障切换(Rocky Linux 10.2)
    文字版(命令与输出) / Text transcript
    # 1. create active-backup bond over two vNICs
    nmcli device set ens19 managed no; nmcli device set ens20 managed no
    ip link add bond0 type bond mode active-backup miimon 100
    ip link set ens19 master bond0; ip link set ens20 master bond0
    ip link set bond0 up
    # 2. active slave and MII status
    Bonding Mode: fault-tolerance (active-backup)
    Currently Active Slave: ens19
    MII Status: up
    # 3. failover: take the active link down
    ip link set ens19 down
    Currently Active Slave: ens20
    MII Status: up
    # 4. bring it back (no automatic failback)
    ip link set ens19 up
    Currently Active Slave: ens20
    命令与输出均为真实执行结果;播放器按需加载,未点击时页面不加载 asciinema-player。
    • 两个端口接同一 bridge/交换机:成环、广播风暴、整机失联;
    • NM 与 ip link 混用:NM 会把 slave 抢回去,先 nmcli device set ... managed no;
    • VLAN 建了没 up:接口存在但不通;
    • LACP 只在主机侧配:链路起不来。
    Terminal window
    sudo ip link add bond0 type bond mode active-backup miimon 100
    sudo ip link set ens19 master bond0 && sudo ip link set ens20 master bond0
    sudo ip link set bond0 up
    grep "Active Slave" /proc/net/bonding/bond0
    sudo ip link set ens19 down && sleep 3
    grep -E "Active Slave|MII Status" /proc/net/bonding/bond0
    sudo ip link add link bond0 name bond0.100 type vlan id 100
    ip -d link show bond0.100 | grep 802.1Q

    检查:

    1. down 前 Active Slave 是 ens19,down 后变成 ens20
    2. MII Status 仍为 up
    3. dmesg 里有 making interface the new active one
    4. VLAN 接口显示 802.1Q id 100

    常见问题

    active-backup 会自己切回原来的网卡吗?

    默认不会。down 掉的链路恢复后,active 仍是切换后的那块;要回切需配置 primary= 或在维护窗口手动切换。

    bond 的两个口能接同一台交换机吗?

    active-backup 可以(但不要接同一 bridge 的两个口,会成环);802.3ad 需要交换机配 LACP 端口组,且两端参数一致。

    为什么用 ip link 而不是 nmcli 做实验?

    ip link 直接验证内核 bonding 行为,不受 NM 配置干扰;生产环境应用 nmcli/配置管理持久化,避免重启丢失。