首页 > 代码库 > LVS集群十种调度算法及负载均衡理论

LVS集群十种调度算法及负载均衡理论

一、LVS概念

  • LVS(Linux Virtual Server):Linux 虚拟server;
  • LVS是个负载均衡设备。它不提供不论什么服务。用户请求到这里的时候。它是将客户需求转发至后端真正提供服务的服务。所以说后端的服务称作real server;
  • LVS分为两段,前一段称为ipvsadm(管理集群服务的命令行工具),后面一段叫做ipvs(内核模块);
  • 【提示】LVS和iptables不能同一时候使用;

二、LVS类型

  • LB(Load Balancing):负载均衡集群
    特性:为了添加能力能力
  • HA(High Availability):高可用集群
    特性:提供服务的可用性(一年在线时间达到99.999%才行)
    计算方法:在线时间/(在线时间/故障处理时间)
  • HP([HPC]High Performance):高性能集群
    特性:提供服务的性能

三、LVS组成结构(负载均衡实现方案)

  • 基于DNS域名轮流解析的方法
  • 基于client调度訪问的方法
  • 基于应用层系统负载的调度方法
  • 基于IP地址的调度方法
    当中基于IP的负载调度算法中。IP负载均衡技术是运行效率最高的

四、LVS十种调度算法

1、静态调度:

①rr(Round Robin): 轮询调度,轮叫调度
轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的server,从1開始。直到N(内部server个数)。然后又一次開始循环。

算法的长处是其简洁性,它无需记录当前全部连接的状态,所以它是一种无状态调度。


【提示:这里是不考虑每台server的处理能力】

②wrr:weight,加权(以权重之间的比例实如今各主机之间进行调度)
由于每台server的配置、安装的业务应用等不同,其处理能力会不一样。所以。我们依据server的不同处理能力。给每一个server分配不同的权值,使其能够接受相应权值数的服务请求。

③sh: source hashing,源地址散列
主要实现会话绑定,能够将此前建立的session信息保留了
源地址散列调度算法正好与目标地址散列调度算法相反,它依据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出相应的server。若该server是可用的而且没有超负荷,将请求发送到该server,否则返回空。

它採用的散列函数与目标地址散列调度算法的同样。它的算法流程与目标地址散列调度算法的基本类似,除了将请求的目标IP地址换成请求的源IP地址,所以这里不一个一个叙述。

④Dh: Destination hashing:目标地址散列
把同一个IP地址的请求,发送给同一个server。
目标地址散列调度算法也是针对目标IP地址的负载均衡,它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台server。

目标地址散列调度算法先依据请求的目标IP地址。作为散列键(Hash Key)从静态分配的散列表找出相应的server,若该server是可用的且未超载,将请求发送到该server,否则返回空。

2、动态调度

①lc(Least-Connection):最少连接
最少连接调度算法是把新的连接请求分配到当前连接数最小的server,最小连接调度是一种动态调度短算法,它通过server当前所活跃的连接数来预计server的负载均衡,调度器须要记录各个server已建立连接的数目。当一个请求被调度到某台server,其连接数加1,当连接中止或超时,其连接数减一。在系统实现时。我们也引入当server的权值为0时。表示该server不可用而不被调度。


简单算法:active*256+inactive(谁的小。挑谁)

②wlc(Weighted Least-Connection Scheduling):加权最少连接
加权最小连接调度算法是最小连接调度的超集。各个server用相应的权值表示其处理性能。server的缺省权值为1,系统管理员能够动态地设置server的权限,加权最小连接调度在调度新连接时尽可能使server的已建立连接数和其权值成比例。
简单算法:(active*256+inactive)/weight【(活动的连接数+1)/除以权重】(谁的小,挑谁)

③sed(Shortest Expected Delay):最短期望延迟
基于wlc算法
简单算法:(active+1)*256/weight 【(活动的连接数+1)*256/除以权重】

④nq(never queue):永不排队(改进的sed)
无需队列,如果有台realserver的连接数=0就直接分配过去,不须要在进行sed运算。

⑤LBLC(Locality-Based Least Connection):基于局部性的最少连接
基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,不签主要用于Cache集群系统,由于Cache集群中客户请求报文的布标IP地址是变化的。这里如果不论什么后端server都能够处理不论什么请求。算法的设计目标在server的负载基本平衡的情况下,将同样的目标IP地址的请求调度到同一个台server,来提高个太server的訪问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。


基于局部性的最少连接调度算法依据请求的目标IP地址找出该目标IP地址近期使用的RealServer。若该Real Server是可用的且没有超载。将请求发送到该server;若server不存在,或者该server超载且有server处于一半的工作负载,则用“最少链接”的原则选出一个可用的server。将请求发送到该server。

⑥LBLCR(Locality-Based Least Connections withReplication):带复制的基于局部性最少链接
带复制的基于局部性最少链接调度算法也是针对目标IP地址的负载均衡,该算法依据请求的目标IP地址找出该目标IP地址相应的server组,按“最小连接”原则从server组中选出一台server,若server没有超载。将请求发送到该server。若server超载。则按“最小连接”原则从这个集群中选出一台server,将该server加入到server组中。将请求发送到该server。同一时候,当该server组有一段时间没有被改动。将最忙的server从server组中删除。以减少复制的程度。

五、IPVS实现负载均衡的方法

NAT:地址转换(类似于DNAT)
1、集群点跟director必须工作在同一个IP的网络中
2、RIP一般是私有地址。仅用于各集群节点间的的通信
3、director位于client和real server之间。并负责处理进出的全部通道。
4、realserver必须将网关运行DIP
5、director支持port映射
6、realserver能够使用不论什么类型的操作系统(os)
7、较大规模应用场景中,director易成为系统瓶颈

DR:直接路由(及用于作为源地址)
1、各集群节点跟director必须在同一个物理网络中;
2、RIP能够使用公网地址,实现便携的远程管理和监控。
3、director仅负责处理入站请求,形影报文则有realserver直接发往client
4、realserver不能将网关指向DIP,而是直接指向前端网关;
5、director不支持port映射
6、大多数操作系统能够用在realserver

TUN:隧道
1、集群节点能够跨越Internet
2、RIP必须是公网地址
3、director仅负责处理入站请求,形影报文则有realserver直接发往client
4、realserver网关不能指向director
5、仅仅有咫尺隧道功能的OS才干用于realserver
6、不支持port映射

六、ipvsadm经常使用命令

1、管理集群服务

加入:-A -t|u|f service-address [-sscheduler]
     -t:tcp 协议的集群服务
     -u:udp 协议的集群
     -f:FWM 防火墙标记
改动:-E
删除:-D
     -D -t|u|f service-address    

比如:# ipvsadm -A -t 172.16.100.1:80 -s rr

2、管理集群服务中的RS

加入:-a -t|u|f service-address -rserver-address [-g|i|m] *[-w weight]*

-t|u|f service-address: 事先定义好的某集群服务
-r server-address: RS的地址,在NAT模型中,能够使用port映射
[ -g | i | m ] LVS类型
-g: DR
-I: TUN
-m: NAT
[-w weight] 定义server权重

3、改动:-e
4、删除:-d -t|u|f service-address -r server-address

比如:#ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m
比如:#ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m

5、查看

-L|l[options]
-n:数字格式显示主机地址和port号
--stats:统计信息
--rate:速率
--timeout:显示tcp、tcpfin和udp会话的超时时间值
--daemon
--sort:跟协议、地址、port进行排序,默觉得升序
-c:显示当前ipvs连接状况

6、删除全部集群服务:

 -C:清空ipvs规则

7、保存规则

-S:(用输出重定向进行保存)
格式:`#ipvsadm -s >/path/to/somefile`

8、加载此前的规则:

-R
格式:`#ipvsadm -R </path/to/somefile`

查看原文

原创作品,同意转载,转载时请务必以超链接形式标明文章原始出处及作者信息和本声明。否则将追究法律责任。


热门推荐

  • LNMP环境搭建——Nginx篇

  • 在RHEL6.5中配置本地YUM源

  • Ubuntu下Zabbix安装及使用问题

  • MySQL双主热备问题处理

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

LVS集群十种调度算法及负载均衡理论