关于LVS(Linux virtual server),官方文档中是这样说的:针对高可压缩、高可用网络服务的需求,这是一个基于ip层和基于内容请求分发的负载平衡调度方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器。
它的体系结构为:
一组服务器通过高速的局域网或者地理分布的广域网相互连接,在他们的前端有一个负载调度器(load balancer),负载调度器将网络请求调度到真实服务器(real server)上,从而使得服务器集群地结构对客户是透明地,对于客户而言,这就像是一整台高性能,高可用地服务器。此时,系统的伸缩性通过在服务器群中透明地加入或者删除一个节点来达到。而这个负载调度技术在Linux内核中实现,所以叫他Linux虚拟服务器。
调度器是服务器集群系统的唯一入口点(single entry point),它可以采用IP负载均衡技术,基于内容请求分发技术,或者将两者结合。在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客户请求到达的时候,调度器只根据服务器负载情况和设定的调度算法从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度。当这个请求的其他报文也到达的时候,也会被转发到前面选出的服务器。在基于内容请求分发技术中,服务器可以提供不同的服务,当客户请求到达时,调度器根据请求的内容选择服务器执行请求。整个过程都是在Linux的内核中实现,所以调度开销很小。吞吐率高。
LVS集群采用三层结构,主要由三个组成部分:
- 负载调度器;它是整个集群对外的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址。
- 服务器池:是一组真正执行客户请求的服务器,执行的服务有web、mail、ftp和DNS等。
- 共享存储:它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
它分为三种模型:
1、Virtual Server via Network Address Translation(VS/NAT)
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器,真实服务器的相应报文经过调度器的时候,源地址被重写,在返回给客户,这对负载器的性能要求很高。
应用环境:
- 集群节点跟director必须在同一个ip网络中
- RIP通常是私有地址,仅用于各集群节点间的通信
- director位于client和real server之间,并处理进出的所有通信
- real server必须将网关指向DIP
- 支持端口映射,入和出都在同一条路上,所以支持端口映射
- real server可以使用任意操作系统
请求过程:
客户端请求发往LVS主机,此时,客户端请求报文的源ip为CIP,目标IP为LVS的VIP,当LVS收到客户端的请求报文时,会将请求报文的目的ip修改为后端某个real server的RIP,具体修改成谁的,要根据调度算法来看;当客户端的请求报文的目的ip修改为RIP后,那么此时报文会转发该RIP对应的real server上去进行处理;处理完以后生成响应报文,响应报文的此时源ip为RIP,目的ip是CIP,当报文达到LVS的时候,此时LVS会将源IP从RIP修改为VIP,从而发送给客户端。
2、Virtual Server via Direct Routing(VS/DR)
通过改写请求报文的MAC地址,将请求发给真实服务器,而真实服务器将响应报文直接返回给客户,这种方法没有ip隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器和真实服务器都有一块网卡连在同一个物理网段上。
应用环境(常用):
- 集群节点跟director必须在同一个物理网络中
- 不支持端口映射
- RIP可以使用公网地址,实现便捷的远程管理和监控
- director仅负责处理入站请求,响应报文则由real server直接发往客户端
- real server不能将网关指向DIP
- 不支持端口映射
访问流程:
当客户端请求集群服务时,请求报文发送至 Director 的 VIP(RS的 VIP 不会响应 ARP 请求),Director 将客户端报文的源和目标 MAC 地址进行重新封装,将报文转发至 RS,RS 接收转发的报文。此时报文的源 IP 和目标 IP 都没有被修改,因此 RS 接受到的请求报文的目标 IP 地址为本机配置的 VIP,它将使用自己的 VIP 直接响应客户端。
3、Virtual Server via IP Tunneling(VS/TUN)
采用NAT技术,由于请求和响应报文都需要调度器进行重写地址,这样当客户请求越来越多的时候,会容易造成性能瓶颈,所以TUN技术为了解决这个问题,调度器将报文通过IP隧道之间转发给真实的服务器,而真实服务器将响应直接返回给客户,所以调度器只负责处理请求报文。
应用环境:
- 转发的时候能够重新封装报文的首部
- 集群节点可以跨越Internet,实现多地存放real server
- RIP必须是公网地址
- director仅负责处理入站请求,响应报文则有real server直接发往客户端
- real server不能将网关指向DIP
- 只有支持隧道功能的OS才能用于real server
- 不支持端口映射
访问过程:
当请求到达 Director 后,Director 不修改请求报文的源 IP 和目标 IP 地址,而是使用 IP 隧道技术,使用 DIP 作为源 IP,RIP 作为目标 IP 再次封装此请求报文,转发至 RIP 的 RS 上,RS 解析报文后仍然使用 VIP 作为源地址响应客户端。
调度算法
静态调度:
1、RR轮询(Round Robin),就是将请求按一定的规律或顺序平均分配给后端主机处理,这种方式适合后端处理请求的主机之间性能差异很小的情况。
2、wrr加权轮询(weighted Round Robin),当后端处理请求的主机之间差异较大的时候,就需要使性能较差的主机处理相对少的任务,而性能较强的主机尽可能多的处理任务,这是用加权轮询是比较方便的办法
3、sh源地址hash调度:以源地址作为关键字做静态hash表来确定需要的RS
4、dh目的地址hash调度:以目的地址作为关键字做静态hash表来确定需要的RS
动态调度
1、lc最小连接数调度(lease connection):将用户请求分配到连接数最少的RS上,当所有的RS连接数都为0,按轮询方式来调度
2、wlc加权最小连接数调度(weighted least connection),将用户请求分配至后端连接数最少且权重最高的。(默认)
3、sed:最短期望延迟,谁小选谁
4、nq:永不排队
5、LBLC:基于本地的最少连接
6、LBLCR:基于本地的带复制功能的最少连接缓存复制机制