如何使用nmcli创建或者配置NIC组合(CentOS/RHEL 7/8)
在本文中,我将通过各种示例分享使用nmcli(NetworkManager)(在RHEL和CentOS 7和8上验证)"配置NIC组"或者"网络组"的分步指南。
红帽企业Linux 7通过一个小的内核驱动程序和一个用户空间的守护程序" teamed"来实现"网络分组"。
内核有效地处理网络数据包,"团队"处理逻辑和接口处理。名为" runners"的软件可实现负载平衡和主动备份逻辑,例如" roundrobin"。以下赛运行者可以分组。
广播:一个简单的运行程序,可以从所有端口传输每个pac。
"轮询":一个简单的运行程序,它从每个端口以鲁棒方式传输数据包。
activebackup:这是一个故障转移运行器,它监视链接更改并选择一个活动端口进行数据传输。
" loadbalance:"该运行程序监视流量,并在选择用于传输数据包的端口时使用哈希功能尝试达到完美的平衡。
lacp:实现802.3ad链路聚合控制协议。可以使用与负载均衡运行器相同的传输端口选择可能性。
以下runners
可供teamed
使用
runner | 介绍 |
---|---|
广播 | 从所有端口传输seach数据包的简单运行程序 |
roundrobin | 以循环方式从每个端口传输数据包的简单运行程序。 |
activebackup | 这是一个故障转移运行程序,它监视链路更改并为数据传输选择活动端口 |
loadbalance | 此运行程序监视流量,并使用哈希函数在选择用于数据包传输的端口时尝试达到完美的平衡。 |
lacp | 实现802.3ad链路聚合控制协议。可以使用与负载平衡运行程序相同的传输端口选择可能性。 |
所有网络交互都是通过团队接口完成的,该接口由多个网络端口接口组成。当使用NetworkManager
控制成组的端口接口时,尤其是在发现故障时,请牢记以下几点:
启动网络组接口不会自动启动端口接口。
启动端口接口始终会启动组合接口。
停止组合的接口也将停止端口接口。
没有端口扫描的成组接口将启动静态IP连接。
没有端口的团队在启动DHCP连接时会等待端口。
配置NIC分组
nmcli命令可用于创建和管理团队和端口接口。以下四个步骤用于创建,激活和配置NIC分组接口:
创建团队界面。
确定团队接口的IPv4和/或者IPv6属性。
分配端口接口。
打开/关闭组和端口接口。
创建team界面
使用" nmcli"命令使用以下语法为网络团队接口创建连接:
语法:
nmcli con add type team con-name CNAME ifname INAME [config JSON]
其中," CNAME"是用于引用连接的名称," INAME"是接口名称,而" JSON"指定要使用的运行程序。 JSON具有以下语法:
'{"runner":{"name":"METHOD"}}'
其中" METHOD"是以下之一:广播,循环,活动备份,负载平衡或者lacp。
使用nmcli创建team界面连接配置文件
以下命令将创建一个名为" myteam"的连接配置文件,该配置文件将提供一个名为" team0"的团队设备。团队模式将是" activebackup",并且将使用" ethtool"链接监视:
使用静态IP寻址:
# nmcli connection add type team con-name myteam ifname team0 config '{"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}' ip4 192.151.27.17/32 gw4 192.151.27.62 Connection 'myteam' (6d3af1ac-dc3f-49a1-9c20-f7eed14636b1) successfully added.
执行上述命令后我的示例配置文件
# cat ifcfg-myteam DEVICE=team0 TEAM_CONFIG="{"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}" BOOTPROTO=none IPADDR=192.151.27.17 PREFIX=32 GATEWAY=192.151.27.62 DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=myteam UUID=6d3af1ac-dc3f-49a1-9c20-f7eed14636b1 ONBOOT=yes DEVICETYPE=Team
使用DHCP寻址:
# nmcli connection add type team con-name myteam ifname team0 config '{"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}'
分配端口接口
使用" nmcli"命令使用以下语法创建每个端口接口:
nmcli con add type team-slave con-name CNAME ifname INAME master TEAM
其中," CNAME"是用于引用端口的名称," INAME"是现有接口的名称,而" TEAM"指定网络团队接口的连接名称。
为每个团队端口(从属)创建一个配置文件。
master参数必须引用团队设备名称,而不是团队配置文件名称。在下面的示例中,将eno53
和eno54
接口添加到team0
中:
# nmcli connection add type team-slave con-name myteam-port1 ifname eno53 master team0 Connection 'myteam-port1' (02d469f7-5bf1-4ea6-82ea-9e0007d19afe) successfully added. # nmcli connection add type team-slave con-name myteam-port2 ifname eno54 master team0 Connection 'myteam-port2' (386a0f1a-b017-462d-8f77-786d0d661217) successfully added.
我的奴隶示例配置文件
# cat ifcfg-myteam-port1 NAME=myteam-port1 UUID=02d469f7-5bf1-4ea6-82ea-9e0007d19afe DEVICE=eno53 ONBOOT=yes TEAM_MASTER=team0 DEVICETYPE=TeamPort
# cat ifcfg-myteam-port2 NAME=myteam-port2 UUID=386a0f1a-b017-462d-8f77-786d0d661217 DEVICE=eno54 ONBOOT=yes TEAM_MASTER=team0 DEVICETYPE=TeamPort
验证更改
[root@openstack ~]# ifconfig team0 team0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.151.27.17 netmask 255.255.255.255 broadcast 192.151.27.17 inet6 fe80::2084:8dda:d77f:9e61 prefixlen 64 scopeid 0x20 ether d2:06:75:eb:a5:2e txqueuelen 1000 (Ethernet) RX packets 3 bytes 214 (214.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 115 bytes 25305 (24.7 KiB) TX errors 0 dropped 4 overruns 0 carrier 0 collisions 0
打开另一个终端并通过" team0"接口对本地网络网关执行ping操作。在执行以下步骤时,让此ping继续运行
# ping -I team0 192.151.27.62 PING 192.151.27.62 (192.151.27.62) from 192.151.27.17 team0: 56(84) bytes of data. 64 bytes from 192.151.27.62: icmp_seq=1 ttl=64 time=2.47 ms 64 bytes from 192.151.27.62: icmp_seq=2 ttl=64 time=3.05 ms ^C --- 192.151.27.62 ping statistics -- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 2.475/2.764/3.054/0.294 ms
打开/关闭组和端口接口
可以使用以下语法使用nmcli命令来管理组和端口接口的连接:
nmcli dev dis INAME nmcli con up CNAME
" INAME"是要管理的组或者端口接口的设备名称。 " CNAME"是该接口的连接名称,其中" CNAME"是要管理的组或者端口接口的连接名称。
通过" teamdctl"程序确认团队正在按预期工作。至少要确保使用了正确的运行程序,否则连接可能无法正常工作:
# teamdctl team0 state setup: runner: activebackup ports: eno53 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 eno54 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 runner: active port: eno53
打开一个新终端,让我们在team0中关闭活动界面eno53,并检查影响
# nmcli dev dis eno53 Device 'eno53' successfully disconnected.
# ping -I team0 192.151.27.62 PING 192.151.27.62 (192.151.27.62) from 192.151.27.17 team0: 56(84) bytes of data. 64 bytes from 192.151.27.62: icmp_seq=1 ttl=64 time=7.44 ms 64 bytes from 192.151.27.62: icmp_seq=2 ttl=64 time=9.84 ms 64 bytes from 192.151.27.62: icmp_seq=3 ttl=64 time=4.36 ms 64 bytes from 192.151.27.62: icmp_seq=63 ttl=64 time=77.4 ms ^C --- 192.151.27.62 ping statistics -- 63 packets transmitted, 63 received, 0% packet loss, time 62092ms rtt min/avg/max/mdev = 0.586/14.202/125.945/18.422 ms
但是对我的活动连接没有影响,活动端口更改为eno54
。
# teamdctl team0 state setup: runner: activebackup ports: eno54 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 runner: active port: eno54
恢复原始端口接口,并降低另一个端口接口。但是在此之前,让我们获取" port1"的连接名称。
# nmcli con show NAME UUID TYPE DEVICE myteam 6d3af1ac-dc3f-49a1-9c20-f7eed14636b1 team team0 myteam-port2 386a0f1a-b017-462d-8f77-786d0d661217 802-3-ethernet eno54 myteam-port1 02d469f7-5bf1-4ea6-82ea-9e0007d19afe 802-3-ethernet -
所以从上面的输出中我们知道myteam-port1
是'inactive',所以让它恢复运行。
# nmcli con up myteam-port1 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/94) # nmcli dev dis eno54 Device 'eno54' successfully disconnected.
现在,我们看到活动端口返回到eno53
# teamdctl team0 state setup: runner: activebackup ports: eno53 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 runner: active port: eno53
再次注意,ping继续到达本地网关。