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负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

【章文嵩】百度百科:

  1. 曾经是TelTel公司的首席科学家,ChinaCluster的共同创办人。

  2. 曾在阿里巴巴任职近七年,历任淘宝网资深技术总监、淘宝技术委员会主席、阿里副总裁、阿里开源委员会主席、阿里云CTO等。

  3. 2016年5月27日,任滴滴出行高级副总裁、负责CTO线基础平台部兼工程技术委员会主席。

该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。

二、三种工作模式的解析

1、基于NAT的LVS模式负载均衡

LVS的负载均衡策略及LVS+KeepAlived+Nginx实现高可用方案

2、基于TUN的LVS负载均衡

在LVS(NAT)模式的集群环境中,由于所有的数据请求及响应的数据包都需要经过LVS调度器转发,如果后端服务器的数量大于10台,则调度器就会成为整个集群环境的瓶颈。我们知道,数据请求包往往远小于响应数据包的大小。因为响应数据包中包含有客户需要的具体数据,所以LVS(TUN)的思路就是将请求与响应数据分离,让调度器仅处理数据请求,而让真实服务器响应数据包直接返回给客户端。VS/TUN工作模式拓扑结构如图3所示。

LVS的负载均衡策略及LVS+KeepAlived+Nginx实现高可用方案

3、基于DR的LVS负载均衡

LVS的负载均衡策略及LVS+KeepAlived+Nginx实现高可用方案

三、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的三层架构

  1. 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。

  2. 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

五、LVS+KeepAlived+Nginx高可用实现方案

在大型网站中一般服务端会做集群,同时利用负载均衡器做负载均衡。这样有利于将大量的请求分散到各个服务器上,提升网站的响应速度。当然为了解决单点故障的问题,还会做热备份方案。这里演示利用LVS做负载均衡器,同时利用Keepalived保证其高可用,基于LVS的DR模式构建Nginx集群。

特别注意:

具体实现方式请参考博文LVS+KeepAlived+Nginx高可用实现方案及LVS + Keepalived + Nginx基于DR模式构建高可用方案

六、总结

1.优点

  1. 开源,免费

  2. 在网上能找到一些相关技术资源

  3. 具有软件负载均衡的一些优点

2.缺点

  1. 最核心的就是没有可靠的支持服务,没有人对其结果负责;

  2. 功能比较简单,支持复杂应用的负载均衡能力较差,如算法较少等;

  3. 开启隧道方式需重编译内核;

  4. 配置复杂;

  5. 主要应用于LINUX,目前没有专门用于WINDOWS的版本,不过可以通过配置,使windows成为LVS集群中的real server(win2003、win2008中)。


参考资料:

  1. https://blog.csdn.net/weixin_40470303/article/details/80541639

  2. https://blog.csdn.net/lupengfei1009/article/details/86514445

  3. https://www.cnblogs.com/atcloud/p/11281982.html


以上是关于LVS的负载均衡策略及LVS+KeepAlived+Nginx实现高可用方案的主要内容,如果未能解决你的问题,请参考以下文章

lvs及lvs+keepalived负载均衡

LVS负载均衡与keepalived架构

LVS+Keepalived高可用负载均衡架构原理及配置

负载均衡之----DR模式下LVS负载均衡 / keepalived后端故障检测 / Lvs+keepalived 实现高可用

LVS(负载均衡)+keepalived(HA)+Nginx(反向代理)+Web(动静态网站服务器)

架构设计:负载均衡层设计方案——LVS + Keepalived + Nginx安装及配置