Chapter3 - 配置链路聚合和桥接
配置网络合作(team)
网络合作是一种以逻辑方式将NIC 链接到一起,从而实现故障转移或更高吞吐量的方法。合作是一种新实施,不会影响 Linux 内核中的更早绑定驱动程序。其提供备选实施。为了向后兼容。RHEL7 支持通道绑定。网络合作提供更好的性能,并且由于其模块化设计,因此可扩展性更强。
RHEL7 使用一个小的内核驱动 程序 和一个用户空间守护进程 teamd
来实施网络合作。内核高效地处理网络包,而 teamd
负责逻辑和接口处理。称为运行程序的软件实施负载均衡和主动备份逻辑,如 roundrobin
。以下运行程序可供teamd
使用:
- broadcast:一个简单运行程序,传输来自所有端口的每个包
- rundrobin:一个简单运行程序 ,以轮循方式传输来自每个端口的包
- activebackup:这个一个故障转移运行程序,监视链接更改并选择活动端口进行数据输入。
- loadbalance:此运行程序监控流量并使用哈希函数以尝试在为包传输选择端口时达到完美均衡。
- lacp:实施 802.3ad 链接聚合控制协议,可以使用与loadbalance 运行程序相同的传输端口选择可能性。
所有网络交互均通过组接口(包含多个网络端口接口)完成。使用NetworkManager 控制合作端口接口时,特别是在查找故障时,请牢记以下几点:
- 启动网络组接口不会自动启动端口接口
- 启动端口接口始终会启动合作端口
- 停止合作接口也会停止端口接口
- 不含端口的合作接口可以启动静态IP连接
- 在启动 DHCP 连接时,不含端口的组将等待端口。
- 当添加具有载波的端口时,等待端口且有 DHCP 连接的组会完成
- 当添加不具有载波的端口时,等待端口且有DHCP 连接的组合继续等待。
配置网络组
nmcli 命令用于创建和管理组和端口接口。以下四个步骤用于创建和激活网络组接口:
1、创建组接口
2、确定组接口的 IPV4 或/和 IPV6 属性
3、分配端口接口
4、启动/关闭组接口和端口接口。
创建接口组
使用nmcli 命令可为网络组接口创建连接,语法如下:
nmcli con add type team con-name CNAME ifname INAME [config JSON]
其中 CNAME 用于引用连接的名称,INAME 是接口名称,而JSON 指定要使用的运行程序 。JSON 的语法如下:
'{"runner": {"name" : "METHOD"}}'
其中 method 是下列之一:broadcast
, roundrobin
,activebackup
, loadbalance
, 或lacp
。
示例:
nmcli con add type team con-name team0 ifname team0 config '{"runner" : {"name" : "loadbalance" }}'
确定组接口的 IPV4/IPV6 属性
一旦创建了网络组接口,便可以为其分配 ipv4 /ipv6 属性。如果DHCP 可用,则此步骤是可选的,因为默认属性将接口配置为使用dhcp 来获取其ip设置。
以下示例演示如何为接口 team0 分配静态 Ipv4 地址:
nmcli con mod team0 ipv4.addresses 1.2.3.4/24
nmcli con mod team0 ipv4.method manual
请注意,必须首先分配 ipv4.addresses
,然后才能将 ipv4.method
设置为 manual 。
分配端口接口
使用 nmcli 命令创建端口接口,语法如下:
nmcli con add type team-slave con-name CNAME ifname INAME master TEAM
其中 CNAME
将为用于引用端口的名称,INAME
将为现在的接口的名称,TEAM 指定网络组接口的连接名称。
可以显式指定连接名称,否则默认情况下为 team-salve-IFACE 。
示例:
nmcli con add type team-slave ifname eth1 master team0
nmcli con add type team-slave ifname eth2 master team0 con-name team0-eth2
启动/关闭 组接口和端口接口
nmcli 命令还可用于管理组接口和端口接口的连接,语法如下:
nmcli dev dis INAME
nmcli con up CNAME
INAME
为要管理的组接口或端口接口的设备名称。CNAME
是该接口的连接名称。其中 CNAME
是要管理的组接口或端口的连接名称。
示例:
nmcli con up team0
nmcli dev dis eth2
当组接口启动时,teamctl
命令可用于显示合作的状态,此命令的输入包括端口接口状态。

管理合作网络
网络合作配置文件
与针对其他接口一样,NetworkManager 在 /etc/sysconfig/network-scripts
中为网络合作创建配置文件,将为每个接口创建一个配置文件:对于组,则为每个端口创建一个配置文件。
合作接口的配置文件定义了接口的IP设置。 DEVICETYPE
变量告知初始化脚本,这是一个网络组接口。teamd 配置的参数在 TEAM_CONIFG
变量中定义.请注意,TEAM_CONFIG
的内容使用 JSON 语法。

以下是端口组接口的配置文件示例

DEVICETYPE 变更告知初始化脚本,这是一个组端口接口。TEAM_MASTER 变更定义端口所适用于的组设备。
设置和调整组配置
当创建组接口时,便会设置初始化网络组配置。默认运行程序是 roundrobin
。但可以通过在使用 team.config 子命令创建组时指定 JSON 字符串来选择其他运行程序 。如果没有指定运行程序参数,则将使用默认值。
可以将其他运行程序分配给现有组。也可以使用nmcli con mod
命令来调整运行程序参数,可以作为 JSON 字符串来指定配置更改(如果是简单更改),也可以提供包含更复杂JSON 配置的文件名。
nmcli con mod IFACE team.config JSON-configuration-file-or-string
以下示例说明了如何为 active-backup 组中端口接口分配不同优先级:

[root@server ~]# cat team.conf
{
"device": "team0",
"mcast_rejoin": {
"count": 1
},
"notify_peers": {
"count": 1
},
"ports": {
"ens38": {
"prio": -10,
"sticky": true,
"link_watch": {
"name": "ethtool"
}
},
"ens39": {
"prio": 100,
"link_watch": {
"name": "ethtool"
}
}
},
"runner": {
"name": "activebackup"
}
}
[root@server ~]#
注意
进行任何更改都将在端口接口下次启动后才会生效。
配置文件中的 link_watch 设置确定如何 监控接口的链路状态。默认值如下所示,并使用类似的ethtool 命令的功能来检查每个接口的链接:
"link_watch": {
"name": "ethtool"
}
检查链路的另一个方法是定期使用ARP ping
包来检查远程连接。必须指定本地和远程 IP 地址及超时。完成的配置将与以下类似:
"link_watch": {
"name": "arp_ping",
"interval": "100",
"missed_max": 30,
"source_host": "192.168.23.2",
"target_host": "192.168.23.1"
},
注意
请注意,如果省略的选项未在 JSON 文件中指定,则将恢复为默认值。
网络故障排除
teamnl
和teamdctl
命令对于网络组的故障排除非常有用。这些命令仅在启动的网络组上有效。以下示例显示这些命令的一些典型用法。
显示 team0 接口组的端口
[root@server ~]# teamnl team0 port
6: ens39: up 1000Mbit FD
5: ens38: up 1000Mbit FD
[root@server ~]#
显示 team0 的当前活动端口
[root@server ~]# teamnl team0 getoption activeport
5 ##参数上个示例
[root@server ~]#
设置 team0 的活动端口的选项
teamnl team0 setoption activeport 6
teamnl
显示可用于组设备的选项
[root@server0 ~]# teamnl team0 option
queue_id (port:eno2) 0
priority (port:eno2) 0
user_linkup_enabled (port:eno2) false
user_linkup (port:eno2) true
enabled (port:eno2) false
queue_id (port:eno1) 0
priority (port:eno1) 0
user_linkup_enabled (port:eno1) false
user_linkup (port:eno1) true
enabled (port:eno1) true
activeport 4
mcast_rejoin_interval 0
mcast_rejoin_count 1
notify_peers_interval 0
notify_peers_count 1
mode activebackup
[root@server0 ~]#
使用teamdctl
可显示 team0 接口的当前状态

使用 teamctl
可显示 team0 的当前 JSON 配置:

配置软件网桥
软件网桥
网桥是一个链路层设备,可基于MAC 地址在网络之间转发流量。网桥识别哪些主机连接到每个网络,构建 MAC 地址表,然后根据该表做出包转发决策。可以在 linux 环境中使用软件网桥以仿真硬件网桥。软件网桥的最常见应用是在虚拟化应用程序中,用于在一个或多个虚拟NIC 中共享硬件 NIC 。
配置软件网桥
nmcli 可用于持久方式配置软件网桥。首先要创建软件网桥。然后现有接口与其连接。例如,以下命令将创建名为 br0 的网桥并将 eth1 和eth2 接口都连接到此网桥。
[root@server ~]# nmcli connection add type bridge con-name br0 ifname br0
连接"br0"(9a869fed-6341-47bc-ac3e-c853ffff29f6) 已成功添加。
[root@server ~]# nmcli con add type bridge-slave con-name br0-ens38 ifname ens38 master br0
连接"br0-ens38"(818f233e-536d-4279-9543-2a213a2723a4) 已成功添加。
[root@server ~]# nmcli con add type bridge-slave con-name br0-ens39 ifname ens38 master br0
连接"br0-ens39"(0bea4f9a-1950-4270-be28-66897227bf0e) 已成功添加。
[root@server ~]#
注意
NetworkManager 只能将以太网接口的连接到网桥。不支持聚合接口,如合作接口或绑定接口。必须通过操作 /etc/sysconfig/network-scripts
中的配置文件来进行配置
软件网桥配置文件
软件网桥由 /etc/sysconfig/network-scripts
目录中的接口配置文件来管理。每个软件网桥都有一个ifcfg-*
配置文件。
以下是软件网桥的示例配置文件:

TYPE=Bridge 定义指定了这是一个软件网桥。BRIDGING_OPTS
定义其他网桥选项。请注意,已经为此网桥分配了一个静态IP地址。
以下配置文件将以太网接口连接到软件网桥:

将此接口与软件网桥br1 进行绑定的是单个变量定义 BRIDGE=br1
注意
要在 NetworkManager 管理的现有合作或绑定网络接口上实施软件网桥,必须禁用 NetworkManager ,因为它仅支持简单以太网接口上的网桥。网桥的配置文件必须手动创建 。ifup
和 ifdown
实用程序可用于管理软件网桥和其他网络接口。
brctl show 命令将显示软件网桥以及连接到该软件网桥的接口的列表。
[root@server ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c291a911d yes ens38
virbr0 8000.525400175763 yes virbr0-nic
配置网桥需要删除接口中的IP相关信息配置