绑定(bonding)技术,linux centos 配置 网卡 聚合

352 阅读4分钟

如下图

1个服务器,有4个网卡,1、3号连接1个交换机,2、4网卡,连接另一个交换机。目地是负载均衡和高可用。centos7.9系统,如何配置可以实现

绑定(bonding)技术

根据你的需求,这个网络拓扑的目标是实现**负载均衡和高可用性**。在 CentOS 7.9 上,可以通过**绑定(bonding)技术**来实现。以下是具体配置步骤:

### 1. 确保安装了网络工具

确保系统已安装用于网络配置的必要工具:

```bash

yum install -y iputils iproute net-tools

```

### 2. 配置 Bonding 模式

在 CentOS 7.9 中,Bonding 是通过 `bond` 接口来实现的。以下是配置步骤:

#### 2.1 创建 Bonding 主设备

创建 `bond0` 设备的配置文件:

编辑 `/etc/sysconfig/network-scripts/ifcfg-bond0`,内容如下:

```ini

DEVICE=bond0

NAME=bond0

TYPE=Bond

BONDING_MASTER=yes

BOOTPROTO=none

IPADDR=192.168.1.100

NETMASK=255.255.255.0

GATEWAY=192.168.1.1

DNS1=8.8.8.8 # 设置 DNS

ONBOOT=yes

BONDING_OPTS="mode=802.3ad miimon=100" # 802.3ad(LACP)模式

```

#### 2.2 配置从设备

为每个网卡创建配置文件,并将其绑定到 `bond0`:

1. **eth1 的配置文件**:

编辑 `/etc/sysconfig/network-scripts/ifcfg-eth1`:

```ini

DEVICE=eth1

NAME=eth1

TYPE=Ethernet

MASTER=bond0

SLAVE=yes

ONBOOT=yes

```

2. **eth2 的配置文件**:

编辑 `/etc/sysconfig/network-scripts/ifcfg-eth2`:

```ini

DEVICE=eth2

NAME=eth2

TYPE=Ethernet

MASTER=bond0

SLAVE=yes

ONBOOT=yes

```

3. **eth3 的配置文件**:

编辑 `/etc/sysconfig/network-scripts/ifcfg-eth3`:

```ini

DEVICE=eth3

NAME=eth3

TYPE=Ethernet

MASTER=bond0

SLAVE=yes

ONBOOT=yes

```

4. **eth4 的配置文件**:

编辑 `/etc/sysconfig/network-scripts/ifcfg-eth4`:

```ini

DEVICE=eth4

NAME=eth4

TYPE=Ethernet

MASTER=bond0

SLAVE=yes

ONBOOT=yes

```

#### 2.3 重启网络服务

启用并检查 Bonding 配置:

```bash

systemctl restart network

cat /proc/net/bonding/bond0

```

#### 2.4 验证

确保 `bond0` 接口已启动,并且负载均衡和高可用性正常工作:

```bash

ping -c 4 8.8.8.8

```

### 3. 配置交换机

使用 **LACP**(802.3ad)模式时,交换机端也需要配置 LACP 链路聚合:

1. 将 `eth1` 和 `eth3` 的端口加入同一组 LACP。

2. 将 `eth2` 和 `eth4` 的端口加入另一组 LACP。

### 4. 验证高可用性

断开某个网卡(例如 `eth1`),检查是否仍然能够访问外部网络。如果网络正常,则配置成功。

如果 `/proc/net/bonding/bond0` 不存在,

说明 Bonding 模块尚未加载或 `bond0` 接口未正确创建。以下是解决方法和排查步骤:

---

### 1. 确认 Bonding 模块是否加载

Bonding 是 Linux 内核的一个模块。如果未加载模块,`/proc/net/bonding` 目录不会存在。

#### 检查是否加载了 Bonding 模块

运行以下命令:

```bash

lsmod | grep bonding

```

如果没有输出,说明模块尚未加载。可以手动加载:

```bash

modprobe bonding

```

确认加载成功后再次检查:

```bash

lsmod | grep bonding

```

---

### 2. 检查 Bonding 配置文件

确认 `/etc/sysconfig/network-scripts/ifcfg-bond0` 和从接口配置文件(如 `ifcfg-eth1`、`ifcfg-eth2`)的内容是否正确。

以 `bond0` 为例,确保其配置文件格式如下:

```ini

DEVICE=bond0

NAME=bond0

TYPE=Bond

BONDING_MASTER=yes

BOOTPROTO=none

IPADDR=192.168.1.100 # 示例 IP

NETMASK=255.255.255.0 # 子网掩码

GATEWAY=192.168.1.1 # 网关

DNS1=8.8.8.8 # DNS 服务器

ONBOOT=yes

BONDING_OPTS="mode=802.3ad miimon=100"

```

每个从设备的配置(如 `ifcfg-eth1`)格式应如下:

```ini

DEVICE=eth1

NAME=eth1

TYPE=Ethernet

MASTER=bond0

SLAVE=yes

ONBOOT=yes

```

确保所有绑定的网卡都正确配置。

---

### 3. 启动 Bonding 接口

编辑完成后,重启网络服务并检查:

```bash

systemctl restart network

```

如果未使用 `systemctl`,可手动启用接口:

```bash

ifup bond0

```

---

### 4. 检查 `/proc/net/bonding`

接口启用后,系统应生成 `/proc/net/bonding/bond0` 文件。再次运行以下命令:

```bash

cat /proc/net/bonding/bond0

```

---

### 5. 如果问题仍然存在

如果上述步骤仍未解决问题:

#### **检查内核日志**

查看内核日志中是否有 Bonding 错误:

```bash

dmesg | grep bonding

```

#### **检查 `modprobe` 配置**

确保 `/etc/modprobe.d/` 中没有禁用 Bonding 的配置。例如,文件中不应包含以下内容:

```text

blacklist bonding

```

如果存在,删除相关行并重新加载模块:

```bash

modprobe bonding

```

#### **重启系统**

有时系统需要重启以加载模块和网络配置。

```bash

reboot

```

---

### 6. 验证 Bonding 是否成功

重新检查绑定状态:

```bash

cat /proc/net/bonding/bond0

```

如果配置正确,文件将显示绑定状态及从设备信息。

---

### 7. 补充说明

- 如果没有加载 `bonding` 模块,也可能是内核缺少该功能,需确认是否使用了一个支持 Bonding 的 Linux 内核。

- 在虚拟化环境中(如 VMware 或 VirtualBox),确保物理网卡支持链路聚合,或者在虚拟交换机中配置相关功能。