目录
1.LVS介绍
LVS中文站点:http://zh.linuxvirtualserver.org/
LVS官网:http://www.linuxvirtualserver.org/
LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。
2.LVS功能与特点
LVS主要用于多服务器的负载均衡
- 工作在网络层,可以实现高性能,高可用的服务器集群技术。
- 廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。
- 易用,配置非常简单,且有多种负载均衡的方法。
- 稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。
- 可扩展性也非常好
3.LVS 的组成及作用
LVS 由两部分程序组成,包括 ipvs 和 ipvsadm。
1、ipvs(ip virtual server):LVS 是基于内核态的 netfilter 框架实现的 IPVS 功能,工作在内核态。用户配置 VIP 等相关信息并传递到 IPVS 就需要用到 ipvsadm 工具。
2、ipvsadm:ipvsadm 是 LVS 用户态的配套工具,可以实现 VIP 和 RS 的增删改查功能,是基于 netlink 或 raw socket 方式与内核 LVS 进行通信的,如果 LVS 类比于 netfilter,那 ipvsadm 就是类似 iptables 工具的地位。
4.Lvs常用术语说明
术语
解释
Load balancer或director
负载调度器
RS或Real Server
真实服务器,提供服务的服务器
VIP
虚拟IP地址,客户端访问集群的地址
RIP
集群所提供应用程序的地址(HTTP,FTP)
DIP
调度器的真实地址
5.LVS的类型
LVS-NAT
他通过修改请求报文的目标地址为根据调度算法所挑选出的某RS的RIP来进行转发。
架构特性:
(1) Rs应该使用私有地址,即RIP应该为私有地址,各RS的网关必须执行DIP
(2) 请求报文和响应报文都经由Directory转发;调度器作为所有服务器节点网关,即作为客户端的访问入口,也是各节点回应客户端的访问出口。
(3) 支持端口映射
(4) RS可以使用任意类型的OS
(5) RS的RIP必须与Directory的DIP在同一网络,中间不需要路由器
NAT模型优缺点:
优点:节点服务器使用私有IP地址,与负载调度器位于同一个物理网络,安全性比DR模式和TUN模式要高。
缺点:调度器位于客户端和集群节点之间,并负责处理进出的所有通信;(压力大的根本原因)大规模应用场景中,调度器容易成为系统瓶颈。
请求和响应图解说明:
(1) 客户端访问集群的VIP地址,请求web服务。(请求报文:源地址为CIP,目标地址为VIP)
(2) 调度器收到客户端的请求报文,会修改请求报文中的目标地址(VIP)为RIP,并且将请求根据相应的调度算法送往后端web服务器。(请求报文:源地址CIP,目标地址为RIP)
(3) Web服务器收到请求,检查报文是访问自己的,并且自己也提供web服务,就会响应这个请求报文;并且发送给调度器(响应报文,源地址RIP,目标地址CIP)
(4) 调度器收到web服务器的响应报文,会根据自己内部的追踪机制,判断出用户访问的是VIP,这个时候会修改源地址为VIP地址响应客户端请求。(响应报文:源地址VIP,目标地址CIP)
LVS-TUN
不修改请求报文IP首部,而是通过IP隧道机制在原有的IP报文之外在封闭IP首部,经由互联网把请求报文交给选定的RS,主要实现异地容灾
架构特性:
(1) RIP,DIP,VIP都是公网地址
(2) RS的网关不能,也不可能指向DIP
(3) 请求报文由Directory分发,但响应报文直接由RS响应给client
(4) 不支持端口映射
(5) RS的OS必须得支持IP隧道
优点:实现了异地容灾,避免了一个机房故障导致网站无法访问。
缺点:RS配置复杂(IPIP模块等)
请求和响应图解说明:
(1)用户发送请求到director的VIP请求服务。注意:此VIP地址在互联网上是唯一可达地址。
(2)当用户请求到达director的时候,根据调度算法选择一台RS进行转发,但是这个时候发送的报文,目标地址不能是RIP,如果是RIP接收请求,那么就是DIP响应CIP的请求,而不是VIP这个时候就需要使用隧道(tun)了,使用隧道封装两个IP首部,转发的报文为源CIP目标VIP,但是在IP首部外还会添加一个IP首部,目标地址是RIP。
(3)当RS接收到数据报后,看到外层的IP首部,目标地址是自己,就会拆开封装,这个时候就会发现,还有一个IP首部,首部内容为CIP请求自己的VIP,这个时候由于自己有VIP地址,所以就会响应这个请求给CIP。(响应报文:源地址VIP,目标地址CIP)
LVS-FULLNAT
为什么使用fullnat&传统NAT在多路由网络调度缺点
(1)客户端将请求发送给Director请求服务。
(2)Director将请求报文转发给RS,源地址是CIP,目标地址是RIP。
问题来了:响应报文不经由Director
RS收到数据报查看目标地址是自己的就会响应请求,但是源地址为CIP,这个时候由于和Director中间使用了路由器连接,所以网关不是指向Director,如果响应报文不经过Director那么响应客户端请求的就是RS的RIP,而不是VIP。客户端收到响应报文,看到是RIP响应的,但是自己压根没有请求过RIP,所以会直接丢弃数据报。
什么是fullnat
通过请求报文的源地址为DIP,目标为RIP来实现转发;对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发;
架构特性:
(1)RIP,DIP可以使用私有地址;
(2)RIP和DIP可以不在同一个网络中,且RIP的网关未必需要指向DIP;
(3)支持端口映射;
(4)RS的OS可以使用任意类型;
(5)请求报文经由Director,响应报文经由Director;
请求和响应图解:
(1) 客户端将请求发送给Director的VIP请求服务。
(2) Vip通过调度算法,将请求发送给后端的RS,这个时候源地址该为了DIP,目标地址改为了RIP。
(3) RS接收到请求后,由于源地址是DIP,则一定会对DIP进行回应。
(4) Director收到RS的响应后,会修改数据报的源地址为VIP,目标地址为CIP进行响应。
LVS-DR
Diectory在实现转发时不修改请求的IP首部,而是通过直接封装MAC首部完成转发;目标MAC是Directory根据调度方法挑选出某RS的MAC地址。
架构特性:
(1) 保证前端路由器将目标地址为VIP的请求报文通过ARP地址解析后送往Directory
解决方法:
静态绑定:在前端路由器直接将VIP对应的目标MAC静态配置为Directory的MAC地址
缺点:1、如果路由是运营商提供则没有路由器管理权限,则无法配置
2、如果调度器做了高可用,当主备切换的时候,MAC地址会发生改变。
Arptables:在各RS上,通过arptables规则拒绝其响应对应的ARP广播请求
内核参数:在RS上修改内核参数,并结合地址的配置方式实现拒绝响应对VIP的ARP广播请求;
(2) RS的RIP可以使用私有地址;但也可以使用公网地址,此时可通过互联网上的主机直接对此RS发起管理操作
(3) 请求报文必须经由Directory调度,但响应报文必须不能经由Directory
(4) 各RIP必须与DIP在同一物理网络中
(5) 不支持端口映射
(6) RS可以使用大多数的OS
(7) RS的网关一定不能指向Directory
优点:负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端,大大提高了服务器并发能力。
不足:1、LVS-RS间必须在同一个VLAN。
2、RS上绑定VIP,风险大。
请求和响应图解说明:
(1)首先,客户端CIP的请求发送给LVS调度器的VIP。
(2)LVS调度器收到客户端的请求包后,将数据包的MAC地址改成LVS调度器选择的某一台RS的MAC地址,并通过交换机(数据链路层)发送给RS服务器(因为MAC地址是rs服务器,所以,rs可以接收到该数据报。)注意:此时数据包的目的及源ip地址没有发生任何改变。
(3)①、RS的数据链路层收到发送来的数据报文请求后,会从链路层往上传给IP层,此时IP层需要验证请求的目标IP地址。因为包的目标IP(即VIP)并不是像常规数据报那样为RS的本地IP,而仅仅目的MAC地址是RS的。所以,在RS上需要配置一个VIP的loopbackdevice,是因为loopback device是服务器本地使用的网络接口,对外是不可见的,不会跟LVS的ip冲突。
②、RS处理数据包完成后,将应答直接返回给客户端(源ip为VIP,目标ip为CIP)。回复数据报不在经过调度器。因此,如果对外提供LVS负载均衡服务,则RS需要连上互联网才能将应答包返回给客户端。不过,RS最好为带公网IP的服务器,这样可以不经过网关直接回应客户,如果多个RS使用了同一网关出口,网关会成为LVS架构的瓶颈,会大大降低LVS的性能。
6.LVS 的基本原理
LVS 基于 netfilter 框架,工作在 INPUT 链上,在 INPUT 链上注册 ip_vs_in HOOK 函数,进行 IPVS 相关主流程,详细原理概述如下:
1、 当客户端用户访问 www.baidu.com 网站时,用户访问请求通过层层网络,最终通过交换机进入 LVS 服务器网卡进入内核空间层。
2、 进入PREROUTING后通过查找路由,确定访问目的 VIP 是本机 IP 地址的话,数据包将进入INPUT链中。
3、 因为 IPVS 工作在 INPUT 链上,会根据访问的VIP和端口判断请求是否为 IPVS 服务,是的情况下,则调用注册的IPVS HOOK 函数,进行IPVS相关流程,并强制修改数据包的相关数据,并将数据包发往POSTROUTING链中。
4、 POSTROUTING链收到数据包后,将根据目标 IP 地址服务器,通过路由选路,将数据包最终发送至后端真实服务器中。
上面就是我们所介绍的 LVS 的工作原理,那么 LVS 负载均衡还包括三种工作模式,且每种模式工作原理都有所不同,适用于不同应用场景,其最终目的都是能实现均衡的流量调度和良好的扩展性。
7.LVS 负载均衡的三种工作模式
群集的负载调度技术,可基于 IP、端口、内容等进行分发,其中基于 IP 的负载均衡是效率最高的。基于 IP 的负载均衡模式,常见的有地址转换(NAT)、IP 隧道(TUN)和直接路由(DR)三种工作模式。
地址转换:Network Address Translation,简称:NAT 模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,作为客户机的访问入口,也是各节点回应客户机的访问出口,服务器节点使用私有 IP 地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式。
8.LVS 的十种负载调度算法
轮询:Round Robin,将收到的访问请求按顺序轮流分配给群集中的各节点真实服务器中,不管服务器实际的连接数和系统负载。
加权轮询:Weighted Round Robin,根据真实服务器的处理能力轮流分配收到的访问请求,调度器可自动查询各节点的负载情况,并动态跳转其权重,保证处理能力强的服务器承担更多的访问量。
最少连接:Least Connections,根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数少的节点,如所有服务器节点性能都均衡,可采用这种方式更好的均衡负载。
加权最少连接:Weighted Least Connections,服务器节点的性能差异较大的情况下,可以为真实服务器自动调整权重,权重较高的节点将承担更大的活动连接负载。
基于局部性的最少连接:LBLC,基于局部性的最少连接调度算法用于目标 IP 负载平衡,通常在高速缓存群集中使用。如服务器处于活动状态且处于负载状态,此算法通常会将发往 IP 地址的数据包定向到其服务器。如果服务器超载(其活动连接数大于其权重),并且服务器处于半负载状态,则将加权最少连接服务器分配给该 IP 地址。
复杂的基于局部性的最少连接:LBLCR,具有复杂调度算法的基于位置的最少连接也用于目标IP负载平衡,通常在高速缓存群集中使用。与 LBLC 调度有以下不同:负载平衡器维护从目标到可以为目标提供服务的一组服务器节点的映射。对目标的请求将分配给目标服务器集中的最少连接节点。如果服务器集中的所有节点都超载,则它将拾取群集中的最少连接节点,并将其添加到目标服务器群中。如果在指定时间内未修改服务器集群,则从服务器集群中删除负载最大的节点,以避免高度负载。
目标地址散列调度算法:DH,该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。
源地址散列调度算法:SH,与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。
最短延迟调度:SED,最短的预期延迟调度算法将网络连接分配给具有最短的预期延迟的服务器。如果将请求发送到第 i 个服务器,则预期的延迟时间为(Ci +1)/ Ui,其中 Ci 是第 i 个服务器上的连接数,而 Ui 是第 i 个服务器的固定服务速率(权重) 。
永不排队调度:NQ,从不队列调度算法采用两速模型。当有空闲服务器可用时,请求会发送到空闲服务器,而不是等待快速响应的服务器。如果没有可用的空闲服务器,则请求将被发送到服务器,以使其预期延迟最小化(最短预期延迟调度算法)。