Linux 多网卡绑定

所谓的多网卡绑定就是将多张物理网卡逻辑上组成一个网卡,这样就可以防止一块网卡坏了网络瘫痪,也能起到提升网络带宽的作用。

把多块网卡绑定在一起,一般有两种工作模式可以选择,轮询模式和主备模式

  • 轮询模式:例如把两块网卡绑定在一起,此时两块网卡都处于工作状态,它们轮流处理数据包,从而提升带宽和容错性。

  • 主备模式:例如把两块网卡绑定在一起,同一时间只有一块网卡处于工作状态,只有发生故障,备用网卡才会切换到工作模式;


bond技术实现网卡绑定

前提:

1、bond技术依赖内核的bonding模块,所以需要先加载bonding模块才行

2、要使得bond能正常工作,必须安装ifenslave 工具,它将两个或更多的网络接口绑定到一个单一的通道,如果没装这个工具,具体表现为bond无法启动,一直是down的状态。

# 查看是否已加载bonding模块
lsmod | grep bonding

# 加载bonding模块
sudo modprobe bonding

# 编辑配置文件,不然通过命令加载模块,重启会失效
sudo vim /etc/modules
bonding # 在配置文件中加入需要开启加载的模块

# 检查是否安装ifenslave
which ifenslave

说明: 如果想移除某个模块,使用rmmod命令就行了。例如移动bonding模块就是rmmod bonding;


修改配置文件实现bond技术

centos7实现bond技术

1、创建bonding的配置文件

sudo vim /etc/sysconfig/network-scripts/ifcfg-bond0

2、添加相关参数

DEVICE=bond0        # 可以根据自己的命名规则来命名,一般叫作bondX
BONDING_MASTER=yes  # 表示bond0为绑定的主设备
IPADDR=10.0.0.8
NETMASK=255.255.255.0
GATEWAY=10.0.0.2
ONBOOT=yes         # 开启自启动
BOOTPROTO=none     # 静态地址分配
BONDING_OPTS="mode=1 miimon=100"

# BONDING_OPTS决定了 bonding 的模式 model=1表示是主备模式,mode=0表示为轮询模式
# miimon=100表示系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路

3、修改接口的配置文件
例如我这里将eth0和eth1两个网卡加入到bond0里面去,就需要修改eht0和eth1的配置文件。

eth0设置:

sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
BOOTPROTO="none"
MASTER="bond0"
SLAVE="yes"

eth1设置:

sudo vim /etc/sysconfig/network-scripts/ifcfg-eth1
NAME="eth1"
DEVICE="eth1"
ONBOOT="yes"
BOOTPROTO="none"
MASTER="bond0"
SLAVE="yes"

4、重启网络管理服务

systemctl restart NetworkManager
# 我这里是centos7 所以重启的是NetworkManager

5、使用命令查看ip地址的时候,已经能看到bond0了

6、重启系统后,eth0和eth1的地址就没了

7、查看 /proc/net/bonding/bond0的信息能显示bond0的相关信息

ubuntu1604实现bond

1、编辑配置文件

sudo vim /etc/network/interfaces

2、bind0配置文件修改
auto后面指定的是你希望在系统启动时自动启动的网络接口。而iface行定义了该接口的配置

auto bond0
iface bond0 inet static
    address 192.168.14.106
    netmask 255.255.248.0
    gateway 192.168.12.1
    bond-mode 1
    bond-miimon 100
    bond-slaves ens33 ens37

auto ens33
iface ens33 inet manual  # manual:告诉系统不要尝试自动配置或启动该接口,但它仍然可以被其他进程或命令手动配置或激活
    bond-master bond0

auto ens37
iface ens37 inet manual
    bond-master bond0

3、因为ubuntu1604的默认网络管理工具是NetworkManager,直接编辑/etc/network/interfaces或其他网络配置文件时,实际上是在绕过NetworkManager进行配置。为了使配置生效并防止冲突,需要停止NetworkManager服务。

sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager

4、重启networking服务使得配置生效

sudo systemctl restart networking.service

5、重启服务或者后就能看到bond0了

6、查看 /proc/net/bonding/bond0 输出信息


ubuntu1804配置bond

1、和上面一样,确保bonding模块被加载且安装了ifenslave 工具

2、修改配置文件

sudo vim /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: no
    ens37:
      dhcp4: no

  bonds:
    bond0:
      interfaces:
      - ens33
      - ens37
      addresses: [192.168.13.104/22]
      gateway4: 192.168.12.1
      nameservers:
        addresses:
        - 180.76.76.76
        - 223.6.6.6
      parameters:
        mode: active-backup
        mii-monitor-interval: 100

说明:

(1))有时YAML文件的配置顺序会影响netplan的解析。所以要确保所有的接口都在bonds配置之前定义,不然会提示:“xxxx is not defined”
(2)netplan期望的绑定模式是字符串形式的名称,而不是数字,所以mode需要用字符串形式,不然会提示:“unknown bond xxx”

  • model 0:balance-rr

  • model 1:active-backup

3、执行sudo netplan apply 命令即可生效
使用 netplan apply 命令时,netplan 会自动应用配置更改,无需手动重启 NetworkManager 服务或 systemd-networkd 服务

  • renderer: networkd --- 对应systemd-networkd 服务

  • renderer: NetworkManager --- 对应NetworkManager 服务

sudo netplan apply

4、检查
重启系统后ens33和37的ip地址就没了

5、查看/proc/net/bonding/bond0 检查是bind否正常

cat /proc/net/bonding/bond0

image

posted on 2022-07-09 16:38  背对背依靠  阅读(459)  评论(0编辑  收藏  举报