当前位置: 首页 > news >正文

【Linux network和NetworkManager双网卡主备模式绑定】

文章目录

  • 1. 双网卡绑定
    • 1.1 概念
    • 1.2 什么是Bonding?
    • 1.3 关键组件?
    • 1.4 Bond0 例子
    • 1.5 Bonding的模式
  • 2. 如何配置主备模式(NetworkManager)?
    • 2.1 内核加载bonding
    • 2.2 查看网络状态服务
    • 2.3 确认做bond0的两块网卡
    • 2.4 创建bond虚拟网卡bond0
    • 2.5 为bond0配置IP地址
    • 2.6 将物理网卡添加为bond0的从设备
    • 2.7 激活所有连接
    • 2.8 验证配置是否生效
      • 2.8.1 查看Bond0状态
      • 2.8.2 查看bonding详细信息
      • 2.8.3 测试故障切换(可选)
  • 3. 如何配置主备模式(network)
    • 3.1 内核加载bonding
    • 3.2 确认做bond0的两块网卡
    • 3.3 创建bond虚拟网卡bond0 并配置地址
    • 3.4 配置物理网卡为从设备
  • 总结:
    • 3.5 重启网络生效
    • 3.6 验证配置是否生效
      • 3.6.1 查看Bond0状态
      • 3.6.2 查看bonding详细信息
      • 3.6.3 测试故障切换(可选)
  • 4. 双网卡主备模式的流量路径
    • 4.1 正常工作时的流量路径
    • 4.2 主网卡故障时的流量路径(自动切换)
    • 4.3 主网卡恢复后的流量路径(默认行为)
    • 4.4 总结:主备模式的流量核心特点

1. 双网卡绑定

1.1 概念

在Linux系统中,双网卡绑定(也称为网卡绑定或 Network Bonding)是一种将多个物理网卡(如eth0和eth1)聚合为一个逻辑网卡的技术,主要用于实现网络负载均衡、带宽扩展和故障冗余,从而提升网络性能和稳定性。

bond0是这种绑定技术的默认逻辑接口名称(virtual interface),它代表了绑定的结果:系统将多个物理网卡“虚拟”成一个名为bond0的单一接口,对外表现为一个网卡,但内部由多个物理网卡共同工作。

1.2 什么是Bonding?

什么是Bonding? Bonding是将多个网卡(如eth0和eth1,或现代命名如enp1s0和enp2s0)“绑定”成一个逻辑接口(如bond0)。对外,它像一个网卡;内部,多张网卡协作工作。

  • 好处
    • 冗余:一条链路断开,流量自动切换(故障转移)。
    • 负载均衡:多条链路分担流量,提高吞吐量(e.g., 双千兆网卡可达近2Gbps)。
    • 简单管理:所有流量通过单一IP配置。

在这里插入图片描述

1.3 关键组件?

  • 主接口(Master):bond0(逻辑接口)

  • 从接口(Slaves):物理网卡,绑定到bond0。

  • 驱动:Linux内核的bonding模块(需加载)

  • 交换机要求:取决于模式,有些需要配置EtherChannel/LACP。

1.4 Bond0 例子

[root@localhost ~]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v5.14.0-503.14.1.el9_5.x86_64Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: ens160
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0Slave Interface: ens160
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:d3:bb:bd
Slave queue ID: 0Slave Interface: ens161
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:d3:bb:db
Slave queue ID: 0
[root@localhost ~]# 

1.5 Bonding的模式

Bonding有7种标准模式(0-6)+1个扩展(balance-slb)。选择取决于需求:冗余优先用mode 1,负载均衡用mode 4/0。

模式名称描述负载均衡故障转移交换机要求推荐场景
0balance-rr轮询发送数据包是(最高吞吐)静态EtherChannel(无LACP)高带宽应用
1active-backup主备模式(仅一端口活跃)是(自动切换)简单冗余
2balance-xorXOR哈希分发静态EtherChannel平衡流量
3broadcast所有端口广播静态EtherChannel极致冗余
4802.3ad (LACP)动态链路聚合LACP EtherChannel企业交换机
5balance-tlb传输负载均衡是(单向)服务器到客户端
6balance-alb自适应负载均衡是(双向)无交换机配置

注意:

  • 若未指定 mode,bond 的默认模式是 balance-rr(mode=0,轮询负载均衡),而非主备模式。

2. 如何配置主备模式(NetworkManager)?

https://support.huawei.com/enterprise/zh/knowledge/EKB1001172264

  • mode=1, 即Active-backup policy (主-备份策略)

特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N

2.1 内核加载bonding

[root@localhost ~]# lsmod | grep bonding# 加载模块(重启系统后就不用手动再加载了)
[root@localhost ~]# modprobe bonding
[root@localhost ~]# lsmod | grep bonding
bonding               282624  0
tls                   159744  1 bonding
[root@localhost ~]# 
  • 1.建立模块加载文件
echo bonding > /etc/modules-load.d/bonding.conf
  • 2.立即生效(可选)
systemctl restart systemd-modules-load      # 当前会话加载
# 或者直接
modprobe bonding
  • 3.验证
lsmod | grep bonding

出现 bonding 行即表示已加载;重启后 systemd 会再次自动加载。

补充说明:

  • 只要 /etc/modules-load.d/bonding.conf 里写一次 bonding以后无论创建 bond0、bond1、bondN 都足够了
  • NetworkManager 在激活 type=bond 连接时,若发现模块未加载,也会自动 modprobe bonding;但“提前加载”能避免首次激活时的竞态或失败日志。

2.2 查看网络状态服务

[root@localhost ~]# systemctl status NetworkManager

2.3 确认做bond0的两块网卡

[root@localhost ~]# ip add show | grep -E ens*
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000altname enp3s0inet 192.168.8.100/24 brd 192.168.8.255 scope global noprefixroute ens160
3: ens161: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000altname enp4s0inet 192.168.8.128/24 brd 192.168.8.255 scope global dynamic noprefixroute ens161
4: ens193: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000altname enp12s0inet 192.168.8.129/24 brd 192.168.8.255 scope global dynamic noprefixroute ens193
5: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000altname enp19s0inet 192.168.8.130/24 brd 192.168.8.255 scope global dynamic noprefixroute ens224
6: ens225: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000altname enp20s0inet 192.168.8.131/24 brd 192.168.8.255 scope global dynamic noprefixroute ens225
7: ens256: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000altname enp27s0inet 192.168.8.132/24 brd 192.168.8.255 scope global dynamic noprefixroute ens256
[root@localhost ~]# 

这里采用ens160和ens161这两块网卡做主备

2.4 创建bond虚拟网卡bond0

[root@localhost ~]# nmcli connection add type bond con-name bond0 ifname bond0 mode active-backup miimon 100
连接 "bond0" (9ab504e4-4a0f-4d3e-8057-80837d722f1f) 已成功添加。
[root@localhost ~]# nmcli connection show
NAME        UUID                                  TYPE      DEVICE 
ens160      f4c53d9c-5e45-3cbd-8ab9-7935766b6803  ethernet  ens160 
有线连接 1  6ca8c4f5-e898-31fb-941a-985f6de1187a  ethernet  ens161 
有线连接 2  37a79e3f-54b5-3c64-bc67-7d04f4e2f67c  ethernet  ens193 
有线连接 3  b53de9f9-d651-30d7-aee3-a0151e0bbbd8  ethernet  ens224 
有线连接 4  5145603e-67c2-37e0-995b-b40fa127fa65  ethernet  ens225 
有线连接 5  44171350-a441-3814-b1b1-23582ec90724  ethernet  ens256 
bond0       9ab504e4-4a0f-4d3e-8057-80837d722f1f  bond      bond0  
lo          b5c535f0-9285-4884-9837-9a96160fe568  loopback  lo     
[root@localhost ~]# 
  • con-name bond0:连接名称(自定义,与网卡名一致便于管理);
  • ifname bond0:虚拟网卡设备名;
  • mode active-backup:即 bonding 的 mode=1,主备模式;
  • miimon 100:链路监测间隔,确保快速检测网卡故障。

2.5 为bond0配置IP地址

根据实际网络规划,为 bond0 配置静态 IP(若用 DHCP,可跳过此步,系统会自动获取):

[root@localhost ~]# nmcli connection modify bond0 ipv4.addresses 192.168.8.100/24 ipv4.gateway 192.168.8.2 ipv4.dns 192.168.8.2,223.5.5.5 ipv4.method manual autoconnect yes
[root@localhost ~]# 
nmcli connection modify bond0 ipv4.addresses 192.168.8.100/24  # IP+子网掩码(替换为实际值)
nmcli connection modify bond0 ipv4.gateway 192.168.8.2       # 网关(替换为实际值)
nmcli connection modify bond0 ipv4.dns 192.168.8.2,114.114.114.114 # DNS(替换为实际值)
nmcli connection modify bond0 ipv4.method manual              # 手动配置 IP(dhcp 为自动获取)
nmcli connection modify bond0 autoconnect yes                 # 开机自动激活

2.6 将物理网卡添加为bond0的从设备

分别将两块物理网卡(eth1eth2)绑定到 bond0,作为从设备(从设备无需单独配置 IP):

# 添加第一块网卡 ens160 到bond0
[root@localhost ~]# nmcli connection add type bond-slave con-name bond0-ens160 ifname ens160 master bond0
警告:存在其他 2 条带有名称 "bond0-ens160" 的连接。通过其 uuid "c1446dcc-3c74-45b3-9839-5170a84c32bb" 引用连接。
连接 "bond0-ens160" (c1446dcc-3c74-45b3-9839-5170a84c32bb) 已成功添加。
[root@localhost ~]# # # 添加第二块网卡 ens161 到bond0
[root@localhost ~]# nmcli connection add type bond-slave con-name bond0-ens161 ifname ens161 master bond0
连接 "bond0-ens161" (5ac6cc10-5b2d-4648-9a94-685d383689a8) 已成功添加。
[root@localhost ~]# 
  • con-name bond0-ens160:从设备连接名称(自定义,便于识别);
  • ifname eth2: 指定“用哪块硬件网卡”去实际承载这个配置。
  • master bond0:指定从属的 bond 主设备。

2.7 激活所有连接

依次激活从设备和 bond0 主设备,使配置生效:

[root@localhost ~]# nmcli connection up bond0-ens161
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/11)
[root@localhost ~]# nmcli connection up bond0-ens160
错误:连接激活失败:Can not find a controller for bond0-ens160: Connection or device bond not found
[root@localhost ~]# nmcli connection up bond0
连接已成功激活(controller waiting for ports)(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/12)
[root@localhost ~]# 
[root@localhost ~]# systemctl restart NetworkManager

2.8 验证配置是否生效

2.8.1 查看Bond0状态

执行以下命令,确认 bond0 已正常运行,且两块物理网卡为从设备:

[root@localhost ~]# ip add show bond0
9: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 00:0c:29:d3:bb:db brd ff:ff:ff:ff:ff:ffinet 192.168.8.100/24 brd 192.168.8.255 scope global noprefixroute bond0valid_lft forever preferred_lft foreverinet6 fe80::4a5c:1f91:4c6b:e7d/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@localhost ~]# 

2.8.2 查看bonding详细信息

执行命令查看主备模式、当前活跃网卡(主网卡)等:

[root@localhost ~]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v5.14.0-503.14.1.el9_5.x86_64Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: ens160
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0Slave Interface: ens160
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:d3:bb:bd
Slave queue ID: 0Slave Interface: ens161
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:d3:bb:db
Slave queue ID: 0
[root@localhost ~]# 

关键信息解读:

  • Bonding Mode: fault-tolerance (active-backup):确认是主备模式;

  • Currently Active Slave: eth160:当前活跃的主网卡(如 eth160);

  • Slave Interface: ens161:备份网卡,处于备用状态。

2.8.3 测试故障切换(可选)

拔下主网卡(如 eth1)的网线,再次执行 cat /proc/net/bonding/bond0,会发现 Active Slave 自动切换为 eth161;插回 eth160 网线后,主网卡会重新切回 eth160(默认主备模式下,故障恢复后会优先切回原主网卡)。

[root@localhost system-connections]# nmcli connection down ens160
成功停用连接 "ens160"(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)[root@localhost system-connections]# nmcli connection down bond0-ens161
成功停用连接 "bond0-ens161"(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
[root@localhost system-connections]# [root@localhost ~]# cat /proc/net/bonding/bond0 
[root@localhost ~]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v5.14.0-503.14.1.el9_5.x86_64Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: ens161 	# 已经切换了
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0Slave Interface: ens161
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:d3:bb:db
Slave queue ID: 0Slave Interface: ens160
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:d3:bb:bd
Slave queue ID: 0
[root@localhost ~]# 

3. 如何配置主备模式(network)

3.1 内核加载bonding

[root@localhost ~]# lsmod | grep bonding
# 临时加载
[root@localhost ~]# modprobe bonding 
------------------------------------------
建议用开机自动加载
[root@localhost ~]# vim /etc/modprobe.d/bonding.conf
[root@localhost ~]# cat /etc/modprobe.d/bonding.conf 
alias bond0 bonding
[root@localhost ~]# modprobe bonding
libkmod: kmod_config_parse: /etc/modprobe.d/bonding.conf line 1: ignoring bad line starting with 'bonding'
[root@localhost ~]# lsmod | grep bonding
bonding               145728  0 
[root@localhost ~]# 
  • 1.bonding 模块 只加载一次,就能创建任意多个 bond 设备(bond0、bond1、bond2…)

  • 2.从 RHEL 7 以后,官方文档已经 废弃 alias bondX bonding 这种写法;NetworkManager 在发现 type=bond 连接时会 自动 modprobe bonding,你甚至不必手动写任何配置文件。

  • 3.如果一定要“显式开机加载”,最干净的办法是:

    echo bonding > /etc/modules-load.d/bonding.conf
    systemctl restart systemd-modules-load
    

    与 bond 数量无关,写一次即可

3.2 确认做bond0的两块网卡

[root@localhost ~]# ip add show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:84:fd:18 brd ff:ff:ff:ff:ff:ffinet 192.168.8.120/24 brd 192.168.8.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::4cd0:286:68e2:9be2/64 scope link valid_lft forever preferred_lft forever
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:84:fd:22 brd ff:ff:ff:ff:ff:ffinet 192.168.8.134/24 brd 192.168.8.255 scope global dynamic ens36valid_lft 1301sec preferred_lft 1301secinet6 fe80::7328:7395:b272:f9be/64 scope link valid_lft forever preferred_lft forever
4: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:84:fd:2c brd ff:ff:ff:ff:ff:ffinet 192.168.8.135/24 brd 192.168.8.255 scope global dynamic ens37valid_lft 1078sec preferred_lft 1078secinet6 fe80::16c3:3683:8b76:bde3/64 scope link valid_lft forever preferred_lft forever
5: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:84:fd:36 brd ff:ff:ff:ff:ff:ffinet 192.168.8.136/24 brd 192.168.8.255 scope global dynamic ens38valid_lft 1267sec preferred_lft 1267secinet6 fe80::b70e:fdbf:204c:9480/64 scope link valid_lft forever preferred_lft forever
6: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN qlen 1000link/ether 7e:bd:f7:ef:30:86 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# 

这里用ens33和ens36这两块网卡

3.3 创建bond虚拟网卡bond0 并配置地址

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
[root@localhost network-scripts]# vim ifcfg-bond0
[root@localhost network-scripts]# cat ifcfg-bond0 
DEVICE=bond0
TYPE=Bond
NAME=bond0
BOOTPROTO=static
IPADDR=192.168.8.121
NETMASK=255.255.255.0
GATEWAY=192.168.8.2
DNS1=192.168.8.2
DNS2=223.5.5.5
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100 fail_over_mac=active"
[root@localhost network-scripts]# 
  • mode=1:明确指定为主备模式;
  • miimon=100:每 100ms 监测一次链路状态;
  • fail_over_mac=active:主备切换时使用活跃网卡的 MAC 地址(避免网络波动)。

3.4 配置物理网卡为从设备

分别修改两块物理网卡的配置文件(以 ens33ens36 为例):

# 添加第一块网卡 ens36 到bond0
[root@localhost network-scripts]# vim ifcfg-ens36
[root@localhost network-scripts]# cat ifcfg-ens36
DEVICE=ens36
TYPE=Ethernet
NAME=ens36
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
[root@localhost network-scripts]# # 添加第二块网卡 ens33 到bond0
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33.bak
[root@localhost network-scripts]# vim ifcfg-ens33
[root@localhost network-scripts]# cat ifcfg-ens33
DEVICE=ens33
TYPE=Ethernet
NAME=ens33
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
[root@localhost network-scripts]# 
  • MASTER=bond0
    指定“我的上级接口是 bond0”,也就是告诉网络服务:这个网卡(eth0)不单独拿 IP,而是去当 bond0 的一个 slave
  • SLAVE=yes
    启用“从属模式”,表示本接口只能作为聚合端口存在,自身不运行 IP、不跑 DHCP,一切配置由 master(bond0)接管。

总结:

MASTER= 指向谁当老大;SLAVE=yes 声明自己当小弟

3.5 重启网络生效

[root@localhost network-scripts]# systemctl restart network

注意:

(若使用 NetworkManager,需先关闭:systemctl stop NetworkManager && systemctl disable NetworkManager

3.6 验证配置是否生效

3.6.1 查看Bond0状态

确认 bond0 已获取 IP 且从设备正常关联:

[root@localhost ~]# ip add show bond0
6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000link/ether 00:0c:29:84:fd:18 brd ff:ff:ff:ff:ff:ffinet 192.168.8.121/24 brd 192.168.8.255 scope global bond0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe84:fd18/64 scope link valid_lft forever preferred_lft forever
[root@localhost ~]# 

3.6.2 查看bonding详细信息

执行以下命令,确认主备模式及当前活跃网卡:

[root@localhost ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active)
Primary Slave: None
Currently Active Slave: ens33
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0Slave Interface: ens33
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:84:fd:18
Slave queue ID: 0Slave Interface: ens36
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:84:fd:22
Slave queue ID: 0
[root@localhost ~]# 

关键输出:

  • Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active):确认是主备模式;
  • Currently Active Slave: ens33:当前活跃的主网卡;
  • Slave Interface: ens33:备用网卡,处于 up 状态(等待切换)。

3.6.3 测试故障切换(可选)

断开主网卡(如 eth0)的连接,再次执行 cat /proc/net/bonding/bond0,会发现 Active Slave 自动切换为 eth1;恢复连接后,会重新切回 eth0(默认行为)。

  • 1.使用 ip 命令(推荐,现代 Linux 系统常用)
# 停用指定网卡(如 ens33)
ip link set ens33 down
  • 2.使用 ifconfig 命令(传统命令,部分系统可能需要安装 net-tools)
# 停用指定网卡(如 eth1)
ifconfig eth1 down
  • 3.针对 bonding 从设备的特殊说明
# 假设当前 Active Slave 是 eth0,将其停用
ip link set eth0 down# 之后查看 bond 状态,确认是否切换到备用网卡
cat /proc/net/bonding/bond0
[root@localhost ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active)
Primary Slave: None
Currently Active Slave: ens36   # 已经切换了
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0Slave Interface: ens33
MII Status: down
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:0c:29:84:fd:18
Slave queue ID: 0Slave Interface: ens36
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:84:fd:22
Slave queue ID: 0
[root@localhost ~]# 
  • 4.恢复网卡为 up 状态
# 启用 eth0
ip link set eth0 up
# 或
ifconfig eth0 up

这些命令会立即生效,但属于临时操作(重启网络服务或服务器后会恢复原有状态)。如果需要永久停用网卡,需修改网卡配置文件(如 /etc/sysconfig/network-scripts/ifcfg-eth0 中的 ONBOOT=no)。

4. 双网卡主备模式的流量路径

在双网卡主备模式(mode=1)下,bond0 的网络数据通信流量路径非常明确,核心原则是 “同一时间只有一块网卡(主网卡)在工作,备用网卡处于待命状态”,具体流程如下:

4.1 正常工作时的流量路径

  • 主网卡(Active Slave)负责所有数据传输

系统会从绑定的两块物理网卡中选择一块作为 “主网卡”(默认是配置时先激活的网卡,如 eth0),此时:

  • 所有从服务器发出的数据包(出站流量),都会通过 bond0 虚拟网卡,最终由主网卡(eth0)物理接口发送到网络中。
  • 所有发送到服务器的数据包(入站流量),会先到达主网卡(eth0),再通过 bond0 虚拟网卡转发给操作系统处理。
  • 备用网卡(如 eth1)虽然处于激活状态(UP),但不参与任何数据传输,仅实时监测自身链路状态(通过 miimon 参数配置的间隔)。

4.2 主网卡故障时的流量路径(自动切换)

当主网卡(eth0)出现故障(如网线断开、链路中断):

  • 检测机制触发:bond0 会通过 miimon 监测到主网卡链路故障(MII Status 变为 down)。
  • 自动切换主备角色:bond0 立即将备用网卡(eth1)切换为新的主网卡(Active Slave)。
  • 流量切换到新主网卡
    • 后续所有出站 / 入站流量,都会切换到新主网卡(eth1)上传输,路径与之前一致(bond0 ↔新主网卡 eth1)。
    • 整个切换过程通常在毫秒级(由 miimon 间隔决定,如 100ms 配置下,最快 100ms 内完成切换),对上层应用几乎无感知。

4.3 主网卡恢复后的流量路径(默认行为)

当原主网卡(eth0)故障恢复(如重新插好网线):

  • 默认情况下,bond0 会自动切回原主网卡(eth0 重新成为 Active Slave),流量也随之切换回 eth0 传输。
  • 若想保持在故障时切换的网卡(eth1)上,可在 bond0 配置中添加 primary_reselect=0(表示 “故障恢复后不自动切回原主网卡”)。

4.4 总结:主备模式的流量核心特点

  • 单路径传输:任何时刻只有一块物理网卡承载流量,避免了负载均衡模式下的复杂流量分配。
  • 故障自动切换:通过链路监测机制实现流量无缝切换,保障网络连续性。
  • 虚拟网卡 bond0 是 “流量入口”:操作系统层面只需要与 bond0 交互(如配置 IP、路由),无需关心实际使用哪块物理网卡,简化了上层网络配置。

可以通过 cat /proc/net/bonding/bond0 实时查看当前哪块网卡是 Active Slave,从而明确当前流量的物理传输路径。

http://www.dtcms.com/a/553793.html

相关文章:

  • SSO 单点登录
  • Linux 中如何查看系统的位数
  • 云南建设企业网站修改wordpress首页缩略图尺寸
  • 网站的投票系统怎么做wordpress文章类模板
  • AI智能体如何让用户洞察更简单、更快速、更精准
  • 离线测试与在线测试
  • linux安装kafka
  • 13. React中为什么使用setState
  • 电力电子技术 第十章——可控整流器
  • 高端网站建设seo电子商务网站建设携程
  • 知名网站制作全包19寸 网站做多大
  • MoE (Mixture of Experts)
  • 福建省城乡建设厅网站wordpress演示地址转换短网址
  • 实验:服务端建立nfs服务 客户端挂载该服务
  • 大数据分析与应用实验报告(黑龙江大学)
  • 网站整体结构企业邮箱如何查询
  • GRUB配置文件解析与启动流程详解
  • 静态 IP 深度用户体验手记:Cliproxy 稳定性与便捷性实测
  • 基于Springboot + vue3实现的药材中药资源共享平台
  • 杭州的设计网站建设企业网站建设原则是
  • Configuration Key
  • sns社交网站源码上海有限公司有哪些
  • 基于React的开源框架Next.js、UmiJS、Ant Design Pro
  • KVM在centos上离线安装
  • gateway配置自定义转发
  • 【洛谷】枚举专题-普通枚举 经典题解之铺地毯、回文日期、扫雷
  • GPU机器-显卡占用
  • 网站关键词抓取id wordpress
  • 学校网站 建设措施西地那非片能延时多久每次吃多少
  • Adobe Lightroom Classic 2026 v15.0 更新详解:AI加持下的全新摄影工作流