Linux系统双网卡聚合超详细教程

将多个物理网卡聚合在一起,从而实现冗错和提高吞吐量
网络组不同于旧版中bonding技术,提供更好的性能和扩展性
网络组由内核驱动和teamd守护进程实现.

主要分为两种类型
bond、team
bond模式介绍(支持多块网卡聚合)
mode=0(balance-rr)交换机需要配置链路聚合

表示负载分担,并且是轮询的方式比如第一个包走eth0,第二个包走eth1,直到数据包发送完毕。
优点:流量提高一倍
缺点:需要接入交换机做端口聚合,否则可能无法使用

mode=1(active-backup)

同时只有1块网卡在工作。
优点:冗余性高
缺点:链路利用率低,两块网卡只有1块在工作

mode=2(balance-xor)(平衡策略)交换机需要配置链路聚合

表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy,需要交换机配置port channel)
特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力

mode=3(broadcast)(广播策略)

表示所有包从所有网络接口发出,这个不均衡,只有冗余机制,但过于浪费资源。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。需要和交换机的聚合强制不协商方式配合。
特点:在每个slave接口上传输每个数据包,此模式提供了容错能力

mode=4(802.3ad)(IEEE 802.3ad 动态链接聚合)不常用,且不同厂商的LCAP报文协商不成功

表示支持802.3ad协议,和交换机的聚合LACP方式配合(需要xmit_hash_policy).标准要求所有设备在聚合操作时,要在同样的速率和双工模式,而且,和除了balance-rr模式外的其它bonding负载均衡模式一样,任何连接都不能使用多于一个接口的带宽。
特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。
外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应 性。
必要条件:
条件1:ethtool支持获取每个slave的速率和双工设定
条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation
条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式

mode=5(balance-tlb)(适配器传输负载均衡)

是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave。该模式要求slave接口的网络设备驱动有某种ethtool支持;而且ARP监控不可用。
特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。
应用拓扑同mode 0,和mode 2一样,不过这种模式除了配置port channel之外还要在port channel聚合口下开启LACP功能,成功协商后,两端可以正常通信。否则不能使用

mode=6(balance-alb)(适配器适应性负载均衡)

在5的tlb基础上增加了rlb(接收负载均衡receive load balance).不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的.
特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。来自服务器端的接收流量也会被均衡。当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达 时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave。
使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave。这个问题可以通过给所有的对端发送更新 (ARP应答)来解决,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。
当新的slave加入到bond中时,或者某个未激活的slave重新 激活时,接收流量也要重新分布。接收的负载被顺序地分布(round robin)在bond中最高速的slave上
当某个链路被重新接上,或者一个新的slave加入到bond中,接收流量在所有当前激活的slave中全部重新分配,通过使用指定的MAC地址给每个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答 不会被switch(交换机)阻截。
必要条件:
条件1:ethtool支持获取每个slave的速率;
条件2:底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每个bond 中的slave都有一个唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管其实mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量。

总结:

mode 1、5、6不需要交换机设置
mode 0、2、3、4需要交换机设置

常用的模式 mode 0  1  6

实测中mode0可以通过mac地址欺骗的方式在交换机不设置的情况下不太均衡地进行接收

实际工作中Linux系统网卡配置案列基于bond(VMware Workstation也支持做聚合)

网络拓扑图

kvm多个网卡 linux多网卡聚合_kvm多个网卡

hostnamectl(查看Linux版本信息)

kvm多个网卡 linux多网卡聚合_网络_02

ip  a               // (查看当前网卡信息)

kvm多个网卡 linux多网卡聚合_经验分享_03


能详细看到ens37、和ens38没有使用(每个服务器网卡名字不同,仅供参考)

小技巧

服务器上有很多网卡,不确定哪个口对应哪个网卡可以使用命令

ethtool -p ens37   -                             //此时对应网卡接口灯会闪烁
nmtui 图形模式配置(强烈推荐快、简单、方便)

按(tab键来回切换、上下左右也能操控、回车确定)

kvm多个网卡 linux多网卡聚合_java_04


选择添加一个bond组

kvm多个网卡 linux多网卡聚合_经验分享_05


kvm多个网卡 linux多网卡聚合_网络_06


把ens37、ens38网卡添加到聚合组中bond中

kvm多个网卡 linux多网卡聚合_java_07


kvm多个网卡 linux多网卡聚合_网络_08

添加ens37网卡到聚合组中,点击确认(每台服务器的网卡不同,仅供参考)

kvm多个网卡 linux多网卡聚合_经验分享_09

添加ens38网卡到聚合组中确认(每台服务器的网卡不同,仅供参考)

kvm多个网卡 linux多网卡聚合_网络_10


kvm多个网卡 linux多网卡聚合_kvm多个网卡_11


kvm多个网卡 linux多网卡聚合_经验分享_12


验证是否把正确的网卡添加到bond组中点击编辑能看到网卡的对应的MAC地址说明成功

kvm多个网卡 linux多网卡聚合_交换机_13


kvm多个网卡 linux多网卡聚合_经验分享_14


按照实际情况选择绑定模式(此处选择mode 0)负载分担

kvm多个网卡 linux多网卡聚合_网络_15


链路检测、时间选择默认即可

配置聚合组bond的IP地址、netmask、DNS、gateway

kvm多个网卡 linux多网卡聚合_kvm多个网卡_16


kvm多个网卡 linux多网卡聚合_kvm多个网卡_17


点击返回

kvm多个网卡 linux多网卡聚合_交换机_18

kvm多个网卡 linux多网卡聚合_经验分享_19

点击 确认

kvm多个网卡 linux多网卡聚合_网络_20

重启网络服务
systemctl restart netwrok
可以很明显的看到ens37、ens38中网卡中的MAC地址和nm-bond聚合组的MAC地址是一致的无需质疑

kvm多个网卡 linux多网卡聚合_java_21

验证方法
nmcli connection show 
nmcli device status     //查看网卡状态

kvm多个网卡 linux多网卡聚合_网络_22

ifconfig ens37 down                  //关闭ens37网口

kvm多个网卡 linux多网卡聚合_kvm多个网卡_23


kvm多个网卡 linux多网卡聚合_kvm多个网卡_24


验证成功

交换机链路聚合不再阐述(后期详细讲解)

team模式介绍(最大支持2-8块网卡聚合)

team模式概述
team模式的工作模式与bond模式不同,有四种,分别是"broadcast"广播容错、"roundrobin"平衡轮询、"activebackup"主备和"loadbalance"负载均衡。在添加team模式时命令中的工作模式命令也不同,team模式的命令格式是’{“runner”:{“name”:“工作模式”}}’,这点需要注意。
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标准也要求帧按顺序(一定程度上)传递,因此通常单个连接不会看到包的乱序。

总结

mode 0 3 4 需要交换机配置
mode 1 不需要交换机配置

常用模式 mode 0 1
实际工作配置方法

网络拓扑图如下:

kvm多个网卡 linux多网卡聚合_java_25


配置如下:

hostnamectl(查看Linux版本信息)

kvm多个网卡 linux多网卡聚合_网络_02

ip  a               // (查看当前网卡信息)

kvm多个网卡 linux多网卡聚合_经验分享_03


能详细看到ens37、和ens38没有使用(每个服务器网卡名字不同,仅供参考)

小技巧

服务器上有很多网卡,不确定哪个口对应哪个网卡可以使用命令

ethtool -p ens37   -                             //此时对应网卡接口灯会闪烁
nmtui 图形模式配置(强烈推荐快、简单、方便)

按(tab键来回切换、上下左右也能操控、回车确定)

kvm多个网卡 linux多网卡聚合_java_04


选择添加一个team组

kvm多个网卡 linux多网卡聚合_经验分享_05

点击创建

kvm多个网卡 linux多网卡聚合_交换机_30


把物理接口ens37、ens38加入到team组中

kvm多个网卡 linux多网卡聚合_经验分享_31


kvm多个网卡 linux多网卡聚合_网络_32


kvm多个网卡 linux多网卡聚合_java_33


验证成功能看到物理网卡的MAC地址

配置聚合组team的IP地址、netmask、DNS、gateway点击确认

kvm多个网卡 linux多网卡聚合_交换机_34


kvm多个网卡 linux多网卡聚合_经验分享_35

确认

kvm多个网卡 linux多网卡聚合_经验分享_36

cd /etc/sysconfig/network-scripts/               /进入linux网卡配置文件指定的team配置文件中
cat ifcfg-组队连接_1                          //查看team配置文件信息、最后一行加入team的模式  
vi   ifcfg-组队连接_1                       //按住i键进入编辑模式,最后一行加上TEAM_CONFIG={“runner”: {“name”: “`roundrobi`n”}}   负载分担模式,按照实际需求修改
esc键shift +zz 快速保存(或者wq)

kvm多个网卡 linux多网卡聚合_java_37


kvm多个网卡 linux多网卡聚合_交换机_38

重启网络服务
systemctl restart network

kvm多个网卡 linux多网卡聚合_java_39

验证

ip a 可以很明显的看到ens37、ens38中的MAC地址和nm-team聚合组的MAC地址是一致的无需质疑

kvm多个网卡 linux多网卡聚合_网络_40


进一步验证

nmcli connection show 
nmcli device status

kvm多个网卡 linux多网卡聚合_交换机_41