(Linux系统之Team链路聚合配置)

一、Team链路聚合介绍

1. Teaming技术简介

1.Teaming技术就是把同一台服务器上的多个物理网卡通过软件绑定成一个虚拟网卡; 2.我们可以通过Teaming技术做链路聚合,实现不同网卡的网卡的负载均衡和冗余;

2. 网卡的bonding和Teaming技术

1.一般在在RHEL5/RHEL6中使用的是Bonding,而RHEL7提供了一项新的实现技术Teaming,用来实现链路聚合的功能。 2.网卡的链路聚合一般常用的有"bond"和"team"两种模式,"bond"模式最多可以添加两块网卡,"team"模式最多可以添加八块网卡。

3. Team常用工作模式

Team常用工作模式如下:

  • roundrobin: 以轮循的模式传输所有端口的包
  • activebakup:主备模式这是一个故障迁移程序,监控链接更改并选择活动的端口进行传输
  • loadbalance: 监控流量并使用哈希函数以尝试在选择传输端口的时候达到完美均衡
  • broadcast: 广播容错,设备通过所有端口传输数据包

二、实践环境规划

本次实践规划:

hostname team接口IP地址 物理网卡 操作系统版本
jeven 192.168.200.126 ens37/38/39/40 centos 7.6

三、添加物理网卡

1. 新增物理网卡

给虚拟机新增四张物理网卡 需要注意的是添加的网络适配器需网络模式一致,添加的个数为2的指数。

在这里插入图片描述

2. 查看网卡信息

查看新增的4张网卡ens37/38/39/40,已正常添加。

[root@jeven ~]# ip add  |grep ens
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.3.166/24 brd 192.168.3.255 scope global noprefixroute dynamic ens33
120: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.200.215/24 brd 192.168.200.255 scope global noprefixroute dynamic ens37
121: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.200.216/24 brd 192.168.200.255 scope global noprefixroute dynamic ens38
122: ens39: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.200.212/24 brd 192.168.200.255 scope global noprefixroute dynamic ens39
126: ens40: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.200.217/24 brd 192.168.200.255 scope global noprefixroute dynamic ens40

四、Team链路聚合配置

1. 查看team的工作模式

通过teamd.conf查看team的工作模式

man teamd.conf

在这里插入图片描述

2. 创建team0的网络接口

使用 nmcli 命令,添加一个 team 网络接口 team0,我们选择的team模式是activebakup主备模式。

[root@jeven ~]# nmcli connection add type team con-name team0 ifname team0 config '{"runner": {"name": "activebackup"}}'
Connection 'team0' (7d4367b3-4f6b-4fbf-968f-daf110d7292b) successfully added.


3. 配置team0接口的IP地址

配置team0接口的IP地址为192.168.200.126/24

mcli connection modify team0 ipv4.addresses 192.168.200.126/24 ipv4.method manual 

4. 添加team0的子接口

将物理网卡ens37、ens38、ens39、ens40作为team0的子接口。

[root@jeven ~]# nmcli connection add type team-slave con-name team0-port1 ifname ens37 master team0 
Connection 'team0-port1' (66450b15-fdec-48d8-9df4-ba8ab29c8633) successfully added.
[root@jeven ~]#  nmcli connection add type team-slave con-name team0-port2 ifname ens38 master team0
Connection 'team0-port2' (dc869a3b-d9bd-49a7-a1b8-1368e5f2e0db) successfully added.
[root@jeven ~]# nmcli connection add type team-slave con-name team0-port3 ifname ens39 master team0
Connection 'team0-port3' (df21f75f-0343-45e7-9051-f3063cedfee0) successfully added.
[root@jeven ~]# nmcli connection add type team-slave con-name team0-port4 ifname ens40 master team0
Connection 'team0-port4' (58838a61-fb21-443f-a932-959ebd40c21e) successfully added.


5. 激活网卡

重启网络服务

[root@jeven network-scripts]# nmcli con reload 
[root@jeven network-scripts]# nmcli con up team0-port1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/38)
[root@jeven network-scripts]# nmcli con up team0-port2
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/39)
[root@jeven network-scripts]# nmcli con up team0-port3
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/40)
[root@jeven network-scripts]# nmcli con up team0-port4
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/41)


6. 检查team0接口的状态

检查team0接口的状态,当前活动的网卡为ens37。

[root@jeven network-scripts]# teamdctl team0 state
setup:
  runner: activebackup
ports:
  ens37
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
  ens38
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
  ens39
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
  ens40
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
runner:
  active port: ens37

五、测试Team链路聚合

1. 测试team0接口的网络连通情况

在宿主机,ping其team0的IP地址,网络正常。

ping 192.168.200.126 -t 

在这里插入图片描述

1. 停用ens37网卡

在本机停用ens37网卡,在局域网其他主机测试其连通性。

  • 本机停用ens37网卡
[root@jeven ~]# ifdown ens37
Device 'ens37' successfully disconnected.

  • 查看当前team接口状态,可以看到现在ens40网卡接管服务。
[root@jeven ~]# teamdctl team0 state
setup:
  runner: activebackup
ports:
  ens38
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
  ens39
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
  ens40
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
runner:
  active port: ens40

3. 测试网络情况

继续查看网络连通性,网络正常,网络没有中断。

在这里插入图片描述

六、删除子接口操作

1. 删除子接口

查看网卡连接信息

[root@jeven ~]# nmcli con show
NAME                UUID                                  TYPE      DEVICE  
docker0             85baca8e-d2b0-4fdc-bf5d-2d202ae7d2a3  bridge    docker0 
ens33               ba415981-963e-4130-984a-8dd764f4bb70  ethernet  ens33   
team0               7d4367b3-4f6b-4fbf-968f-daf110d7292b  team      team0   
team0-port1         66450b15-fdec-48d8-9df4-ba8ab29c8633  ethernet  ens37   
team0-port2         dc869a3b-d9bd-49a7-a1b8-1368e5f2e0db  ethernet  ens38   
team0-port3         df21f75f-0343-45e7-9051-f3063cedfee0  ethernet  ens39   
team0-port4         58838a61-fb21-443f-a932-959ebd40c21e  ethernet  ens40   
virbr0              d83517b6-f9f1-434b-bf41-dcedb7cb1bde  bridge    virbr0  

删除子接口

[root@jeven ~]# nmcli con delete team0-port4 
Connection 'team0-port4' (58838a61-fb21-443f-a932-959ebd40c21e) successfully deleted.
[root@jeven ~]# nmcli con delete team0-port3
Connection 'team0-port3' (df21f75f-0343-45e7-9051-f3063cedfee0) successfully deleted.

2. 查看网卡信息

查看网卡连接信息

[root@jeven ~]# nmcli con show
NAME                UUID                                  TYPE      DEVICE  
docker0             85baca8e-d2b0-4fdc-bf5d-2d202ae7d2a3  bridge    docker0 
ens33               ba415981-963e-4130-984a-8dd764f4bb70  ethernet  ens33   
team0               7d4367b3-4f6b-4fbf-968f-daf110d7292b  team      team0   
team0-port1         66450b15-fdec-48d8-9df4-ba8ab29c8633  ethernet  ens37   
team0-port2         dc869a3b-d9bd-49a7-a1b8-1368e5f2e0db  ethernet  ens38   
virbr0              d83517b6-f9f1-434b-bf41-dcedb7cb1bde  bridge    virbr0  
Wired connection 4  02e53166-ccb4-38cf-b922-a5ffd8c549e5  ethernet  ens40   
Wired connection 1  2650ffb4-2ebf-361f-b30f-489f12a7b889  ethernet  --      
Wired connection 2  412789b9-ffeb-3280-8129-8c4465f0a779  ethernet  --      
Wired connection 3  80a0f41d-942f-3e88-8d22-c63604519d15  ethernet  -- 

查看team接口状态

[root@jeven ~]# teamdctl team0 state 
setup:
  runner: activebackup
ports:
  ens37
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
  ens38
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
        down count: 0
runner:
  active port: ens38

3. 重启team0

重启team0,查看当前网络连接状态,ens39/40两张网卡已停止使用。

[root@jeven network-scripts]# nmcli con reload 
[root@jeven network-scripts]# nmcli con up team0
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/52)
[root@jeven network-scripts]# nmcli con show
NAME                UUID                                  TYPE      DEVICE  
docker0             85baca8e-d2b0-4fdc-bf5d-2d202ae7d2a3  bridge    docker0 
ens33               ba415981-963e-4130-984a-8dd764f4bb70  ethernet  ens33   
team0               7d4367b3-4f6b-4fbf-968f-daf110d7292b  team      team0   
team0-port1         66450b15-fdec-48d8-9df4-ba8ab29c8633  ethernet  ens37   
team0-port2         dc869a3b-d9bd-49a7-a1b8-1368e5f2e0db  ethernet  ens38   
virbr0              d83517b6-f9f1-434b-bf41-dcedb7cb1bde  bridge    virbr0  
Wired connection 1  2650ffb4-2ebf-361f-b30f-489f12a7b889  ethernet  --      
Wired connection 2  412789b9-ffeb-3280-8129-8c4465f0a779  ethernet  --      
Wired connection 3  80a0f41d-942f-3e88-8d22-c63604519d15  ethernet  --      
Wired connection 4  02e53166-ccb4-38cf-b922-a5ffd8c549e5  ethernet  --