【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。
| 模式 | 名称 | 描述 | 负载均衡 | 故障转移 | 交换机要求 | 推荐场景 |
|---|---|---|---|---|---|---|
| 0 | balance-rr | 轮询发送数据包 | 是(最高吞吐) | 是 | 静态EtherChannel(无LACP) | 高带宽应用 |
| 1 | active-backup | 主备模式(仅一端口活跃) | 否 | 是(自动切换) | 无 | 简单冗余 |
| 2 | balance-xor | XOR哈希分发 | 是 | 是 | 静态EtherChannel | 平衡流量 |
| 3 | broadcast | 所有端口广播 | 否 | 是 | 静态EtherChannel | 极致冗余 |
| 4 | 802.3ad (LACP) | 动态链路聚合 | 是 | 是 | LACP EtherChannel | 企业交换机 |
| 5 | balance-tlb | 传输负载均衡 | 是(单向) | 是 | 无 | 服务器到客户端 |
| 6 | balance-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的从设备
分别将两块物理网卡(eth1、eth2)绑定到 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 配置物理网卡为从设备
分别修改两块物理网卡的配置文件(以 ens33、ens36 为例):
# 添加第一块网卡 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,从而明确当前流量的物理传输路径。
