一、LVS介绍
LVS:Linux Virtual Server,负载调度器,内核集成。
LVS相关术语:
VS:Virtual Server,负责调度
RS:Real Server,负责真正提供服务
二、LVS工作原理
VS根据请求报文的目标IP和目标协议以端口将其调度转发至某RS,根据调度算法来挑选合适的RS。LVS是内核级功能,工作在INPUT链的位置,将发往INPUT的流量进行处理。
2.1 lvs功能及组织架构
负载均衡的应用场景为高访问的业务,提高应用程序的可用性和可靠性。
2.2 应用于高访问的业务
如果您的应用访问量很高,可以通过配置监听规则将流量分发到不同的云服务器ECS (Elastic Compute Service 弹性计算服务)实例上。此外,可以使用会话保持功能将同一客户端的请求转发到同- -台后端ECS
2.3 扩展应用程序
可以根据业务发展需要,随时添加和移除ECS实例来扩展应用系统的服务能力,适用于各种Web服务器和APP服务器。
2.4 消除单点故障
可以在负载均衡实例下添加多台ECS实例。当其中-一部分ECS实例发生故障后,负载均衡会自动屏蔽故障的ECS实例,将请求分发给正常运行的ECS实例,保证应用系统仍能正常工作
2.5 应用场景
a.音视频大流量场景
b.音视频海量流量自动分发
c.网络游戏的动静分离
d.多层次的容灾架构场景
关键词:
-
DS:Director Server。指的是前端负载均衡器节点。
-
RS:Real Server。后端真实的工作服务器。
-
VIP:Virtual IP,向外部直接面向用户请求,作为用户请求的目标的IP地址。
-
DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
-
RIP:Real Server IP,后端服务器的IP地址。
-
CIP:Client IP,访问客户端的IP地址
三、LVS工作模式和相关命令
3.1 LVS集群的工作模式
NAT:修改请求报文的目标IP,多目标IP的DNAT
TUN:操纵封装最新的MAC地址
DR:在原请求IP报文之外新加一个IP首部(用的最多)
FULLNAT:修改请问报文的源和目标IP(阿里)
3.1.1 NAT模式
NAT流程图:
1、NAT技术将请求的报文(通过DNAT方式改写)和响应的报文(通过SNAT方式改写),通过调度器地址 重写然后在转发给内部的服务器,报文返回时在改写成原来的用户请求的地址。
2、只需要在调度器LB. 上配置WAN公网IP即可,调度器也要有私有LANIP和内部RS节点通信。
3、每台内部RS节点的网关地址,必须要配成调度器LB的私有LAN内物理网卡地址 (LDIP),这样才能确保数据报文返回时仍然经过调度器LB。
4、由于请求与响应的数据报文都经过调度器LB, 因此,网站访问量大时调度器LB有较大 瓶颈,-般要求最多10-20 台节点。
5、NAT模式支持对IP及端口的转换,即用户请求10.0.0. 1:80, 可以通过调度器转换到RS节点的 10.0. 0. 2:8080 (DR和TUN模式不具备的)。
6、所有NAT内部RS节点只需配置私有LAN IP即可。
7、由于数据包来回都需要经过调度器,因此,要开启内核转发net. ipv4. ip_ forward= 1,当然也包 括iptables防火墙的forward功能(DR和TUN模式不需要)。
3.1.2 DR模式
DR原理图:
DR特点:
1、通过在调度器LB. 上修改数据包的目的MAC地址实现转发。注意,源IP地址仍然是 CIP,目的IP地址仍然是VIP。
2、请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此,并发访 问量大时使用效率很高(和NAT模式比)
3、因DR模式是通过MAC地址的改写机制实现的转发,因此,所有RS节点和调度器LB 只能在-一个局域网LAN中(小缺点)。
4、需要注意RS节点的VIP的绑定(lo:vip/32,lol:vip/32) 和ARP抑制问题。
5、强调下: RS节点的默认网关不需要是调度器LB的DIP, 而直接是IDC机房分配的上 级路由器的IP (这是RS带有外网IP地址的情况),理论讲:只要RS可以出网即可,不 是必须要配置外网IP。
6、由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请 求的报文的目的端口(和NAT要区别)。
7、当前,调度器LB支持几乎所有的UNIX, LINUX系统,但目前不支持WINDOWS系 统。真实服务器RS节点可以是WINDOWS系统。 8、总的来说DR模式效率很高,但是配置也较麻烦,因此,访问量不是特别大的公司可以 用haproxy/nginx取代之。这符合运维的原则:简单、易用、高效。日1000-2000W PV或 并发请求1万以下都可以考虑用haproxy/nginx (LVS NAT模式) 9、直接对外的访问业务,例如: web服务做RS节点,RS最好用公网IP地址。如果不直 接对外的业务,例如: MySQL,存储系统RS节点,最好只用内部IP地址。
3.1.3 TUN模式
FULLNAT原理模式:
特点:
1、负载均衡器通过把请求的报文通过IP 隧道(ipip 隧道,高级班讲这个)的方式(请求的报文不经过原目的地址的改写(包括MAC),而是直接封装成另外的IP报文)转发至真实服务器,而真实服务器将响应处理后直接返回给客户端用户。
2、由于真实服务器将响应处理后的报文直接返回给客户端用户,因此,最好RS有一一个外网IP地址,这样效率才会更高。理论上:只要能出网即可,无需外网IP地址。
3、由于调度器LB只处理入站请求的报文。因此,此集群系统的吞吐量可以提高10倍以 上,但隧道模式也会带来-定的系统开销。TUN模式适合LAN/WAN。
4、TUN模式的LAN环境转发不如DR模式效率高,而且还要考虑系统对IP隧道的支持问题。
5、所有的RS服务器都要绑定VIP, 抑制ARP,配置复杂。
6、LAN环境- -般多采用DR模式,WAN环境可以用TUN模式,但是当前在WAN环境下,请求 转发更多的被haproxy/nginx/DNS调度等代理取代。因此,TUN 模式在国内公司实际应用 的已经很少。跨机房应用要么拉光纤成局域网,要么DNS调度,底层数据还得同步。
7、直接对外的访问业务,例如: web服务做RS节点,最好用公网IP地址。不直接对外的 业务,例如: MySQL,存储系统RS节点,最好用内部IP地址。
四、算法
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr
固定调度算法:即调度器不会去判断后端服务器的繁忙与否,一如既往得将请求派发下去。
动态调度算法:调度器会去判断后端服务器的繁忙程度,然后依据调度算法动态得派发请求。
4.1、rr:轮询(round robin)
这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。这个调度的缺点是,不管后端服务器的繁忙程度是怎样的,调度器都会讲请求依次发下去。如果A服务器上的请求很快请求完了,而B服务器的请求一直持续着,将会导致B服务器一直很忙,而A很闲,这样便没起到均衡的左右。
4.2、wrr:加权轮询(weight round robin)
这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。
4.3、dh:目标地址散列调度算法 (destination hash)
简单的说,即将同一类型的请求分配给同一个后端服务器,例如将以 .jgp、.png等结尾的请求转发到同一个节点。这种算法其实不是为了真正意义的负载均衡,而是为了资源的分类管理。这种调度算法主要应用在使用了缓存节点的系统中,提高缓存的命中率。
4.4、sh:源地址散列调度算法(source hash)
即将来自同一个ip的请求发给后端的同一个服务器,如果后端服务器工作正常没有超负荷的话。这可以解决session共享的问题,但是这里有个问题,很多企业、社区、学校都是共用的一个IP,这将导致请求分配的不均衡。
4.5、lc:最少连接数(least-connection)
这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1。这里问题是无法做到会话保持,即session共享。
4.6、wlc:加权最少连接数(weight least-connection)
这个比最少连接数多了一个加权的概念,即在最少连接数的基础上加一个权重值,当连接数相近,权重值越大,越优先被分派请求。
4.7、lblc:基于局部性的最少连接调度算法(locality-based least-connection)
将来自同一目的地址的请求分配给同一台RS如果这台服务器尚未满负荷,否则分配给连接数最小的RS,并以它为下一次分配的首先考虑。
4.8、lblcr:基于地址的带重复最小连接数调度 (Locality-Based Least-Connection with Replication)