1、LVS基本概念
前端
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,它的官方网站是http://www.linuxvirtualserver.org/.如今LVS已是Linux内核标准的一部分。使用LVS能够达到的技术目标是:经过LVS达到的负载均衡技术和Linux操做系统实现一个高性能高可用的Linux服务器群集,它具备良好的可靠性,可拓展性和可操做性。从而以低廉的成本实现最优的性能。 LVS从1998年开始,发展到如今已是一个比较成熟的项目了。利用LVS技术能够实现高性能,高可压缩的网路服务,例如WWW服务,FTP服务,MAIL服务等。比较著名的就是www.linux.com以及www.real.com. linux
2、 LVS集群的特色算法
IP负载均衡与负载调度算法后端
1.IP负载均衡技术服务器
负载均衡技术有不少实现方案,有基于DNS域名轮流解析的方法、有基于客户端调度访问的方法、有基于应用层系统负载的调度方法,还有基于IP地址的调度方法,在这些负载调度算法中,执行效率最高的是IP负载均衡技术。网络
LVS 的IP负载均衡技术是经过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要做用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须经过这个虚拟的IP地址访问服务。这个虚拟IP通常称为LVS的VIP,即Virtual IP。访问的请求首先通过VIP到达负载调度器,而后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。负载均衡
当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术,IPVS实现负载均衡机制有三种,分别是NAT、TUN、FULLNAT和DR,详述以下:ide
lvs-nat:性能
多目标IP地址的DNAT,经过将请求报文中的目标地址和目标端口修改成某个利用调度算法挑选出来的后端RS的RIP和PORT的过程实现的转发;网站
注意下列几个问题:
1.RIP和DIP必须在同一网段,而且应该是私有IP地址;RS的网关应该指向DIP;
2.请求报文和响应报文都必须通过Director转发,Director易于成为系统性能瓶颈并引起单点故障;
3.能够实现端口重定向;CIP向VIP发送请求的端口号能够与后端的RIP所提供服务的服务端口不一样;
4.VS必须是Linux系统,RS能够是任意操做系统;
lvs-dr:默认类型
dr:Direct Routing,直接路由;
经过为请求报文从新封装一个数据链路层首部(MAC地址)进行报文转发;从新封装以后的报文的源MAC地址是DIP所在网络接口的MAC地址;目的MAC地址是某个利用调度算法挑选出来的后端RS的RIP所在接口的MAC地址;源IP地址和源PORT,以及目的IP地址和目的PORT,在整个报文转发过程当中保持不变;
注意如下几个问题:
1.确保前端路由器可以将目标IP地址为VIP的报文发往VS(Director);
1) 在路由器上静态绑定IP地址和MAC地址的映射关系;
2) 在RS上使用arptables;
3) 在RS上修改内核参数限制ARP的通告和对ARP请求的应答;
arp_announce
arp_ignore
2.RS的RIP能够是私有地址也能够是公有地址,RIP和DIP应该在同一逻辑网络;
3.请求报文必需要通过Director,可是全部的响应报文不须要通过Director直接经过路由转发给客户端便可;
4.不支持端口重定向;
5.RS必须是Linux操做系统;
6.RS上必须配置RIP和VIP,而且VIP应该配置在lo接口的lable上;
lvs-tun:tunnel,隧道;
不修改请求报文的IP首部(源IP为CIP,目的IP为VIP),而是在原有的IP报文的封装格式以外再次封装一个IP首部(源IP为DIP,目的IP为RIP),将从新封装的报文发往使用调度算法挑选出的后端RS上;
注意如下几个问题:
1.CIP,VIP,DIP,RIP都应该是公有IP地址;
2.RS的网关没法指向DIP,所以响应报文不会通过Director转发,而是直接发往CIP;
3.不支持端口重定向;
4.RS必须支持隧道协议;
5.RS上必须配置RIP和VIP;
lvs-fullnat:
非标准类型;
经过同时修改请求报文的源IP地址和目的IP地址实现报文转发;
CIP --> DIP
VIP --> RIP
注意如下几个问题:
1.VIP是公有地址,DIP和RIP是私有地址,且DIP和RIP能够不在同一网段;
2.RS对收到的请求报文的响应报文的目的地址是DIP,因此请求报文和响应报文都必须通过Director;
3.支持端口重定向;
4.此类型默认不支持;
2.负载调度算法
根据lvs在调度时是否考虑各RS当前的负载状态,能够将调度算法分为两类:
静态算法:根据算法自己的特色进行调度,注重起点公平;
RR:RoundRobin,轮询;
WRR:Weighted RR,加权轮询;
SH:Source Hashing,源地址哈希,未来自于同一个IP地址的请求始终发日后端第一次被挑中的RS,从而但是实现会话绑定;
DH:Destination Hashing,目的地址哈希,将发往同一个目标地址的请求,始终发送至后端第一次被挑中的RS,通常用于正向代理服务器集群;
动态算法:主要根据每一个RS当前的负载状态进度调度,注重结果公平;
后端RS的负载,用Overhead表示;
LC:least connections,最少链接数;
链接有两种:一种是active connection;一种是inavtive connection;
Overhead=activeconnections*256+inactiveconnections
注意:第一次调度时,按照在ipvsadm中配置的顺序自上而下进行分配;
WLC:Weighted LC,加权最小链接;(默认算法)
Overhead=(activeconnections*256+inactiveconnections)/weight
注意:第一次调度时,按照在ipvsadm中配置的顺序自上而下进行分配;权重在第一次调度时不发挥做用;
SED:Shortest Expection Delay,最短时间望延迟;
Overhead=(activeconnections+1)*256/weight
注意:SED能够解决起点不公问题,可是在权重差距比较大时候,可能会致使不公平;
NQ:Never Queue,改进版的SED算法,首次调度时,根据后端RS的权重依次为每台RS分配一个链接;而后再按照SED算法调度;必然会保证后端每台RS至少有一个activeconnection;
LBLC:Locality-Based Least Connections,基于本地的最少链接,动态的DH算法;
LBLCR:LBLC with Replication,带有复制功能的LBLC;