如何使用nmcli创建或者配置NIC组合(CentOS/RHEL 7/8)

时间:2020-01-09 10:39:01  来源:igfitidea点击:

在本文中,我将通过各种示例分享使用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参数必须引用团队设备名称,而不是团队配置文件名称。在下面的示例中,将eno53eno54接口添加到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继续到达本地网关。