CentOS7上配置网络接口绑定bonding

在 CentOS 7 上配置网络接口绑定(bonding)是一个常见的操作,可以通过命令行工具或配置文件实现。以下是基于 CentOS 7 的详细步骤,假设您要将两个网卡(如 eth0 和 eth1)绑定为一个 bond0 接口。


前提条件

  1. 确保有多个网卡可用(用 ip link 查看接口名称,例如 eth0、eth1)。
  2. 以 root 权限操作(或使用 sudo)。
  3. 根据需要确认交换机是否支持 LACP(仅 Mode 4 需要)。

绑定模式

以下是一些常见的 bonding 模式:

  1. **Mode 0 (balance-rr)**:轮询模式,流量按顺序分配给每个 ethX 接口,提供负载均衡和容错。
  2. **Mode 1 (active-backup)**:主备模式,只有一个 ethX 接口活跃,其他作为备用,适合需要高可用性的场景。
  3. **Mode 4 (802.3ad)**:也叫 LACP(链路聚合控制协议),需要交换机支持,提供动态负载均衡和容错。

方法:手动配置 Bonding

CentOS 7 默认使用 NetworkManager 管理网络,但也可以通过编辑配置文件实现 bonding。

步骤 1:检查现有网络接口

运行以下命令查看当前网卡:

1
ip link

输出示例:

1: lo: <LOOPBACK,UP> mtu 65536 ...
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 ...
3: eth1: <BROADCAST,MULTICAST,UP> mtu 1500 ...

步骤 2:创建 Bond 接口配置文件

网络配置文件位于 /etc/sysconfig/network-scripts/ 目录下。

  1. 创建 bond0 的配置文件:
    1
    vi /etc/sysconfig/network-scripts/ifcfg-bond0
    根据您的 Bonding 模式填写内容:
    Mode 0 (balance-rr) 示例:
1
2
3
4
5
6
7
8
9
10
DEVICE=bond0
TYPE=Bond
NAME=bond0
BONDING_MASTER=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="mode=0 miimon=100" # mode=0 表示 balance-rr 模式

Mode 1 (active-backup) 示例:

DEVICE=bond0
TYPE=Bond
NAME=bond0
BONDING_MASTER=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="mode=1 miimon=100"

Mode 4 (802.3ad) 示例:

1
2
3
4
5
6
7
8
9
10
DEVICE=bond0
TYPE=Bond
NAME=bond0
BONDING_MASTER=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="mode=4 miimon=100 lacp_rate=fast"
  • BONDING_OPTS 参数说明:
    • mode:绑定模式(0 为balance-rr ,1 为 active-backup,4 为 802.3ad)。
    • miimon:链路监测间隔(毫秒),100 表示每 100ms 检查一次。
    • lacp_rate:仅 Mode 4 使用,设置 LACP 数据包发送速率(fast 或 slow)。
  1. 修改从属接口配置文件(eth0 和 eth1):

    1
    vi /etc/sysconfig/network-scripts/ifcfg-eth0

    内容:

    1
    2
    3
    4
    5
    6
    7
    TYPE=Ethernet
    NAME=eth0
    DEVICE=eth0
    ONBOOT=yes
    MASTER=bond0
    SLAVE=yes
    BOOTPROTO=none
    1
    vi /etc/sysconfig/network-scripts/ifcfg-eth1

    内容:

    1
    2
    3
    4
    5
    6
    7
    TYPE=Ethernet
    NAME=eth1
    DEVICE=eth1
    ONBOOT=yes
    MASTER=bond0
    SLAVE=yes
    BOOTPROTO=none

步骤 3:加载 Bonding 模块

确保 bonding 模块已加载:

1
modprobe bonding

检查是否成功:

1
lsmod | grep bonding

步骤 4:重启网络服务

应用配置:

1
systemctl restart network

如果使用 NetworkManager:

1
2
nmcli con reload
nmcli con up bond0

步骤 5:验证 Bonding 是否生效

  1. 检查 bond0 状态:
    1
    2
    3
    4
    5
    # view bonding stats
    cat /proc/net/bonding/bond0

    # view bonding style
    cat /sys/class/net/bond0/bonding/mode
    输出会显示模式、活动接口和从属接口的状态。

active-blackup

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[root@vgt-rocky9-60 network-scripts]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v5.14.0-427.13.1.el9_4.x86_64

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth2
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0

Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:97:10:15
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:c1:13:5b
Slave queue ID: 0


[root@vgt-rocky9-60 network-scripts]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:fc:e9:96 brd ff:ff:ff:ff:ff:ff
altname enp0s3
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:c1:13:5b brd ff:ff:ff:ff:ff:ff
altname enp0s8
4: eth2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:c1:13:5b brd ff:ff:ff:ff:ff:ff permaddr 08:00:27:97:10:15
altname enp0s9
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:95:a5:17 brd ff:ff:ff:ff:ff:ff
altname enp0s10
6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:c1:13:5b brd ff:ff:ff:ff:ff:ff

balance-rr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@vgt-rocky9-60 ~]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v5.14.0-427.13.1.el9_4.x86_64

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:c1:13:5b
Slave queue ID: 0

Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:97:10:15
Slave queue ID: 0
  1. 检查 IP 配置:

    1
    ip addr show bond0
  2. 测试网络连通性:

    1
    ping 192.168.1.1

使用 nmcli 配置 Bonding(可选)

如果您更喜欢命令行工具,可以直接用 nmcli 配置:

  1. 创建 bond 接口:
    1
    nmcli con add type bond ifname bond0 mode active-backup ip4 192.168.1.100/24 gw4 192.168.1.1
    或 Mode 4:
    1
    nmcli con add type bond ifname bond0 mode 802.3ad ip4 192.168.1.100/24 gw4 192.168.1.1
    或Mode0 balance-rr
nmcli con add type bond ifname bond0 mode balance-rr ipv4.method manual ipv4.addresses 192.168.1.10/24 ipv4.gateway 192.168.1.1
  1. 添加从属接口:

    1
    2
    nmcli con add type ethernet ifname eth0 master bond0
    nmcli con add type ethernet ifname eth1 master bond0
  2. 激活 bond:

    1
    nmcli con up bond0

bond active-backup

nmcli con add type bond ifname bond0 mode active-backup ip4 192.168.1.10/24 gw4 192.168.1.1
nmcli con add type ethernet ifname eth0 master bond0
nmcli con add type ethernet ifname eth1 master bond0
nmcli con up bond0

bond balance-rr

1
2
3
4
5
nmcli con add type bond ifname bond0 mode balance-rr ipv4.method manual ipv4.addresses 192.168.1.10/24 ipv4.gateway 192.168.1.1
nmcli con mod bond0 bond.options "mode=balance-rr,miimon=100"
nmcli con add type ethernet ifname eth0 master bond0
nmcli con add type ethernet ifname eth1 master bond0
nmcli con up bond0
  1. 查看状态:
    1
    2
    3
    nmcli con show
    cat /proc/net/bonding/bond0
    ethtool eth0 #检查链路状态

持久化:nmcli 配置会自动保存到 /etc/NetworkManager/system-connections/ 下,重启后仍有效


注意事项

  • 如果交换机不支持 LACP,使用 Mode 1 而不是 Mode 4。
  • 配置完成后,建议拔掉一根网线测试故障切换(Mode 1)或负载均衡(Mode 4)。
  • 如果遇到问题,检查日志:
    1
    journalctl -u network

如果ethx ethy已经存在ip,配置文件形式,删除或者修改正常,重启系统后观察bondx网卡状态。