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

简介: 一、复习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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
3月前
|
算法 数据可视化 测试技术
HNSW算法实战:用分层图索引替换k-NN暴力搜索
HNSW是一种高效向量检索算法,通过分层图结构实现近似最近邻的对数时间搜索,显著降低查询延迟。相比暴力搜索,它在保持高召回率的同时,将性能提升数十倍,广泛应用于大规模RAG系统。
368 10
HNSW算法实战:用分层图索引替换k-NN暴力搜索
|
8月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
3月前
|
机器学习/深度学习 缓存 算法
微店关键词搜索接口核心突破:动态权重算法与语义引擎的实战落地
本文详解微店搜索接口从基础匹配到智能推荐的技术进阶路径,涵盖动态权重、语义理解与行为闭环三大创新,助力商家提升搜索转化率、商品曝光与用户留存,实现技术驱动的业绩增长。
|
4月前
|
机器学习/深度学习 资源调度 算法
遗传算法模型深度解析与实战应用
摘要 遗传算法(GA)作为一种受生物进化启发的优化算法,在复杂问题求解中展现出独特优势。本文系统介绍了GA的核心理论、实现细节和应用经验。算法通过模拟自然选择机制,利用选择、交叉、变异三大操作在解空间中进行全局搜索。与梯度下降等传统方法相比,GA不依赖目标函数的连续性或可微性,特别适合处理离散优化、多目标优化等复杂问题。文中详细阐述了染色体编码、适应度函数设计、遗传操作实现等关键技术,并提供了Python代码实现示例。实践表明,GA的成功应用关键在于平衡探索与开发,通过精心调参维持种群多样性同时确保收敛效率
|
3月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
4月前
|
机器学习/深度学习 边缘计算 人工智能
粒子群算法模型深度解析与实战应用
蒋星熠Jaxonic是一位深耕智能优化算法领域多年的技术探索者,专注于粒子群优化(PSO)算法的研究与应用。他深入剖析了PSO的数学模型、核心公式及实现方法,并通过大量实践验证了其在神经网络优化、工程设计等复杂问题上的卓越性能。本文全面展示了PSO的理论基础、改进策略与前沿发展方向,为读者提供了一份详尽的技术指南。
粒子群算法模型深度解析与实战应用
|
4月前
|
机器学习/深度学习 传感器 算法
基于matlab瞬态三角哈里斯鹰算法TTHHO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)(Matlab代码实现)
基于matlab瞬态三角哈里斯鹰算法TTHHO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)(Matlab代码实现)
215 1
|
5月前
|
传感器 并行计算 算法
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
389 3
|
8月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
354 11