【Linux网络】系统调优之聚合链路bonding,可以实现高可用和负载均衡

一、什么是多网卡绑定

二、聚合链路的工作模式

三、实操创建bonding设备(mode=1)

1、实验

2、配置文件解读

3、查看bonding状态,验证bonding的高可用效果

三、nmcli实现bonding


一、什么是多网卡绑定

将多块网卡绑定同一IP地址对外提供服务,可以实现高可用和负载均衡。直接给两块网卡,通过 bonding,虚拟成一块网卡对外提供连接,被修改为相同的MAC地址。

总结一下特点:

1、增加链路带宽:通过将多个物理接口捆绑为一个逻辑接口,可以有效地增加逻辑链路的带宽。

2、提高链路稳定性(高可用):配置了链路聚合之后,如果一个网卡接口发生故障,该网卡口的物理链路会把流量切换到另一条链路上,从而提高设备之间链路的可靠性。

3、实现负载均衡(分摊流量):一个聚合口可以把流量分散到多个不同的成员口上,通过成员链路把流量发送到同一个目的地,将网络产生拥塞的可能性降到最低。

4、利用率比较低:

二、聚合链路的工作模式

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| mod=0 ,即:(balance-rr) Round-robin policy(轮询)聚合口数据报文按包轮询从物理接口转发。负载均衡---所有链路处于负载均衡状态,轮询方式往每条链路发送报文这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。性能问题---一个连接或者会话的数据包如果从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。Bond0在大压力的网络传输下,性能增长的并不是很理想。需要交换机进行端口绑定。 |
| mod=1,即: (active-backup) Active-backup policy(主-备份策略)只有Active状态的物理接口才转发数据报文。容错能力---只有一个slave是激活的(active)。也就是说同一时刻只有一个网卡处于工作状态,其他的slave都处于备份状态,只有在当前激活的slave故障后才有可能会变为激活的(active)。无负载均衡---此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N。 |
| mod=2,即:(balance-xor) XOR policy(平衡策略)聚合口数据报文按源目MAC、源目IP、源目端口进行异或HASH运算得到一个值,根据该值查找接口转发数据报文负载均衡---基于指定的传输HASH策略传输数据包。容错能力---这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。性能问题---该模式将限定流量,以保证到达特定对端的流量总是从同一个接口上发出。既然目的地是通过MAC地址来决定的,因此该模式在"本地"网络配置下可以工作得很好。如果所有流量是通过单个路由器,由于只有一个网关,源和目标mac都固定了,那么这个算法算出的线路就一直是同一条,那么这种模式就没有多少意义了。需要交换机配置为port channel |
| mod=3,即:broadcast(广播策略)这种模式的特点是一个报文会复制两份往bond下的两个接口分别发送出去,当有对端交换机失效,感觉不到任何downtime,但此法过于浪费资源;不过这种模式有很好的容错机制。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。 |
| mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合)在动态聚合模式下,聚合组内的成员端口上均启用LACP(链路汇聚控制协议)协议,其端口状态通过该协议自动进行维护。负载均衡---基于指定的传输HASH策略传输数据包。默认算法与blance-xor一样。容错能力---这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。对比blance-xor,这种模式定期发送LACPDU报文维护链路聚合状态,保证链路质量。需要交换机支持LACP协议 |
| mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)在每个物理接口上根据当前的负载(根据速度计算)分配外出流量。如果正在接收数据的物理接口口出故障了,另一个物理接口接管该故障物理口的MAC地址。需要ethtool支持获取每个slave的速率 |
| mod=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡,而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个物理接口的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,....ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量 |

复制代码
常用的模式为 0,1,3,6
mode 1、5、6 不需要交换机设置
mode 0、2、3、4需要交换机设置
active-backup、balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需
要配置交换机以便整合链接。如:Cisco 交换机需要在模式 0、2 和 3 中使用 EtherChannel,但在模
式4中需要 LACP和 EtherChannel

三、实操创建bonding设备(mode=1)

1、实验

实验思路:添加2张新网卡为ens36、ens37;设置一个虚拟的mode1的bonding名为bond0,ip地址为192.168.20.188,bond0作为master主,ens36和ens37作为slave从属;

2、配置文件解读

前期准备

复制代码
[root@localhost ~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#ls
[root@localhost network-scripts]#
[root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-bond0
[root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-slave-ens36
[root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-slave-ens37

网卡配置即重启网络

复制代码
[root@localhost network-scripts]#vim ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
IPADDR=192.168.20.188
NETMASK=255.255.255.0
GATEWAY=192.168.20.2
BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1"
//bonding选项配置,mode=1表示使用bond的类型
//miimon=100表示每100ms监测一次网卡连接状态,如果有其中一条不通则转入另一张网卡
//fail_over_mac=1表示启用快速切换(fast failover)功能。该选项允许在主链路故障时,备份链路快速地接管数据传输,以减少故障对网络连接的影响。
//表示如果负载均衡设备的物理端口出现故障,设备会通过修改备份链路的MAC地址,避免发生环路,保护备份链路不受影响。

 
[root@localhost network-scripts]#vim ifcfg-slave-ens36
DEVICE=ens36
BOOTPROTO=static
ONBOOT=yes
MASTER=bond0
SLAVE=yes

[root@localhost network-scripts]#vim ifcfg-slave-ens37
DEVICE=ens37
BOOTPROTO=static
ONBOOT=yes
MASTER=bond0
SLAVE=yes

[root@localhost network-scripts]#systemctl restart network

3、查看bonding状态,验证bonding的高可用效果

复制代码
##查看bond0信息
[root@localhost network-scripts]#cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active)
Primary Slave: None
Currently Active Slave: ens36    ##现在活动的是ens37
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens36
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:35:10:6b
Slave queue ID: 0

Slave Interface: ens37
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:35:10:75
Slave queue ID: 0

##关闭正在活动的ens36网卡
[root@localhost network-scripts]#ifdown ens36
成功断开设备 'ens36'。

##再次查看bond0状态
[root@localhost network-scripts]#cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active)
Primary Slave: None
Currently Active Slave: ens37  ##现在活动的是ens37
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens37
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:35:10:75
Slave queue ID: 0

##再次上线ens36
[root@localhost network-scripts]#ifup ens36
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/31)

##查看状态,现在还是ens37活动
[root@localhost network-scripts]#cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active)
Primary Slave: None
Currently Active Slave: ens37
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens37
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:35:10:75
Slave queue ID: 0

Slave Interface: ens36
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:35:10:6b
Slave queue ID: 0
[root@localhost network-scripts]#

三、使用nmcli命令实现bonding(这里取名bond1)

复制代码
#添加bonding接口
nmcli con add type bond con-name mybond1 ifname bond1 mode active-backup ipv4.method manual ipv4.addresses 192.168.91.123/24 

#添加从属接口
nmcli con add type bond-slave ifname ens33 master bond1
nmcli con add type bond-slave ifname ens36 master bond1

#注:如无为从属接口提供连接名,则该名称是接口名称加类型构成
#要启动绑定,则必须首先启动从属接口
nmcli con up bond-slave-ens33
nmcli con up bond-slave-ens36

#启动绑定
nmcli con up mybond1
相关推荐
AlfredZhao7 小时前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户97183563346613 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪14 小时前
linux 拷贝文件或目录到指定的位置
linux
大树881 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质1 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush41 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 天前
Linux 11 动态监控指令top
linux
小宇宙Zz1 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工1 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信