负载均衡集群LVS调度算法实战

本文涉及的产品
公网NAT网关,每月750个小时 15CU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 一、复习LVS的四种模式二、LVS介绍三、调度算法四、实操演示

负载均衡集群LVS调度算法实战

 

目录:

一、复习LVS的四种模式

二、LVS介绍

三、调度算法

四、实操演示

 

一、复习LVS的四种模式


1.第一种为NAT模式

2.第二种为DR模式

3.第三种为tun模式

4.第四种为fullnat模式。

 

Snatdnat的比较:

/**

*Natiptable里面采取的是使用私有的地址将信息发送到互联网

*上。

与之对应的是SNATsnat是将原地址进行了转换。

Snat适用*的场景是内网(私网地址)访问互联网,本质上是一个地址互换的

*过程。

 

请求报文如果替换的是原地址,那么这种模式就叫做snat*如果替换的是目标地址,那么这种模式就叫做dnatDnat适用的

*场景是互联网用户访问局域网中的服务器(私网地址)。

**/

 

Nat模型的特点:

/**

*请求报文时替换的是目标地址;请求报文与响应报文时都需经过vs

*且支持端口映射。

VS上可以同时拥有两个地址,一个是vip(虚拟*地址),一个是dip;在nat模式中这两个地址都会被使用,其中,*dip是用于连接内网的,vip是用于连接外网的;此模式下的nat*配置类似于路由器的配置。注意,nat模式下可以只配置一个网卡。

 

*dr模型下的数据报文进入到vs服务器。

Vs服务器会修改目标地址*(数据链路层),这个特性决定了它不能跨路由,故vs服务器与*rellserver之间是不能够存在路由器的,只能存在交换机(地理位置*相隔较近)。

在这个过程中,获取对方地址的方式是广播。Dr模型的*局限是无法修改端口,不支持端口映射。

**/

 

二、LVS介绍


lvs-tun(隧道)模式

1.lvs-tun :

转发方式∶不修改请求报文的IP首部(源IPCIP,目标IPVIP),而在原IP报文之外再封装一个IP首部(源IPDIP,目标IPRIP ),将报文发往挑选出的目标RS; RS直接响应给客户端(源IPVIP,目标IPCIP )


(1)        DIP, VIP, RIP都应该是公网地址

//DIP,VIP,RIP不一定都是公网地址,VIP,RIP可以是私网地址。


(2)        RS的网关一般不能指向DIP

//RS如果指向了DIP,便失去了存在的意义。

 

⑶请求报文要经由Director,但响应不能经由Director

//Director在此处指的就是vs服务器。

 

4)不支持端口映射

     //因为实际修改的只是ip头部,而不是数据报文的头部。


(5)RSOS须支持隧道功能

//RS在收到端口后,理论上应该存在两个端口,ip头部与数据

//报文头部,这时的rs会去掉一个,留下一个.但是这种模式,一//般的系统都不支持。

 

Tun模式辅助理解示意图:

image.png

/**

*客户端发送请求,到达lvs调度器;lvs服务器存在两个地址,*一个是vip地址,另一个是dip地址;请求到达lvs服务器之*后,如果是tainull模式,该模式会在src的位置对数据报文进*修改。该模式与以往的不同的是,它会在原有的地址上新建一*数据报文头部(dip rip1),这样就存在两个数据报文头部,这*会出现数据报文覆盖的问题。

新的ip报文在传送的过程中可能*经过路由器,这时我我们的后端服务器也必须配置一个对应的*vip地址。

 

好处是可以实现跨机房,跨区域调度。回应数据报文*是否必须经过原路径返回?

 

答案是否定的,这时的数据报文可 *以经过其他的路由器回到客户端,都可以不经过lvs服务器。

 

*好处是可以实现跨机房,跨异地,跨区域的远程调度连接,如*一些大公司在全国各地都有自己的服务器来对外提供服务。

 

*tun模式下的rs服务器还需进行部分特殊设置才可以。

**/

 

 

TUN模式IP包调度过程:

image.png

/**

 

*如图所示,客户端发送请求后,经过lvs服务器之后,到达了web

*端服务器,调度时会添加一个新的数据报文头部,到达real server

*之后,real server在回应时会把原来新加的报文头部删除掉,获取*初始的报文头部,然后直接回应。

 

图中绿色的线便是real server

*通过另一条线路的回应过程。回应时时的源地址是VIP,目标地址是*CIP。这样的好处是容错性高,进而实现异地容灾。

**/

 

lvs-fullnat模式

.lvs-fullnat :通过同时修改请求报文的源IP地址和目标IP地址进行转发

CIP -->DIP

VIP --> RIP

辅助理解示意图:

image.png

/**

*客户端发送请求在经过一级转换后,dip变成了原地址,rip变为了

*目标地址,特别注意与nat模式的区别,这里的cip被替换成了dip

*vip被替换成了rip中的某一个ip

 

这样做的好处是跨异地处理(线*路之间可以加路由器)。区别是返回日志不同,替换地址不同。

**/

(1)VIP是公网地址,RIPDIP是私网地址,且通常不在同一IP网络﹔因此,RIP的网关一般不会指向DIP

(2)RS收到的请求报文源地址是DIP,因此,只需响应给DIP;Director还要将其发往Client

(3)请求和响应报文都经由Director

(4)支持端口映射

//nat模式是系统内核默认支持的,fullnat模式是系统内核默认不支//持的。nat模式与Fullnat模式本质上的区别是一个只替换了原地//址,

//另一个即替换了原地址也替换了目标地址。

 

注意:此类型kernel默认不支持

 

LVS工作模式总结:

 

VS/NAT

 

VS/TUN

 

VS/DR

 

Server

any

Tunneling

Non-arp device

Server network

private

LAN/WAN

LAN

Server number

low(10~20)

High(100)

High(100)

Server gateway

Load balancer

own router

Own router

 

1.    lvs-natlvs-fullnat:请求和响应报文都经由Director

lvs-nat : RIP的网关要指向DIP

lvs-fullnat : RIPDIP未必在同一IP网络,但要能通信

 

2.lvs-drlvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client

lvs-dr :通过封装新的MAC首部实现,通过MAC网络转发

lvs-tun :通过在原IP报文外封装新IP头实现转发,支持远距离通信

 

 

三、调度算法


ipvs scheduler

1.    ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态

两种∶静态方法和动态方法


2.静态方法∶仅根据算法本身进行调度

 

//上午静态调度指的就是在进行定义完之后仅仅只根据自身固定的算法来进行调度

//而不考虑各RS当前的负载状态的方法就叫做静态方法。

 

//与之相反的是动态算法会考虑RS当前的负载状态。如果RS目前//的压力较大,调用的资源也会相应的减少,反之,调用的资源就会//变多。

 

1RR : roundrobin,轮询

 

//轮询指的就是几台服务器同时对外进行服务的一种调度方式

//简言之,就是轮流提供服务。

 

2WRR : Weighted RR,加权轮询

//加权调度需要考虑到后端服务器的性能,加权调度可以做到安照一定的比例给服务器分配任务,尽可能的做到物尽其用,整体最优化。

 

3SH : Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定

 

SH辅助理解示意图如下:

image.png

/**

*新问题,当客户端访问服务器时,会存在一个信息存储不均衡的

*问题,存储的信息无法与调度的对象完全同步,导致调度失败。

*Hash的含义指的是将记录下来的ip地址进行hash运算,进而

*出一个摘要,注意这里的hash值与ip地址挂钩,密切相关。

 

*第四种是目标地址Hash,两次调度的结果相同,这里看的是上

*一次调度的结果,上一次是调度到哪一个机器,那么这一次也就

*调度哪一个机器上去。

**/

 

4DH : Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如︰宽带运营商

DH辅助理解示意图如下:

image.png

/**

*DH会通过目标地址将数据存放在缓存器中去,以此来提高缓存

*cache)的利用率,从而进一步提高互联网的访问速度,节省

*宽。当后端服务器压力过大时,可以适当的给其添加一些缓存服

*器,这样用户在访问时,便会先来到缓存服务器进行访问,如果

*没有,再进入后端服务器进行访问。

 

缓存服务器会在后端服务器与

*用户需求之间记录用户所需的数据,以此来提高缓存利用率。

*根目标地址来访问便可以将用户常用的页面,视频等等缓存下来,

*以此来提高缓存的利用率。

**/

动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度

//动态方法下的调度算法需要考虑到后端的负载情况

1LC : least conhections适用于长连接应用

Overhead=activeconns*256+inactiveconns

 

LC辅助理解示意图:

image.png

/**

*LC可以实现资源的最大合理应用话,防止出现资源浪费和机器

*负载过重的情况出现,更好的实现了均衡负载。

该算法可以通过*Overhead=activeconns*256+inactiveconns该公式计算出正*在使用的活动连接。计算结果值越大,被调度的可能性便越小,计*算结果值越小,被调度的可能性便越大。LC算法存在的一个主要*缺陷是无法考虑到后端的性能问题。

**/

 

2WLC : Weighted LC,默认调度方法

Overhead=(activeconns*256+inactiveconns)/weight

 

WLC辅助理解示意图:

image.png

/**

*WLC算法可以用来弥补LC算法无法考虑到后端机器性能的问

*题。

该算法可以通过

*Overhead=(activeconns*256+inactiveconns)/weight这个公式*计算出对应的权重。同时,WLC算法也存在一个缺陷:无法解决用*户初次连接LVS服务器时的调度问题。

**/

3SED : Shortest Expection Delay,初始连接高权重优先

Overhead=(activeconns+1)*256/weight

 

SED辅助理解示意图:

image.png

/**

*SED算法可以用来弥补WLC无法解决用户初次分配时出现的调*度问题的缺陷。

SED算法可以通过*Overhead=(activeconns+1)*256/weight这个公式计算出第一次*调度时应该选择的最优服务器。同时,该算法也存在一个问题:容

*易导致性能优异的服务器过量负载,而性能较差的服务器负载过小。

**

4NQ: Never Queue,第一轮均匀分配,后续SED

 

NQ辅助理解示意图:

image.png

/**

*NO算法解决了SED算法存在的缺陷问题。该算法会在第一次

*分配时给每一天后端服务器都分配一些任务,在第二次任务分配*时再使用Overhead=(activeconns+1)*256/weight公式进行性能*调优,调度分配,性能优者多分配一些,性能一般的就少分配一些。

**/

 

5LBLC : Locality-Based LC,动态的DH算法,使用场景根据负载状态实现正向代理

 

LBLC算法辅助理解示意图:

image.png

//该算法的主要理念是根据负载状态实现正向代理。

 

6LBLCR: LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS

 

LBLCR算法的辅助理解示意图:

image.png

/**

*其主要的原理是通过复制功能从根本上解决了LBLC负载不均衡

*的问题,进而提高了设备的使用效率。

**/

 

ipvs

1. ipvsadm/ipvs :

2. ipvs :

grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64支持的协议:TCP ,r UDPAHESP,AH_ESP,SCTP

 

ipvs辅助理解示意图:

image.png

/**

*ping测试不出调度效果,因为无法到达后端的real server

**/

 

3.ipvs集群︰

管理集群服务

管理服务上的RS

 

ipvsadm包构成


4.ipvsadm :

5.程序包: ipvsadm

  • Unit File: ipvsadm.service
  • 主程序∶/usr/sbin/ipvsadm
  • 规则保存工具:/usr/sbin/ipvsadm-save
  • 规则重载工具:/usr/sbin/ipvsadm-restore
  • 配置文件:/etc/sysconfig/ipvsadm-config

 

 

ipvsadm命令

1.ipvsadm命令

 

2.核心功能︰

集群服务管理:增、删、改

集群服务的RS管理增、删、改查看

ipvsadnil -A|E-tluf service-address [-s scheduler] [-p [timeout] [-M netmask] [--pepersistence_engine] [-b sched-flags]

ipvsadm -D -tlulf service-address 删除

ipvsadm -C清空

ipvsadm -R重载

ipvsadm -s [-n]保存

ipvsadm -ale -tlulf service-address -r server-address [options]

ipvsadm -d -tlu|f service-address -r server-address

ipvsadm -Lll [options]

ipvsadm -z [-tlulf service-address]

 

 

三,实操演示

#grep -I ipvs /boot/config-3.10.0-693.e17.x86_64

#grep -i ipvs /boot/config-3.10.0-693.e17.x86_64

#grep -i ipvs -C 10/boot/config-3.10.0-693.e17.x86_64

 

运行以上代码的结果如下:

##

schedu1er

#

CONFIG_IP_vS_RR=m

CONFIG_IP_VS_WRR=m

CONFIG_IP_VSLC=m

CONFIG_IP_VS_WLC=m

CONFIG_IP_vs_LBLC=m

CONFIG_IP_VS_LBLCR=m

CONFIG_IP_VS_DH=m

CONFIG_IP_vS_SH=m

CONFIG_IP_vs_SED=m

CONFIG_IP_Vs.NQ=m

 

#disepel

#yum info ipvsadm

运行结果如下图:

image.png

#yum install ipvsadm(安装程序包)

#rpm -ql ipvsadm(查看程序包的内容)

#rpl -ql tables

相关实践学习
小试牛刀,一键部署电商商城
SAE 仅需一键,极速部署一个微服务电商商城,体验 Serverless 带给您的全托管体验,一起来部署吧!
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6月前
|
算法 调度 UED
探索操作系统的心脏:调度算法的奥秘与影响
【10月更文挑战第9天】 本文深入探讨了操作系统中至关重要的组件——调度算法,它如同人体的心脏,维持着系统资源的有序流动和任务的高效执行。我们将揭开调度算法的神秘面纱,从基本概念到实际应用,全面剖析其在操作系统中的核心地位,以及如何通过优化调度算法来提升系统性能。
|
5月前
|
存储 负载均衡 算法
负载均衡算法
负载均衡算法
81 1
|
21天前
|
存储 算法 调度
基于和声搜索优化算法的机器工作调度matlab仿真,输出甘特图
本程序基于和声搜索优化算法(Harmony Search, HS),实现机器工作调度的MATLAB仿真,输出甘特图展示调度结果。算法通过模拟音乐家即兴演奏寻找最佳和声的过程,优化任务在不同机器上的执行顺序,以最小化完成时间和最大化资源利用率为目标。程序适用于MATLAB 2022A版本,运行后无水印。核心参数包括和声记忆大小(HMS)等,适应度函数用于建模优化目标。附带完整代码与运行结果展示。
|
4天前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
6月前
|
负载均衡 算法 搜索推荐
Nginx 常用的负载均衡算法
【10月更文挑战第17天】在实际应用中,我们需要根据具体的情况来选择合适的负载均衡算法。同时,还可以结合其他的优化措施,如服务器健康检查、动态调整权重等,来进一步提高负载均衡的效果和系统的稳定性。
230 59
|
5月前
|
缓存 负载均衡 算法
slb支持多种负载均衡算法
slb支持多种负载均衡算法
171 6
|
2月前
|
负载均衡 网络协议 Linux
LVS,软负载均衡
LVS(Linux Virtual Server)是一项广泛应用的负载均衡技术,由章文嵩博士于1998年发起,自Linux 2.4.24版本起成为官方内核的一部分。LVS通过四层负载均衡技术实现高性能、高可用的服务器集群,支持多种调度算法和工作模式(如D-NAT、full-NAT、IP隧道、DR),适用于HTTP、数据库等应用。相比7层负载均衡器(如Nginx、HAProxy),LVS具有更高的并发处理能力和更低的资源消耗,适合大规模流量分发。本期文章详细介绍了LVS的工作原理、优势与不足,并对比了常见的负载均衡产品,帮助读者根据具体需求选择合适的解决方案。
203 5
LVS,软负载均衡
|
1月前
|
算法 数据可视化 调度
基于NSGAII的的柔性作业调度优化算法MATLAB仿真,仿真输出甘特图
本程序基于NSGA-II算法实现柔性作业调度优化,适用于多目标优化场景(如最小化完工时间、延期、机器负载及能耗)。核心代码完成任务分配与甘特图绘制,支持MATLAB 2022A运行。算法通过初始化种群、遗传操作和选择策略迭代优化调度方案,最终输出包含完工时间、延期、机器负载和能耗等关键指标的可视化结果,为制造业生产计划提供科学依据。
|
3月前
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
574 11
架构学习:7种负载均衡算法策略
|
3月前
|
算法 安全 Java
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
141 16
下一篇
oss创建bucket