LVS(Linux Virtual Server虚拟服务器),它是一个开源项目,主要用于多服务器的负载均衡,它工作在网络层,可以实现高性能,高可用的服务器集群技术。它非常易用,配置 很简单,且有多重调度方式。它稳定可靠,与keepalived配合即使在集群的服务器中某台服务器宕机或某应用无法工作也不能影响整体使用,因为可以及 时切换(<1s),另外它的可扩展性性也非常好。
LVS工作原理
负载调度器(Load Balancer),是整个集群堆外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户任务服务是来自一个IP地址(虚拟IP)是的。
服务器组(Server Arrary),是一组真正执行客户请求的服务器(RealServer),可执行的服务有Web、Mail、Ftp等。
共享存储(Share Storage),它为服务器组提供一个共享的存储区,这样很容易使得服务器组拥有相同的内容,提供相同的服务。
LVS的均衡模式
LVS是工作在TCP/IP的网络层,通过控制IP来实现负载均衡的,所以它相对于其他负载均衡如DNS域名轮流解析、应用层负载的调度、客户端的调度等,效率是非常高的。
ipvs(IP Virtual Server)是LVS的核心,也是LVS的具体实现模块,自linux内核2.6版本起,ipvs就已经整合到内核中了,因此只要在编译内核的时候选择 了ipvs的功能,您的Linux就支持LVS了。如果您的内核是较旧版本,那么需要您自己进行整合和编译了。
ipvs 安装在Director Server上面,在Director Server上虚拟一个对外访问的IP(VIP),用户访问VIP,到达Director Server,然后Director Server根据一定的规则选择一个Real Server,处理完成后返回给客户端数据。但如何选择具体的Real Server以及Real Server如何返回给客户端数据呢?IPVS为此有三种机制:
VS/NAT(Virtual Server via Network Address Translation,网络地址翻转技术实现虚拟服务器),当请求到来时,Director Server上处理的程序将数据报文中的目标地址(VIP)改成具体的某台Real Server,端口也改成Real Server的端口,然后把报文发给Real Server。Real Server处理完数据后,需要返回给Director Server,然后Director Server将数据包中的源地址和源端口改成VIP的地址和端口,最后把数据发送出去。由此可以看出,用户的请求和返回都要经过Director Server,如果数据过多,则Director Server 将不堪负重。
VS/TUN(Virtual Server via IP Tunneling,IP隧道技术实现虚拟服务器) ,它跟VS/NAT基本一样,但Real Server是直接返回数据给客户端,不需要经过Director Server,这样大大降低了Director Server的压力。
VS/DR(Virtual Server via Direct Routing,直接路由技术实现虚拟服务器),它通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server 将相应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种是以上三种模式中性能最高最好的,但必须要求Director Server与Real Server都有一块网卡连接在同一物理网段上。
三种工作模式的优缺点:
vs/NAT
优点:集群的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internte的保留私有地址,只有Director Server需要一个合法的IP地址。
缺点:扩展性不足。当服Real Server增长到>=20台时间,Director Server将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过Director Server。
VS/TUN
优 点:Director Server只负责将请求包分发给物理服务器,而物理服务器将应该报直接发给用户,所以Director Server处理巨大的请求包,这种模式一台Director Server能为超过100台的服务器服务器服务,Director Server基本不成为系统的瓶颈。 非常适合Internet(如Web,Webservice等)负载,因为一般它们的请求包很小,但应答包比较大。
缺点:这种方式需要所有服务器支持IP Tunneling(IP Encapsulation)协议。
VS/DR
优点:和VS/TUN一样,Director Server只负责分发请求, 应答包通过单独的路由方法返回给客户端。与VS/TUN相比,VS/DR不要隧道支持,因为可以使用大多数的操作系统作为物理服务器。
缺点:要求Director Server网卡必须与物理网卡在一个物理段上。
LVS的8种常用调度模式
rr 轮叫(Round Robin):调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
wrr 加权轮叫(Weighted Round Robin):调度器通过”加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
lc 最少链接(Least Connections):调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
wlc 加 权最少链接(Weighted Least Connections):在集群系统中的服务器性能差异较大的情况下,调度器采用”加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承 受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
lblc 基 于局部性的最少链接(Locality-Based Least Connections):“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP 地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的 工作负载,则用”最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器。
lblcr 带 复制的基于局部性最少链接(Locality-Based Least Connections with Replication):”带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法 的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找 出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按”最小连 接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服 务器组中删除,以降低复制的程度。
dh 目标地址散列(Destination Hashing):“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
sh 源地址散列(Source Hashing):“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。