一、LVS概念
LVS(Linux Virtual Server):Linux 虚拟服务器
LVS是个负载均衡设备,它不提供任何服务,用户请求到这里的时候,它是将客户需求转发至后端真正提供服务的服务,所以说后端的服务称作real server。LVS分为两段,前一段称为ipvsadm(管理集群服务的命令行工具),后面一段叫做ipvs(内核模块)【提示:LVS和iptables不能同时使用】。
二、LVS类型
LB(Load Balancing):负载均衡集群
特性:为了增加能力能力
HA(High Availability):高可用集群
特性:提供服务的可用性(一年在线时间达到99.999%才行)
计算方法:在线时间/(在线时间/故障处理时间)
HP([HPC]High Performance):高性能集群
特性:提供服务的性能
三、LVS组成结构(负载均衡实现方案)
基于DNS域名轮流解析的方法
基于客户端调度访问的方法
基于应用层系统负载的调度方法
基于IP地址的调度方法
其中基于IP的负载调度算法中,IP负载均衡技术是执行效率最高的
四、LVS十种调度算法
1、静态调度:
①rr(Round Robin):轮询调度,轮叫调度
轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。【提示:这里是不考虑每台服务器的处理能力】
②wrr:weight,加权(以权重之间的比例实现在各主机之间进行调度)
由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。
③sh:source hashing,源地址散列。主要实现会话绑定,能够将此前建立的session信息保留了
源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址,所以这里不一个一个叙述。
④Dh:Destination hashing:目标地址散列。把同一个IP地址的请求,发送给同一个server。
目标地址散列调度算法也是针对目标IP地址的负载均衡,它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
2、动态调度
①lc(Least-Connection):最少连接
最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。
简单算法:active*256+inactive(谁的小,挑谁)
②wlc(Weighted Least-Connection Scheduling):加权最少连接。
加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。
简单算法:(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地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高个太服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。
基于局部性的最少连接调度算法根据请求的目标IP地址找出该目标IP地址最近使用的RealServer,若该Real Server是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
⑥LBLCR(Locality-Based Least Connections withReplication):带复制的基于局部性最少链接
带复制的基于局部性最少链接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
五、IPVS实现负载均衡的方法
NAT:地址转换(类似于DNAT)
1、集群点跟director必须工作在同一个IP的网络中
2、RIP通常是私有地址,仅用于各集群节点间的的通信
3、director位于client和real server之间,并负责处理进出的所有通道。
4、realserver必须将网关执行DIP
5、director支持端口映射
6、realserver可以使用任何类型的操作系统(os)
7、较大规模应用场景中,director易成为系统瓶颈
DR:直接路由(及用于作为源地址)
1、各集群节点跟director必须在同一个物理网络中;
2、RIP可以使用公网地址,实现便携的远程管理和监控;
3、director仅负责处理入站请求,形影报文则有realserver直接发往客户端
4、realserver不能将网关指向DIP,而是直接指向前端网关;
5、director不支持端口映射
6、大多数操作系统能够用在realserver
7、director能够处理更多的realserver
TUN:隧道
1、集群节点可以跨越Internet
2、RIP必须是公网地址
3、director仅负责处理入站请求,形影报文则有realserver直接发往客户端
4、realserver网关不能指向director
5、只有咫尺隧道功能的OS才能用于realserver
6、不支持端口映射
六、ipvsadm常用命令
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模型中,可以使用IP:PORT事先端口映射
[-g|i|m]:LVS类型
-g:DR
-I:TUN
-m:NAT
[-w weight]:定义服务器权重
3、修改:-e
4、删除:-d -t|u|f service-address -r server-address
例如:#ipvsadm -a -t 172.16.100.1:80 -r192.168.10.8 -m
例如:#ipvsadm-a -t 172.16.100.1:80 -r 192.168.10.9 -m
5、查看
-L|l[options]
-n:数字格式显示主机地址和端口号
–stats:统计信息
–rate:速率
–timeout:显示tcp、tcpfin和udp会话的超时时间值
–daemon
–sort:跟协议、地址、端口进行排序,默认为升序
-c:显示当前ipvs连接状况
6、删除所有集群服务:
-C:清空ipvs规则
7、保存规则
-S:(用输出重定向进行保存)
格式:#ipvsadm -s >/path/to/somefile
8、载入此前的规则:
-R
格式:#ipvsadm -R