详谈LVS负载均衡原理和应用场景
Posted 架构师技术联盟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详谈LVS负载均衡原理和应用场景相关的知识,希望对你有一定的参考价值。
在大规模互联网应用中,负载均衡设备是必不可少的一个节点,源于互联网应用的高并发和大流量的冲击压力,我们通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务器(数据库、缓存等等)。
负载均衡设备的任务就是作为应用服务器流量的入口,首先挑选最合适的一台服务器,然后将客户端的请求转发给这台服务器处理,实现客户端到真实服务端的透明转发。
负载均衡可以采用硬件设备,也可以采用软件负载。商用硬件负载设备成本通常较高(一台几十万上百万很正常),所以在条件允许的情况下我们会采用软负载,软负载解决的两个核心问题是:选谁、转发,其中最著名的是LVS。
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,。LVS是四层负载均衡,建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。 LVS是一个由章文嵩博士发起的自由软件项目,它的官方站点是 www.linuxvirtualserver.org。
现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。
使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
原理介绍
一般来说,LVS集群采用三层结构,其主要组成部分为:
服务器池(server pool),是一组真正执行客户请求的服务器(Real Server, RS),例如我们的MM、CMI、MC等。
共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
LVS实现方法
NAT技术
TUN技术
响应报文根据服务器的路由表直接返回给客户,而不经过负载调度器。
DR技术
LVS调度算法
静态调度
1、RR(Round Robin):轮询调度-轮叫调度
轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。
2、WRR: Weight加权(以权重之间的比例实现在各主机之间进行调度)
由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。
动态调度
1、LC(Least-Connection):最少连接
最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。
2、wlc(Weighted Least-Connection Scheduling):加权最少连接
加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。
3、sed(Shortest Expected Delay):最短期望延迟
简单算法:(active+1)*256/weight <(活动的连接数+1)*256/除以权重>
4、NQ(never queue):永不排队(改进的sed)
无需队列,如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算。
5、LBLC(Locality-Based Least Connection):基于局部性的最少连接
6、LBLCR(Locality-Based Least ConnectionswithReplication):带复制的基于局部性最少链接
Linux中LVS使用方法
更多架构师技术关知识请参考“架构师技术全店资料打包汇总(全)”电子书(32本技术资料打包汇总、详解目录和内容请通过“阅读原文”获取)。
温馨提示:
以上是关于详谈LVS负载均衡原理和应用场景的主要内容,如果未能解决你的问题,请参考以下文章