RH358配置链路聚合–配置网络组Team
本章节开始,介绍如何配置和管理链路聚合配置。此方面技术在实际工作中必备,特别在现各种高并发场景这么大量的时代,没HA咋行?
专栏地址:https://blog.csdn.net/qq_41765918/category_11532281.html
1. 介绍网络组Team概念
保持网络服务的可用性需要一个网络高可用性的坚实基础。当至少有一条trunks提供连通性时,多路冗余网络trunks可以保证网络业务的可用性。此外,当单个网络接口被传入的网络流量饱和时,服务访问可能会受到影响。
在这种情况下,将网络流量分散到多个网络接口可能是解决方案。网络分组将多个网络接口卡逻辑地连接在一起,以允许故障转移,或允许更高的吞吐量。
Red Hat Enterprise Linux 8使用一个小的内核驱动程序和一个用户空间守护进程teamd来实现网络合作。内核高效地处理网络数据包,而teamd负责逻辑和接口处理。称为runners运行器的软件实现负载均衡和active-backup主动备份逻辑,比如roundrobin。下表总结了每个runners运行器的使用:
Teamd 运行器
运行器Runner | 描述 |
---|---|
activebackup | 故障转移运行程序,监视链接更改并选择活动端口进行数据传输。 |
roundrobin | 这个运行器以轮循的方式从每个端口传输数据包。 |
broadcast | 这个运行器从所有端口传输每个数据包。 |
loadbalance | 这个运行器监控流量,并使用哈希函数试图在选择数据包传输端口时达到完美的均衡。 |
lacp | 该运行器实现802.3ad链路聚合控制协议(LACP)。它具有与loadbalance负载均衡运行器相同的传输端口选择可能性。 |
random | 这个运行程序在一个随机选择的端口上传输数据包。 |
当使用NetworkManager控制团队接口或对其进行故障排除时,您应该牢记以下几点:
-
启动team接口并不会自动启动其端口接口。
-
启动端口接口总是启动team接口。
-
停止team接口也停止端口接口。
-
没有端口的team接口可以启动静态IP连接。
-
不含端口的team在启动DHCP连接时等待端口。
-
如果一个team接口有DHCP连接,并且正在等待端口,当添加一个带有载波信号的端口时,它就完成了激活。
-
如果一个team接口已经有DHCP连接,并且正在等待端口,当添加一个没有载波信号的端口时,它将继续等待。
所有的网络交互都是通过team接口(或主接口)完成的。 team接口由多个端口接口(端口或从属接口)组成,它们是组合到team中的网络接口。
Runner 方式(补充说明):
1.roundrobin 【mode 0】轮转策略 (balance-rr)
特点:
1)从头到尾顺序的在每一个slave接口上面发送数据包,轮询方式往每条链路发送报文,基于per packet方式发送。服务上ping 一个相同地址:1.1.1.1 双网卡的两个网卡都有流量发出。负载到两条链路上,说明是基于per packet方式 ,进行轮询发送。
2)提供负载均衡和容错的能力,当有链路出问题,会把流量切换到正常的链路上。
交换机端需要配置聚合口
2.activebackup【mode 1】活动-备份(主备)策略
特点:
一个端口处于主状态 ,一个处于从状态,所有流量都在主链路上处理,从链路不会有任何流量。当主端口down掉时,从端口接手主状态。
不需要交换机端支持
3.loadbalance【mode 2】限定流量
特点:
该模式将限定流量,以保证到达特定对端的流量总是从同一个接口上发出。既然目的地是通过MAC地址来决定的,因此该模式在“本地”网络配置下可以工作得很好。
如果所有流量是通过单个路由器(比如 “网关”型网络配置,只有一个网关时,源和目标mac都固定了,那么这个算法算出的线路就一直是同一条,那么这种模式就没有多少意义了。),那该模式就不是最好的选择。
和balance-rr一样,交换机端口需要能配置为“port channel”。这模式是通过源和目标mac做hash因子来做xor算法来选路的。
交换机端需要配置聚合口
4.broadcast【mode 3】广播策略
特点:
这种模式一个报文会复制两份往bond下的两个接口分别发送出去,当有对端交换机失效,我们感觉不到任何downtime,但此法过于浪费资源;不过这种模式有很好的容错机制。
此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题
适用于拓扑,两个接口分别接入两台交换机,并且属于不同的vlan,当一边的网络出现故障不会影响服务器另一边接入的网络正常工作。而且故障过程是0丢包。
5.lacp (implements the 802.3ad Link Aggregation ControlProtocol)【mode 4】
特点:
802.3ad模式是IEEE标准,因此所有实现了802.3ad的对端都可以很好的互操作。802.3ad 协议包括聚合的自动配置,因此只需要很少的对交换机的手动配置(要指出的是,只有某些设备才能使用802.3ad)。802.3ad标准也要求帧按顺序(一定程度上)传递,因此通常单个连接不会看到包的乱序。
缺点:
标准要求所有设备在聚合操作时,要在同样的速率和双工模式,而且,和除了balance-rr模式外的其它bonding负载均衡模式一样,任何连接都不能使用多于一个接口的带宽。 此外,linux bonding的802.3ad实现通过对端来分发流量(通过MAC地址的XOR值),因此在“网关”型配置下,所有外出(Outgoing)流量将使用同一个设备。进入(Incoming)的流量也可能在同一个设备上终止,这依赖于对端802.3ad实现里的均衡策略。在“本地”型配置下,流量将通过 bond里的设备进行分发。
应用拓扑同mode 0,和mode 2一样,不过这种模式除了配置port channel之外还要在port channel聚合口下开启LACP功能,成功协商后,两端可以正常通信。否则不能使用。
2. 配置网络组teams
使用nmcli命令创建和管理team接口与端口接口。以下四个步骤创建和激活一个team接口:
-
创建team接口。
-
分配team接口的IPv4和/或IPv6属性。
-
创建端口接口。
-
启用或关闭team接口和端口接口。
1. 创建team接口。
使用nmcli为team接口创建一个连接,语法如下:
[root@host ~]# nmcli con add type team con-name CONN_NAME ifname IFACE_NAME team.runner RUNNER
其中CONN_NAME是连接名,IFACE_NAME是接口名,RUNNER指定team的运行器,例如activebackup。
下面的nmcli命令创建一个名为team0的NetworkManager连接。它创建一个名为team0的team接口,该接口使用负载均衡运行器,当它发送数据包时,该接口在活动接口之间交替使用。
[root@host ~]# nmcli con add type team con-name team0 ifname team0 team.runner loadbalance
2. 分配team接口的IPv4和/或IPv6属性。
创建team接口之后,您可以选择为其分配静态IPv4和/或IPv6属性。默认连接属性将team接口配置为使用DHCP进行IP设置。
以下示例为team0接口分配静态IPv4地址:
[root@host ~]# nmcli con mod team0 ipv4.addresses 192.0.2.4/24
[root@host ~]# nmcli con mod team0 ipv4.method manual
3. 创建端口接口。
# 使用nmcli命令创建每个端口接口,语法如下:。
[root@host ~]# nmcli con add type team-slave con-name CONN_NAME \
ifname IFACE_NAME master TEAM
# 其中CONN_NAME是NetworkManager连接名,IFACE_NAME是现有网络接口,TEAM指定team接口的connection名称。
# 可以显式指定连接名称,或者默认为team-slave-IFACE_NAME。
# 下面的命令为team0 team接口创建端口接口,并将它们附加到eth1和eth2网络接口。
[root@host ~]# nmcli con add type team-slave con-name team0-eth1 \
ifname eth1 master team0
[root@host ~]# nmcli con add type team-slave con-name team0-eth2 \
ifname eth2 master team0
4. 启用或关闭team接口和端口接口。
# 使用nmcli管理team和端口连接,语法如下:
[root@host ~]# nmcli con up CONN_NAME
[root@host ~]# nmcli con down CONN_NAME
# 其中CONN_NAME是团队或端口接口的连接名。
# 下面的示例激活team0 team接口和team0-eth1连接:
[root@host ~]# nmcli con up team0
[root@host ~]# nmcli con up team0-eth1
使用teamdctl命令显示team接口的状态。显示的信息包括端口网口的状态信息。
[root@host ~]# teamdctl team0 state
3. 课本练习
[student@workstation ~]$ lab netlink-teaming start
1. 按要求配置网络聚合。
[root@servera ~]# nmcli con add type team con-name team0 ifname team0 team.runner activebackup team.runner-hwaddr-policy by_active
#课本没有后面的参数,此参数是为了完美模拟故障而设置,实际物理机器不用这样设置。而且这配置适合在 activebackup使用。双网卡在虚拟机上操作,测试断开时,会存在各种问题,请知悉。
[root@servera ~]# nmcli con mod team0 ipv4.addresses 192.168.0.100/24
[root@servera ~]# nmcli con mod team0 ipv4.method manual
[root@servera ~]# nmcli con add type ethernet slave-type team con-name team0-port1 ifname eth1 master team0
[root@servera ~]# nmcli con add type ethernet slave-type team con-name team0-port2 ifname eth2 master team0
[root@servera ~]# nmcli con up team0
[root@servera ~]# nmcli con up team0-port1
[root@servera ~]# nmcli con up team0-port2
[root@servera ~]# teamdctl team0 state
setup:
runner: activebackup
ports:
eth1
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
eth2
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
down count: 0
runner:
active port: eth1
# 注意,eth1端口是活动的,并接收所有流量。当系统出现故障时,将使用eth2。
2. 测试连接。
[root@servera ~]# ping -I team0 -c 4 192.168.0.254
3. 抓包测试。
[root@servera ~]# ping 192.168.0.254
[root@servera ~]# tcpdump -i eth1 -p icmp
[root@servera ~]# tcpdump -i eth2 -p icmp
4. 模拟故障。
(虚拟机环境问题会存在坑)
[root@servera ~]# nmcli con down team0-port1
[root@servera ~]# teamdctl team0 state
完成实验。
[student@workstation ~]$ lab netlink-teaming finish
总结
- 介绍网络组Team的概念。
- 演示具体命令参数如何配置网络聚合team。
- 虚拟机环境模拟网络聚合配置会有坑,在真机不会。
- 若喜欢金鱼哥的文章,顺手点个赞。也可点个关注,因为后续会不断上干货。