LVS的负载均衡策略及LVS+KeepAlived+Nginx实现高可用方案
Posted 架构真经
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVS的负载均衡策略及LVS+KeepAlived+Nginx实现高可用方案相关的知识,希望对你有一定的参考价值。
前面讲的nginx负载均衡,是属于网络七层负载,今天讲另外一种负载均衡技术LVS,它是基于网络四层进行负载,性能很好,通常在大型项目中,我们会同时使用四层和七层负载。
一、LVS简介
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。是中国国内最早出现的自由软件项目之一。
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。
【章文嵩】百度百科:
曾经是TelTel公司的首席科学家,ChinaCluster的共同创办人。
曾在阿里巴巴任职近七年,历任淘宝网资深技术总监、淘宝技术委员会主席、阿里副总裁、阿里开源委员会主席、阿里云CTO等。
2016年5月27日,任滴滴出行高级副总裁、负责CTO线基础平台部兼工程技术委员会主席。
该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。
二、三种工作模式的解析
1、基于NAT的LVS模式负载均衡
2、基于TUN的LVS负载均衡
在LVS(NAT)模式的集群环境中,由于所有的数据请求及响应的数据包都需要经过LVS调度器转发,如果后端服务器的数量大于10台,则调度器就会成为整个集群环境的瓶颈。我们知道,数据请求包往往远小于响应数据包的大小。因为响应数据包中包含有客户需要的具体数据,所以LVS(TUN)的思路就是将请求与响应数据分离,让调度器仅处理数据请求,而让真实服务器响应数据包直接返回给客户端。VS/TUN工作模式拓扑结构如图3所示。
3、基于DR的LVS负载均衡
三、LVS负载均衡调度算法
根据前面的介绍,我们了解了LVS的三种工作模式,但不管实际环境中采用的是哪种模式,调度算法进行调度的策略与算法都是LVS的核心技术,LVS在内核中主要实现了一下十种调度算法。
1.轮询调度
轮询调度(Round Robin 简称'RR')算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2.最少队列调度
最少队列调度(Never Queue 简称'NQ')算法,无需队列。如果有realserver的连接数等于0就直接分配过去,不需要在进行SED运算。
3.基于局部的最少连接
4.源地址散列调度U
5.带复制的基于局部性的最少连接
6.目标地址散列调度
7.最短的期望的延迟
最短的期望的延迟调度(Shortest Expected Delay 简称'SED')算法基于WLC算法。举个例子吧,ABC三台服务器的权重分别为1、2、3 。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用SED算法后会进行一个运算
A:(1+1)/1=2 B:(1+2)/2=3/2 C:(1+3)/3=4/3 就把请求交给得出运算结果最小的服务器。
8.加权轮询调度
加权轮询(Weight Round Robin 简称'WRR')算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
9.最小连接调度
最小连接调度(Least Connections 简称'LC')算法是把动态地将网络请求调度到已建立的廉洁书最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“ 最小连接 ”调度算法可以较好地均衡负载
10.加权最小连接调度
加权最少连接(Weight Least Connections 简称'WLC')算法是在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
四、LVS的三层架构
服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
五、LVS+KeepAlived+Nginx高可用实现方案
在大型网站中一般服务端会做集群,同时利用负载均衡器做负载均衡。这样有利于将大量的请求分散到各个服务器上,提升网站的响应速度。当然为了解决单点故障的问题,还会做热备份方案。这里演示利用LVS做负载均衡器,同时利用Keepalived保证其高可用,基于LVS的DR模式构建Nginx集群。
特别注意:
具体实现方式请参考博文LVS+KeepAlived+Nginx高可用实现方案及LVS + Keepalived + Nginx基于DR模式构建高可用方案
六、总结
1.优点
开源,免费
在网上能找到一些相关技术资源
具有软件负载均衡的一些优点
2.缺点
最核心的就是没有可靠的支持服务,没有人对其结果负责;
功能比较简单,支持复杂应用的负载均衡能力较差,如算法较少等;
开启隧道方式需重编译内核;
配置复杂;
主要应用于LINUX,目前没有专门用于WINDOWS的版本,不过可以通过配置,使windows成为LVS集群中的real server(win2003、win2008中)。
参考资料:
https://blog.csdn.net/weixin_40470303/article/details/80541639
https://blog.csdn.net/lupengfei1009/article/details/86514445
https://www.cnblogs.com/atcloud/p/11281982.html
以上是关于LVS的负载均衡策略及LVS+KeepAlived+Nginx实现高可用方案的主要内容,如果未能解决你的问题,请参考以下文章
负载均衡之----DR模式下LVS负载均衡 / keepalived后端故障检测 / Lvs+keepalived 实现高可用