一、LVS简介
LVS(Linux Virtual Server)即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,目前 LVS 是 Linux 内核标准的一部分。
使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。
LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。
二、LVS详细介绍
1、宗旨
使用集群技术和Linux操作系统实现一个高性能、高可用的服务器。
很好的可伸缩性(Scalability);
很好的可靠性(Reliability);
很好的可管理性(Manageability)。
2、LVS的组成
LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。
1)ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
2)ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)。
3、LVS相关术语
1)DS:(Director Server)指的是前端负载均衡器节点。
2)RS:(Real Server)后端真实的工作服务器。
3) VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
4) DIP:(Director Server IP)主要用于和内部主机通讯的IP地址。
5) RIP:(Real Server IP)后端服务器的IP地址。
6) CIP:(Client IP)访问客户端的IP地址。
4、LVS的优点
LVS主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。
1)开源,免费,可把许多低性能的服务器组合在一起形成一个超级服务器。
2)在网上能找到一些相关技术资源。
3)易用,配置非常简单,且有多种负载均衡的方法。
4)稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。
5、LVS的缺点
1)最核心的就是没有可靠的支持服务,没有人对其结果负责;
2)功能比较简单,支持复杂应用的负载均衡能力较差,如算法较少等;
3)开启隧道方式需重编译内核;
4)配置复杂;
5)主要应用于LINUX,目前没有专门用于WINDOWS的版本,不过可以通过配置,使windows成为LVS集群中的real server。
6、LVS的工作原理
LVS可分为三部分:
1)Load Balancer:是LVS的核心部分。它负责将客户的请求按照一定的算法分发到下一层不同的服务器进行处理,自己本身不做具体业务的处理。
另外该层还可用监控下一层的状态,如果下一层的某台服务器不能正常工作了,它会自动把其剔除,恢复后又可用加上。该层由一台或者几台Director Server组成。
2)Server Array:该层负责具体业务。可有WEB Server、mail Server、FTP Server、DNS Server等组成。
注意,其实上层的Director Server也可以当Real server用的。
3)Shared Storage:主要是提高上一层数据和为上一层保持数据一致。
7、LVS的十种调度算法
静态调度方法:
1)rr(轮询调度):最简单
按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。
2)wrr (加权轮询)
比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充。
LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。
3)sh (源地址散列调度算法)
与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。
4)dh (目标地址散列调度算法)
根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。
动态调度方法:
1) lc (最少链接)
这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1.
2) wlc (加权最少链接)
这个算法比 lc 多了一个权重的概念。
3) sed (最短预期延时调度)
4) nq(不排队调度)
3) lblc (基于局部性的最少连接调度算法)
这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器.
4) lblcr (复杂的基于局部性最少的连接算法)
记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。
三、负载均衡机制
LVS工作在网络层,通过控制IP来实现负载均衡。
IPVS是其具体的实现模块。IPVS的主要作用:安装在DS(前端负载均衡器节点)上面,在DS虚拟一个对外访问的IP(VIP)。用户访问VIP,到达DS,DS根据一定的规则选择一个RS(后端真实的工作服务器),处理完成后然后返回给客户端数据。这些步骤产生了一些具体的问题,比如如何选择具体的Real Server,Real Server如果返回给客户端数据等等。IPVS为此有三种机制:
1、VS/NAT(Virtual Server via Network Address Translation),即网络地址翻转技术实现虚拟服务器
当请求来到时,Diretor server上处理的程序将数据报文中的目标地址(即虚拟IP地址)改成具体的某台Real Server,端口也改成Real Server的端口,然后把报文发给Real Server。Real Server处理完数据后,需要返回给Diretor Server,然后Diretor server将数据包中的源地址和源端口改成VIP的地址和端口,最后把数据发送出去。由此可以看出,用户的请求和返回都要经过Diretor Server,如果数据过多,Diretor Server肯定会不堪重负。
注:
1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP;
2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈;
3)支持端口映射,可修改请求报文的目标PORT;
4)VS必须是Linux系统,RS可以是任意OS系统。
2、VS/DR(Virtual Server via Direct Routing),即用直接路由技术实现虚拟服务器
Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。
注:
1 ) Director和各RS都配置有VIP。
2 ) 确保前端路由器将目标IP为VIP的请求报文发往Director。
在前端网关做静态绑定VIP和Director的MAC地址;
在RS上使用arptables工具;arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
在RS上修改内核参数以限制arp通告及应答级别;/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce
3 )RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director。
4 )RS和Director要在同一个物理网络。
5 )请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client。
6 )不支持端口映射(端口不能修败)。
7 )RS可使用大多数OS系统。
3、VS/TUN(Virtual Server via IP Tunneling),即IP隧道技术实现虚拟服务器
和VS/NAT基本一样,但是Real server是直接返回数据给客户端,不需要经过Diretor server,这大大降低了Diretor server的压力。
转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)。
注:
1 ) DIP, VIP, RIP都应该是公网地址;
2 ) RS的网关一般不能指向DIP;
3 ) 请求报文要经由Director,但响应不经由Director;
4 ) 不支持端口映射;
5 ) RS的OS须支持隧道功能。
扩展:
LVS-FULLNAT:通过同时修改请求报文的源IP地址和目标IP地址进行转发。(此类型kernel默认不支持)
CIP --> DIP
VIP --> RIP
注:
1) VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP。
2) RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client。
3) 请求和响应报文都经由Director。
4)支持端口映射。
四、小总结
1、LVS 工作模式总结
2、相似与差别
LVS-NAT与LVS-FULLNAT:请求和响应报文都经由Director。
LVS-NAT:RIP的网关要指向DIP。
LVS-FULLNAT:RIP和DIP未必在同一IP网络,但要能通信。
LVS-DR与LVS-TUN:请求报文要经由Director,但响应报文由RS直接发往Client。
LVS-DR:通过封装新的MAC首部实现,通过MAC网络转发。
LVS-TUN:通过在原IP报文外封装新IP头实现转发,支持远距离通信。
3、三大流向
流入:PREROUTING --> INPUT
流出:OUTPUT --> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING