打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
LVS负载均衡原理

LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统 。

实现LVS负载均衡转发方式有四种,分别为NAT,DR,TUN,FULLNAT模式。

LVS NAT原理:

用户请求LVS到达 director, director将请求的报文的目标IP地址改成后端的 realserverP地址,同时将报文的目标端口也改成后端选定的realserver相应端口,最后将报文发送到 realserver,realserver将数据返给 director, director再把数据发送给用户。因为两次请求都经过 director,所以问量大的话, director会成为瓶颈。

LVS DR原理:

用户请求LVS到达 director,director将请求的报文的目标MAC地址改成后端的 realserver MAC地址,目标IP为VIP(不变),源IP为用户IP地址(保持不变),然后 director将报文发送到 realserver,realserver检测到目标为自己本地VIP,如果在同一个网段,然后将请求直接返给用户。如果用户跟 realserver不在一个网段,则通过网关返回用户。

LVS TUN原理:

用户请求LVS到达 director,director通过PTUN加密技术将请

的报文的目标MAC地址改成后端的 realserver MAC地址,目标IP为VIP(不变),源IP为用户IP地址(保持不变),然后director将报文发送到 realserver,realserver基于IP-TUN解密,然后检测到目标为自己本地VIP,如果在同一个网段,然后将请求直接返给用户。如果用户跟 realserver不在一个网段,则通过网关返回用户。

LVS FULLNAT原理:

用户请求LVS到达 director, director将请求的报文的目标IP地址修改为后端的 realserver (DNAT), 源IP为用户IP地址 (SNAT) ,发送给后端的 realserver ,后端的 realserver 在处理完之后要将响应的报文返回给LVS,LVS将返回的数据包源地址改为自己(SNAT),目标IP改为客户端(DNAT),发送给用户。

LVS负载均衡十种算法,其中四个静态,六个动态。

静态方法:仅根据算法本身进行调度

RR:round robin,轮询

说明:轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。缺点:是不考虑每台服务器的处理能力。

WRR:Weighted RR,加权轮询

说明:由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。

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

说明:简单的说就是有将同一客户端的请求发给同一个real server,源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址。

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

说明:将同样的请求发送给同一个server,一般用于缓存服务器,简单的说,LB集群后面又加了一层,在LB与realserver之间加了一层缓存服务器,当一个客户端请求一个页面时,LB发给cache1,当第二个客户端请求同样的页面时,LB还是发给cache1,这就是我们所说的,将同样的请求发给同一个server,来提高缓存的命中率。目标地址散列调度算法也是针对目标IP地址的负载均衡,它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

动态方法:主要根据每RS当前的负载状态及调度算法进行调度

LC:least connections,最少连接

说明:最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。此算法忽略了服务器的性能问题,有的服务器性能好,有的服务器性能差,通过加权重来区分性能,所以有了下面算法wlc。

Overhead=activeconns*256 inactiveconns

WLC:Weighted least connections,加权最少连接

说明: 加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。由于服务器的性能不同,我们给性能相对好的服务器,加大权重,即会接收到更多的请求。

Overhead=(activeconns*256 inactiveconns)/weight

SED:Shortest Expection Delay,最少期望延迟

说明:不考虑非活动连接,谁的权重大,我们优先选择权重大的服务器来接收请求,但会出现问题,就是权重比较大的服务器会很忙,但权重相对较小的服务器很闲,甚至会接收不到请求,所以便有了下面的算法nq。

Overhead=(activeconns 1)*256/weight

NQ:Never Queue,永不排队

说明:在上面我们说明了,由于某台服务器的权重较小,比较空闲,甚至接收不到请求,而权重大的服务器会很忙,所此算法是sed改进,就是说不管你的权重多大都会被分配到请求。简单说,无需队列,如果有台real server的连接数为0就直接分配过去,不需要在进行sed运算。

LBLC:Locality-Based Least Connections with Replication,基于局部性的最少连接

说明:基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,主要用于Cache集群系统,因为Cache集群中客户请求报文的目标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。

LBLCR:Locality-Based Least Connections with Replication,带复制功能的最少连接

说明:基于局部性的带复制功能的最少连接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地 址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除, 以降低复制的程度。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何编写LVS对Real Server的健康状态检测脚本
论文:Linux集群系统研究
LVS负载均衡简介
LVS负载均衡原理和算法详解
LVS(一)扫盲
LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服