CentOS 7 配置网络组
- CentOS 7 配置网络组
- 网络组简介
- 选择网络组的配置方法
- 网络组主接口及从属接口的默认行为
- 创建网络组
- 实验前准备
- 创建主设备team0
- 创建team0从属设备
- 生效team0主从设备接口
- 查看team0状态
- 更改team0模式
- 重新生效接口
- 删除team0取消网络组
- 总结
网络组简介
网络组(Network Teaming)是在RHEL 7和CentOS 7中新出现的一种网络技术应用,是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量。是实现bonding功能的一种最新技术应用。网络组由内核驱动和teamd守护进程实现,旨在通过提供小内核驱动程序,实现数据包流的快速处理,以便提供更好性能。简单来说就是,网络组可以在牺牲更少系统资源的情况下,实现比bonding更优的性能,提供更好的性能和扩展性。bonding所具有的网络负载均衡、网络冗余高可用等优点,网络组同样拥有。
要介绍网络组咱们还要再介绍一下bonding,所谓bonding就是将多块网卡绑定同一IP地址对外提供服务。可以实现网卡的带宽扩容、高可用或者负载均衡,具体的功能取决于采用的哪种bonding模式。更多关于bonding的介绍可以看我前面关于如何在CentOS 6配置bonding的文章,在这里就不多做介绍了。今天要谈的网络组则bonding功能的全新实现方案。
本人在查看红帽官方提供的网络组相关文档时,看到里面提到bonding和网络组的功能对比,网络组可以说是完胜bonding。但这也只是官方的一面之词,由于是新技术,生产中的实际应用还没有普及,孰优孰劣还有待实践的检验,但这并不妨碍我们去尝试和了解它,接下来我会说明一下网络组的配置及使用过程中的注意事项。
补充说明:网络组在RHEL 7和CentOS 7中是作为bonding的备选方案提供的,并不会影响现有的bonding驱动程序,不会替换 RHEL 7 和CentOS 7中原有的bonding功能。所以你也没必要担心在CentOS 7不能使用bonding功能。
选择网络组的配置方法
在CentOS 7中对于网络组的配置提供了多种方法,下面列出的多种方法都可以实现网络组的配置。由于篇幅原因无法挨个演示如何配置,所以我挑选了相对简单,较为常用的命令行工具 nmcli,来演示如何创建网络组。
网络组的常见配置方法:
- 使用 NetworkManager 的文本用户界面工具 nmtui 配置网络组
- 使用命令行工具 nmcli 创建网络组
- 使用网络组守护进程 teamd 创建网络组
- 使用配置文件创建网络组
- 使用图形用户界面配置网络组
网络组主接口及从属接口的默认行为
在配置和使用网络组的过程中,特别是发现错误时,请记住以下要点:
- 启动主接口不会自动启动端口接口。
- 启动端口接口总是会启动主接口。
- 停止主接口总是会停止端口接口。
- 没有端口的主机可启动静态 IP 连接。
- 没有端口的主机在启动 DHCP 连接时会等待端口。
- 添加附带载波的端口后,使用 DHCP 连接的主机会等待端口完成连接
- 添加不附带载波的端口后,使用 DHCP 连接的主机会让端口继续等待。
创建网络组
实现网络组至少需要两块网卡,这是最低配置要求,请在配置前做好准备工作。
由于不同主机的网卡名可能会有不同,所以实验前请先用ifconfig命令确认好自己的网卡名,以避免因在命令里敲错网卡名导致实验不能成功。
实验中需要注意的地方我会在命令行前以“*”标注
接下来网络组的配置过程中还会用到在CentOS 7中功能非常强大的nmcli工具,nmcli命令几乎可以完成CentOS 7中所有的网络配置,本次是使用命令行工具 nmcli来创建网络组的,所以我在创建网络组的过程中会简单介绍几个nmcli命令的常见用法。
实验前准备
注意自己的网卡名,配置时不要写错,参与网络组的网卡现在都应该能看到,并且是正常工作的。
root&Centos7: ~#ifconfig
*ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.22.200 netmask 255.255.0.0 broadcast 172.18.255.255
inet6 fe80::20c:29ff:fe17:4da prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:17:04:da txqueuelen 1000 (Ethernet)
RX packets 512010 bytes 43078494 (41.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 35884 bytes 54323115 (51.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
*ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.22.20 netmask 255.255.0.0 broadcast 172.18.255.255
inet6 fe80::d257:f022:b22e:6c8e prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:17:04:e4 txqueuelen 1000 (Ethernet)
RX packets 482288 bytes 37695537 (35.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 414 bytes 41817 (40.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
创建主设备team0
root&Centos7: ~# cd /etc/sysconfig/network-scripts/
#建议创建活动在/etc/sysconfig/network-scripts/目录下进行,方便使用ls或cat命令查看生成的配置文件。
root&Centos7: network-scripts# nmcli connection add con-name team0 type team ifname team0
config '{"runner":{"name":"loadbalance"}}'
#这条nmcli命令的作用是创建一个名为team0的设备,设备类型是team(team类型设备是专用于网络组的设备类型),接口名称是team0,config后面指定的是网络组的工作模式,需要按特定格式来写。'{"runner":{"name":"模式名"}}'
Connection 'team0' (75dbdd85-c78d-4617-9ece-0f3c69dd6616) successfully added.
#team0主设备创建成功的提示
root&Centos7: network-scripts# cat ifcfg-team0
#使用cat命令查看创建生成的ifcfg-team0配置文件。使用ls命令在当前目录下如果找不到ifcfg-team0这个配置文件,这说明刚才的创建活动失败。下面是创建成功后,配置文件里的内容。
DEVICE=team0
#设备名team0,是由我们上面的nmcli命令指定生成的
*TEAM_CONFIG="{\"runner\":{\"name\":\"loadbalance\"}}"
#网络组的工作模式loadbalance,轮询模式。
*BOOTPROTO=dhcp
#这里写的是dhcp,说明我们的team0设备是使用dhcp自动获取ip的
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=team0
UUID=75dbdd85-c78d-4617-9ece-0f3c69dd6616
ONBOOT=yes
DEVICETYPE=Team
#在这可以看到刚才指定的设备类型team
创建team0从属设备
root&Centos7: network-scripts#nmcli connection add type team-slave ifname ens32 master team0
#这一步的作用是将ens32网卡的设备类型改为team-slave,指定此网卡从属于team0设备
Connection 'team-slave-ens32' (0de582b1-6818-43e5-a7f0-e66e6e656227) successfully added.
#添加从属设备成功的提示,成功后会生成一个名为ifcfg-team-slave-ens32的配置文件
root&Centos7: network-scripts#nmcli connection add type team-slave ifname ens34 master team0
#对第二块网卡的设置,
Connection 'team-slave-ens34' (4cf10d5e-7542-4d16-9b7c-e1b914048177) successfully added.
root&Centos7: network-scripts#nmcli connection show
#这条命令可以查看本机的网络设备,包括名称、UUID、类型、设备名。如果DEVICE这一列下没有设备名,只有两道杠,则说明设备,没有生效。显然这里我们创建的从属设备是没有生效的。
NAME UUID TYPE DEVICE
ens32 152beb06-47c5-c5e8-95a9-385590654382 802-3-ethernet ens32
ens34 94aea789-efb3-ef4c-81b0-e8b18ecc9797 802-3-ethernet ens34
*team0 75dbdd85-c78d-4617-9ece-0f3c69dd6616 team team0
*team-slave-ens32 0de582b1-6818-43e5-a7f0-e66e6e656227 802-3-ethernet --
*team-slave-ens34 4cf10d5e-7542-4d16-9b7c-e1b914048177 802-3-ethernet --
生效team0主从设备接口
root&Centos7: network-scripts#nmcli connection up team0
#生效team0的设备接口
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
root&Centos7: network-scripts#nmcli connection up team-slave-ens32
#生效从属设备team-slave-ens32的接口
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
root&Centos7: network-scripts#nmcli connection up team-slave-ens34
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
root&Centos7: network-scripts#nmcli connection show
NAME UUID TYPE DEVICE
*team-slave-ens32 0de582b1-6818-43e5-a7f0-e66e6e656227 802-3-ethernet ens32
*team-slave-ens34 4cf10d5e-7542-4d16-9b7c-e1b914048177 802-3-ethernet ens34
*team0 75dbdd85-c78d-4617-9ece-0f3c69dd6616 team team0
ens32 152beb06-47c5-c5e8-95a9-385590654382 802-3-ethernet --
ens34 94aea789-efb3-ef4c-81b0-e8b18ecc9797 802-3-ethernet --
#主从设备的最后一项没有了两条杠,说明生效成功
查看team0状态
root&Centos7: network-scripts#ip a
#使用ip a 查看现在的网卡状态你会发现,ens32,ens34的ip地址没有了,并且显示的信息里有 master team0 字样。ens32,ens34,team0三个设备共用一个MAC地址,
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
*2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP qlen 1000
link/ether 00:0c:29:17:04:da brd ff:ff:ff:ff:ff:ff
*3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP qlen 1000
link/ether 00:0c:29:17:04:da brd ff:ff:ff:ff:ff:ff
*4: team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 00:0c:29:17:04:da brd ff:ff:ff:ff:ff:ff
inet 172.18.253.76/16 brd 172.18.255.255 scope global dynamic team0
valid_lft 86254sec preferred_lft 86254sec
inet6 fe80::948c:8f84:8438:d24/64 scope link
valid_lft forever preferred_lft forever
root&Centos7: network-scripts#teamdctl team0 state
#使用网络组管理命令teamdctl,查看team0的状态
setup:
* runner: loadbalance
ports:
ens32
link watches:
*link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
ens34
link watches:
* link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
更改team0模式
网络组支持多种工作方式,常用的有runner:broadcast(广播)、activebackup(主备)、loadbalance(轮转)、roundrobin、lacp。在一开始创建team0主设备时,使用的是loadbalance(轮转)方式,接下来我会通过修改ifcfg-team0配置文件,来将工作模式改为broadcast(广播)模式。
root&Centos7: network-scripts#vim ifcfg-team0
DEVICE=team0
*TEAM_CONFIG="{\"runner\":{\"name\":\"loadbalance\"}}"
#将这一行里的loadbalance改为broadcast,保存退出。
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=team0
UUID=75dbdd85-c78d-4617-9ece-0f3c69dd6616
ONBOOT=yes
DEVICETYPE=Team
重新生效接口
这一步非常重要,修改配置文件后一定不要忘了重新生效接口。对于网络组的主从接口有很多地方需要注意,否则会发生很多莫名的错误。关于网络组主接口及从属接口的默认行为,我在文章的前面部分已经写过了,没有仔细看的话,建议翻上去再认真看一遍。
root&Centos7: network-scripts#nmcli connection down team0
#down掉team0接口
Connection 'team0' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
#成功的提示信息
root&Centos7: network-scripts#nmcli connection up team0
#重新up team0接口
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/10)
root&Centos7: network-scripts#nmcli connection up team-slave-ens32
#up team-slave-ens32接口
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/11)
root&Centos7: network-scripts#nmcli connection up team-slave-ens34
#up team-slave-ens34接口
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/12)
root&Centos7: network-scripts#teamdctl team0 state
setup:
runner: loadbalance
ports:
ens32
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
ens34
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
删除team0,取消网络组
root&Centos7: network-scripts#nmcli connection down team0
#禁用team0设备
Connection 'team0' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/10)
root&Centos7: network-scripts#nmcli connection delete team0
#删除team0设备
Connection 'team0' (75dbdd85-c78d-4617-9ece-0f3c69dd6616) successfully deleted.
root&Centos7: network-scripts#nmcli connection delete team-slave-ens32
#删除team0的从属设备team-slave-ens32
Connection 'team-slave-ens32' (0de582b1-6818-43e5-a7f0-e66e6e656227) successfully deleted.
root&Centos7: network-scripts#nmcli connection delete team-slave-ens34
Connection 'team-slave-ens34' (4cf10d5e-7542-4d16-9b7c-e1b914048177) successfully deleted.
root&Centos7: network-scripts#ip a
#完成上面的四步操作后,你会发现网卡ens32和ens34的IP地址又回来了,team0设备也没有了
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
*2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:17:04:da brd ff:ff:ff:ff:ff:ff
inet 172.18.22.200/16 brd 172.18.255.255 scope global ens32
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe17:4da/64 scope link
valid_lft forever preferred_lft forever
*3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:17:04:e4 brd ff:ff:ff:ff:ff:ff
inet 172.18.22.20/16 brd 172.18.255.255 scope global ens34
valid_lft forever preferred_lft forever
inet6 fe80::d257:f022:b22e:6c8e/64 scope link
valid_lft forever preferred_lft forever
总结
总结一下配置网络组的思路
第一步,创建网络组的主设备
第二步,创建网络组的从属设备
第三步,生效参与网络组的各主从接口
更改配置文件后,记得要重新生效各主从接口。
删除网络组之前,要先禁用网络组的主设备,再开始删除步骤。
实验过程中注意检查,一步一检查,有助于及时发现问题解决问题,是一个值得培养的好习惯。
关于网络组的更多资料可以去红帽官网查看,链接在下面。
https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/ch-Configure_Network_Teaming.html