一、LVS简介
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件之一。
二、LVS的分类
LVS-NAT (Network address translation):地址转换
LVS-DR (Direct routing): 直接路由
LVS-TUN (IP tunneling):隧道
三、ipvsadm用法
其实LVS的本身跟iptables很相似,而且连命令的使用格式都很相似,其实LVS是根据iptables的框架开发的,那么LVS的本身分成了两个部分,第一部分是工作在内核空间的一个IPVS的模块,其实LVS的功能都是IPVS模块实现的,,第二部分是工作在用户空间的一个用来定义集群服务的一个工具ipvsadm, 这个工具的主要作用是将管理员定义的集群服务列表传送给工作在内核空间中的IPVS模块,下面来简单的介绍下ipvsadm命令的用法
ipvsadm组件定义规则的格式: 1.定义集群服务格式: (1).添加集群服务: ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] -A: 表示添加一个新的集群服务 -E: 编辑一个集群服务 -t: 表示tcp协议 -u: 表示udp协议 -f: 表示firewall-Mark,防火墙标记 service-address: 集群服务的IP地址,即VIP -s 指定调度算法 -p 持久连接时长,如#ipvsadm -Lcn ,查看持久连接状态 -M 定义掩码 ipvsadm -D -t|u|f service-address 删除一个集群服务 ipvsadm -C 清空所有的规则 ipvsadm -R 重新载入规则 ipvsadm -S [-n] 保存规则 2.向集群服务添加RealServer规则: (1).添加RealServer规则 ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] -a 添加一个新的realserver规则 -e 编辑realserver规则 -t tcp协议 -u udp协议 -f firewall-Mark,防火墙标记 service-address realserver的IP地址 -g 表示定义为LVS-DR模型 -i 表示定义为LVS-TUN模型 -m 表示定义为LVS-NAT模型 -w 定义权重,后面跟具体的权值 ipvsadm -d -t|u|f service-address -r server-address --删除一个realserver ipvsadm -L|l [options] --查看定义的规则 如:#ipvsadm -L -n ipvsadm -Z [-t|u|f service-address] --清空计数器
四、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地址对应的 服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按 “最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有 一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。