前言
为了提高网络容错或吞吐量,一般服务器都会采取多网卡绑定的策略,在RHEL6中使用的是Bond,而RHEL7/8提供了一项新的实现技术Team,Team是通过内核模块和一个用户空间服务来处理操作。Team是另一种聚合方式,不会取代红帽企业 Linux 6/7 中的bonding。Team实现为负载平衡和冗余要求提供了一个易于扩展和可扩展的解决方案。Team由内核驱动和teamd守护进程实现。Bond和Team有多种方式:nmclii命令、配置文件、nmtui、nm-connection-editor图形界面、cockpit(web配置)方式。
官方说明:在 Red Hat Enterprise Linux 9 中已被弃用Team。如果您计划将服务器升级到将来的 RHEL 版本,请考虑使用内核绑定驱动程序作为替代方案
一、Bond的实现
使用nmcli方式创建bonding
1、bind的绑定模式:
绑定模式 | 交换机上的配置 | |
0 - balance-rr | 轮询策略 | 需要启用静态的 Etherchannel(未启用 LACP 协商) |
1 - active-backup | 主备策略 | 需要可自主端口 |
2 - balance-xor | 异或策略 | 需要启用静态的 Etherchannel(未启用 LACP 协商) |
3 - broadcast | 广播策略 | 需要启用静态的 Etherchannel(未启用 LACP 协商) |
4 - 802.3ad | 动态链路聚合 | 需要启用 LACP 协商的 Etherchannel |
5 - balance-tlb | 适配器传输负载均衡 | 需要可自主端口 |
6 - balance-alb | 适配器负载均衡 | 需要可自主端口 |
有关在交换机中配置这些设置,请查看交换机文档。
常用的有三种
mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。
mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。
2、创建名称为bond1的绑定
[root@localhost ~]# nmcli con add type bond con-name bond1 ifname bond1 mode active-backup
Connection 'bond1' (74659382-3e46-4a95-851d-66f90b2ece30) successfully added.
3、给bond1配置IP
[root@localhost ~]# nmcli connection modify bond1 ipv4.addresses 192.168.2.200/24 ipv4.gateway 192.168.2.1
4、将两个网卡enp0s3、enp0s8增加到bond1
root@localhost ~]# nmcli connection add type bond-slave ifname enp0s3 master bond1
Connection 'bond-slave-enp7s0f0' (061f5c5c-3366-4025-8149-7c89e49ab1b3) successfully added.
[root@localhost ~]# nmcli connection add type bond-slave ifname enp0s8 master bond1
Connection 'bond-slave-enp0s8' (45440593-243e-4618-ab1a-0845555e11c1) successfully added.
bond获取mac地址有两种方式:
1)、从第一个活跃网卡中获取mac地址,然后其余的SLAVE网卡的mac地址都使用该mac地址;
2)、bond组使用当前活跃网卡的mac地址,mac地址随活跃网卡的转换而变。
虚拟机(vmware workstation、 virtualbox)不支持第一种获取mac地址的方式,那么需要使用fail_over_mac=1参数,所以这里我们添加fail_over_mac=1参数
vmware workstation虚拟机配置双网卡时需要设置fail_over_mac
# nmcli c modify bond0 bond.options fail_over_mac=1 mode active-backup
设置时,必须同时设置mode参数,否则会报错。
也可以通过修改bond0的配置文件ifcfg-bond0中添加如下行信息
# BONDING_OPTS="fail_over_mac=1 mode=active-backup"
5、启动bonging
启动从属接口enp0s3
[root@localhost ~]# nmcli connection up bond-slave-enp0s3
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
启动从属接口enp0s8
[root@localhost ~]# nmcli connection up bond-slave-enp0s8
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
启动bind1
[root@localhost ~]# nmcli connection up bond1
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/Act
6、查看绑定情况
[root@localhost ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active)
Primary Slave: None
Currently Active Slave: enp0s3
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: enp0s3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:28:29:09
Slave queue ID: 0
Slave Interface: enp0s8
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 08:00:27:79:25:30
Slave queue ID: 0
7、验证bond是否配置成功
在客户端电脑上ping 192.168.2.200,断开其中一个网卡后是否有超时,如果有多个超时或丢包则异常。
二、Team的实现
team的聚合方式:broadcast、roundrobin、activebackup、loadbalance、lacp
1、创建team0接口
[root@localhost ~]# nmcli con add type team con-name team0 ifname team0 config '{"runner":{"name":"activebackup"}}'
#nmcli con add type team con-name CNAME ifname INAME [config JSON] 3 #CNAME 指代连接的名称,INAME 是接口名称,JSON (JavaScript Object Notation) 指定所使用的处理器(runner)。 4 #JSON语法格式:'{"runner":{"name":"METHOD"}}' METHOD 是以下的其中一个:broadcast、activebackup、roundrobin、loadbalance 或者lacp。
2、查看网络接口名称及状态,并记录要添加到team中的接口名称
[root@localhost ~]# nmcli device status
DEVICE TYPE STATE CONNECTION
team0 team 已连接 team0
enp0s3 ethernet 已连接 team0-p1
enp0s8 ethernet 已连接 team0-p2
3、将接口加入team中
[root@localhost ~]# nmcli con add type team-slave con-name team0-p1 ifname enp0s3 master team0
[root@localhost ~]# nmcli con add type team-slave con-name team0-p2 ifname enp0s8 master team0
如果原来有配置bond,直接将现有连接配置中的 master 参数设置为 team0 :
# nmcli connection modify bond-slave-enp0s8 master team0
# nmcli connection modify bond-slave-enp0s3 master team0
这些命令将名为 bond-slave-enp0s3 和 bond-slave-enp0s8 的现有连接配置文件分配给 team0 连接。
4、为team配置IP信息
[root@localhost ~]# nmcli con modify team0 ipv4.addresses 192.168.2.200/24 ipv4.gateway 192.168.2.1 ipv4.method manual
5、激活接口
[root@localhost ~]# nmcli con reload # 重载网络配置信息
[root@localhost ~]# nmcli con up team0-p1
[root@localhost ~]# nmcli con up team0-p2
[root@localhost ~]# nmcli con up team0
# 查看接口状态
[root@localhost ~]# nmcli con show
NAME UUID TYPE DEVICE
team0 6cec7dad-005a-46cb-86d7-c6296417d5a4 team team0
virbr0 921ed677-2dba-4f5a-9e1f-416b38d8fdb0 bridge virbr0
team0-p1 bc960b2c-0bb2-42cd-8adb-0a5fc1d5dd67 ethernet enp0s3
team0-p2 b7e2778d-5c05-47a6-9cb7-e15ba3d56451 ethernet enp0s8
6、查看team状态
[root@localhost ~]# teamdctl team0 state
setup:
runner: activebackup
ports:
enp0s3
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
enp0s8
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
runner:
active port: enp0s3
7、team删除命令
[root@localhost ~]# nmcli connection delete team0
[root@localhost ~]# nmcli connection delete team0-port1
[root@localhost ~]# nmcli connection delete team0-port2
8、更改team的模式
# 修改为轮巡模式
[root@localhost ~]# nmcli connection modify team0 config '{"runner":{"name":"roundrobin"}}'
[root@localhost ~]# nmcli connection reload
[root@localhost ~]# nmcli con up team0