概念
网络组Network Teaming是为了实现容错和提高吞吐量而将多个网卡聚合在一起的方法。
在生产中为了提高服务器的网络吞吐量我们会使用带宽更高的网卡,但是带宽非常高的网卡对于只需要提升一两倍或者几倍性能的情况来说网卡价格昂贵不说还非常没有必要,同时一张网卡如果坏了那便是导致服务器断开网络,造成的损失就大了。所以网络组和bonding便出现了。
操作部分
准备
环境:CentOS7.3
组建网络组的话网卡当然是需要两个及两个以上,我这里就用两个网卡来做实验。
网络组有很多种模式,我用activebackup(主备)这种模式来做实验,这种模式在工作的时候只有一个设备处于激活状态,当这个激活状态的设备连接失败后便会启用另一个设备,主要是防止单点失败。
组建
第一步,创建team0
在CentOS7上我们可以用nmcli这个强大的网络管理工具来完成一系列的操作。
要注意的是,如果系统是以最小化模式安装的话nmcli用tab键是不能补全的,需要装一个插件bash-completion.noarch重启后开启补全功能。
[root@mini7 ~]# nmcli connection add type team con-name team0 ifname team0 config '{"runner":{"name":"activebackup"}}' Connection 'team0' (725377eb-8f94-421c-b28b-1a555a3ea128) successfully added. [root@mini7 ~]#
执行上面的命令后网络组team0就创建成功了,其实不用担心上面的命令这么长,因为nmcli这个命令后面的东西都是可以tab补全的。
我依次解释一下刚才的命令是什么意思:
nmcli connection 就不做解释了
add 是表示添加
type team 是表示添加的连接类型是team
con-name team0 表示新的连接名字叫team0
ifname team0 表示新的连接的设备名叫team0
config '{"runner":{"name":"activebackup"}}' 这一段表示网络组的模式的格式,其中 activebackup表示了网络组的模式
[root@mini7 ~]# nmcli connection NAME UUID TYPE DEVICE Wired connection 1 2a16d1fd-1639-3ee6-9eeb-2272b211ad91 802-3-ethernet ens37 ens33 ff82d2dd-7cb6-4712-99b1-767772f698bb 802-3-ethernet ens33 team0 725377eb-8f94-421c-b28b-1a555a3ea128 team team0 [root@mini7 ~]#
通过nmcli connection命令可以查看到team0已经创建成功了
第二步,设置team0的IP地址
其实设置IP地址可以和上一步一起执行的,但是为了更清晰的了解整个过程所以分开执行。
[root@mini7 ~]# nmcli connection modify team0 ipv4.method manual ipv4.addresses 192.168.100.100/24 [root@mini7 ~]#
执行上面的命令后便将team0的IP地址设置为了192.168.100.100/24,这里有一个非常重要的问题。
ipv4.method manual 的意思是不使用DHCP服务,使用静态地址的意思,如果不加上这一段命令的话,即使后面配置上了IP地址也没有用。
现在team0已经创建,IP地址也已经设置好了,但是现在并没有具体的网卡设备接入,所以下一步就是接入网卡设备。
第三步,接入网卡设备
team0已经创建好,现在只要接入两个及两个以上网卡设备就完成整个网络组的组建了。
[root@mini7 ~]# ip a | grep ens 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 172.17.254.4/16 brd 172.17.255.255 scope global dynamic ens33 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 192.168.179.134/24 brd 192.168.179.255 scope global dynamic ens37 [root@mini7 ~]#
首先先查看一下我现在的网卡设备有哪些可以用于组建网络组,可以从上面的结果看到,ens33和ens37都可以用来组建网络组,那么行动吧。
[root@mini7 ~]# nmcli connection add type team-slave ifname ens33 con-name team0-ens33 master team0 Connection 'team0-ens33' (9f65fb1e-ed8f-4068-8d6f-a2253fa399ca) successfully added. [root@mini7 ~]# nmcli connection add type team-slave ifname ens37 con-name team0-ens37 master team0 Connection 'team0-ens37' (5018e9c0-09ef-435b-b98e-7b36a7fb3f31) successfully added.
又是一长串代码,不要慌,容我慢慢解释,其实并不难的。
nmcli connection add 这一段就不解释了,和上面是一样的
type team-slave 这里表示的是这个设备是team的从属设备
con-name 和ifname 与上面是相同的,不作解释
重点来了:master team0 这个的意思是这个设备属于team0这个网络组
第四步,启动设备
虽然我们在上面已经将整个网络组组建完毕,但是目前的状态设备是没有启动的,所以我们需要将整个网络组启用并处于工作状态。
[root@mini7 ~]# nmcli connection up team0 Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3) [root@mini7 ~]# nmcli connection up team0-ens33 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4) [root@mini7 ~]# nmcli connection up team0-ens37 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5) [root@mini7 ~]#
执行nmcli connection up 这个命令是启动设备的意思,通过上述命令设备已经启动完毕。
值得注意的是,如果是用Xshell等远程工具连接的虚拟机的话此时是会断开连接的,需要在虚拟化工具上操作。
测试
既然网络组已经组建完毕而且也启动了,那么就该开始进行最有意思的环节了——测试。
首先,我们可以通过属于teamd.x86_64这个包的工具teamdctl来查看网络组的运行情况。
[root@mini7 ~]# teamdctl team0 state setup: runner: activebackup ports: ens33 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 ens37 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 runner: active port: ens33 //可以看到正在运行的设备是ens33 [root@mini7 ~]#
通过上面的命令我们可以看到现在在运行的网卡是ens33,那么我们现在断开ens33模拟设备损坏试试。
如图,把已连接的对勾去掉然后点击确定,或者在虚拟机界面右下角断开网卡设备。
现在我们再来看看网络组的状态
[root@mini7 ~]# teamdctl team0 state setup: runner: activebackup ports: ens33 link watches: link summary: down instance[link_watch_0]: name: ethtool link: down //连接状态已经变成了down down count: 1 ens37 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 runner: active port: ens37 //可以看到现在运行的设备是ens37 [root@mini7 ~]#
如上面的结果,当我把ens33网卡断开后,ens37网卡自动就顶替上了刚才ens33的位置,这就避免了单点失败,可靠性直线上升有没有。
撤销网络组
有组建当然就有撤销,撤销网络组其实是可以直接删除配置文件的,但是我这里还是要讲一讲标准的撤销操作是什么样的。
注意:不管是哪种撤销方式都必须先停止设备。
第一步,down掉设备
[root@mini7 ~]# nmcli connection down team0 Connection 'team0' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3) [root@mini7 ~]#
这里值得一提的是down掉team0的时候设备team0-ens33和team0-ens37一起被down掉了,但是如果只down掉team0-ens33或者team0-ens37其中的一个的话只有那一个会被down掉,而且当网络组down掉后之前的连接会重新接入,IP地址恢复到之前的状态(ens33在我down掉team0前重新连接上了)。
现在我虽然down掉了网络组,但是配置文件都是还在的。
[root@mini7 ~]# ls /etc/sysconfig/network-scripts/ | grep team ifcfg-team0 ifcfg-team0-ens33 ifcfg-team0-ens37 [root@mini7 ~]#
可以看到网络组的配置文件还在。
第二步,删除连接(配置文件)
[root@mini7 ~]# nmcli connection delete team0 Connection 'team0' (725377eb-8f94-421c-b28b-1a555a3ea128) successfully deleted. [root@mini7 ~]# nmcli connection delete team0-ens33 Connection 'team0-ens33' (9f65fb1e-ed8f-4068-8d6f-a2253fa399ca) successfully deleted. [root@mini7 ~]# nmcli connection delete team0-ens37 Connection 'team0-ens37' (5018e9c0-09ef-435b-b98e-7b36a7fb3f31) successfully deleted. [root@mini7 ~]#
执行nmcli connection delete 便可以删除连接,这个命令和直接删除配置文件的效果是一样的。
那现在我们再来看看配置文件里还有没有网络组的配置文件
[root@mini7 ~]# ls /etc/sysconfig/network-scripts/ | grep team [root@mini7 ~]#
可以看到已经删除干净了。
总结
网络组是CentOS7的新特性,在性能和功能上要比以往的bonding性能更强功能更多,在CentOS7大面积使用以后网络组也必然会被大量应用,所以不管是用于生产中还是用于参加技能考试,组建网络组是一个必要的技能。