如下图
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),确保物理网卡支持链路聚合,或者在虚拟交换机中配置相关功能。