前言:
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,现在已经是 Linux标准内核的一部分。在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

一、为什么要使用LVS集群技术:
通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

二、负载均衡的作用
负载均衡设备的任务就是作为应用服务器流量的入口,首先挑选最合适的一台服务器,然后将客户端的请求转发给这台服务器处理,实现客户端到真实服务端 的透明转发。最近几年很火的「云计算」以及分布式架构,本质上也是将后端服务器作为计算资源、存储资源,由某台管理服务器封装成一个服务对外提供,客户端 不需要关心真正提供服务的是哪台机器,在它看来,就好像它面对的是一台拥有近乎无限能力的服务器,而本质上,真正提供服务的,是后端的集群。

三、LVS架构

使用LVS架设的服务器集群系统有三个部分组成,最前端的负载均衡层,用Load Balancer表示,中间的服务器群组层,用Server Array表示,最底端的数据共享存储层,用Shared Storage表示,在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。
(1) Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各Real Server的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。
(2) Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。
(3) Shared Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Redhat的GFS文件系统,oracle提供的OCFS2文件系统等。
从整个LVS结构可以看出,Director Server是整个LVS的核心,目前,用于Director Server的操作系统只能是Linux和FreeBSD,linux2.6内核不用任何设置就可以支持LVS功能,而FreeBSD作为Director Server的应用还不是很多,性能也不是很好。
对于Real Server,几乎可以是所有的系统平台,Linux、windows、Solaris、AIX、BSD系列都能很好的支持。
一个典型的互联网应用的拓扑结构是这样的:

四、负载均衡的类型

负载均衡可以采用硬件设备,也可以采用软件负载。

商用硬件负载设备成本通常较高(一台几十万上百万很正常),所以在条件允许的情况下我们会采用软负载,软负载解决的两个核心问题是:选谁、转发,其中最著名的是LVS(Linux Virtual Server)。

五、软负载——LVS

LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。

LVS的转发主要通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。

那么为什么LVS是在第四层做负载均衡?

首先LVS不像HAProxy等七层软负载面向的是HTTP包,所以七层负载可以做的URL解析等工作,LVS无法完成。 其次,某次用户访问是与服务端建立连接后交换数据包实现的,如果在第三层网络层做负载均衡,那么将失去「连接」的语义。软负载面向的对象应该是一个已经建 立连接的用户,而不是一个孤零零的IP包。后面会看到,实际上LVS的机器代替真实的服务器与用户通过TCP三次握手建立了连接,所以LVS是需要关心 「连接」级别的状态的。

LVS的工作模式主要有4种:

DR

NAT

TUNNEL

Full-NAT

六、lvs集群类型中的术语:

VS:Virtual Server, Director, Dispatcher(调度器) Load Balancer 虚拟服务器,调度服务器,负载均衡服务器
RS:Real Server(lvs), upstream server(nginx) backendserver(haproxy) 真正提高服务的服务器
CIP:Client IP 客户端的IP地址
VIP: Virtual serve 调度服务器的外网IP
DIP: Director IPVS 调度服务器的内网的IP
RIP: Real server IP 真正提高服务的IP

优点:
集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。

缺点:
扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计算。

解决办法:
即使是是负载均衡器成为整个系统的瓶颈,如果是这样也有两种方法来解决它。一种是混合处理,另一种是采用Virtual Server via IP tunneling或Virtual Server via direct routing。如果采用混合处理的方法,将需要许多同属单一的RR DNS域。你采用Virtual Server via IP tunneling或Virtual Server via direct routing以获得更好的可扩展性。也可以嵌套使用负载均衡器,在最前端的是VS-Tunneling或VS-Drouting的负载均衡器,然后后面采用VS-NAT的负载均衡器。

七、DR模型

如图是DR的原理图

LVS-DR模型原理解释:
①首先,客户端访问虚拟服务器,经过DNS解析,得到目标IP为VIP,客户端发送请求,请求包的源IP为CIP,目标IP为VIP。通过互联网到达虚拟服务器。
②请求包到达虚拟服务器的VIP后,请求包的源IP和目标IP都不变,由调度器把请求包的源MAC修改为DIP的MAC地址,目标MAC地址修改为Real Server的MAC地址。通过调度算法确定Real Server集群中的一台服务器的MAC地址。
③Real Server上应该有两个IP,一个是RIP,另一个需要绑定一个VIP地址在回环网卡上,我们需要修改内核参数,使回环网卡屏蔽arp广播请求,避免和虚拟服务器上的VIP产生混乱。
④当数据包到达Real Server后,服务器处理请求,构成响应,此时数据包的源IP为VIP,目标IP为CIP,源MAC地址为RIP物理网卡的地址,目标MAC地址为下一跳的路由,通过互联网发送至客户端。
⑤DR模式是最好模式。

八、LAS-NAT模型

LVS-NAT模型原理解释:
①首先,客户端访问虚拟服务器,经过DNS解析,得到目标IP为VIP,客户端发送请求,请求包的源IP为CIP,目标IP为VIP。通过互联网到达虚拟服务器。
②虚拟服务器上的调度器把请求把的目标IP更改为RIP,源IP不变,虚拟副此时作为一个客户端,通过调度算法,发送请求包给RS集群服务器中的一台服务器。
③RS处理请求包,构成响应,响应包的源IP为RIP,目标IP为VIP,发送响应包给LVS。
④LVS收到响应包后,把目标IP更改为CIP,源IP不变。通过互联网发送至客户端。这样,这个响应包对客户端看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端RS的存在。

优点:
可扩展性强,ld不会成为业务增长的瓶颈

缺点:
节点不能跨网段,即real server和ld必须在一个物理网段中,一定程度上可能会使用多个公网IP
realserver上须有一块网卡不接受arp广播

九、调度算法

根据其调度时是否考虑各real server服务器当前的负载状态,分为静态方法和动态方法,
1.静态算法(4种):只根据算法进行调度 而不考虑后端服务器的实际连接情况和负载情况
①.RR:轮叫调度(Round Robin)
  调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

②.WRR:加权轮叫(Weight RR)
  调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

③.DH:目标地址散列调度(Destination Hash )
  根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

④.SH:源地址 hash(Source Hash)
  源地址散列”调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

2.动态算法(6种):前端的调度器会根据后端真实服务器的实际连接情况来分配请求

①.LC:最少链接(Least Connections)
算法:Overhead=activeconns*256+inactiveconns
  调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。

②.WLC:加权最少连接(默认采用的就是这种)(Weighted Least Connections)
算法:Overhead=(activeconns*256+inactiveconns)/weight
  在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

③.SED:最短延迟调度(Shortest Expected Delay )
算法:Overhead=(activeconns+1)*256/weight
  在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态。

④.NQ永不排队/最少队列调度(Never Queue Scheduling NQ)

  无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空间。在SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考虑非活动连接,才用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd的处于保持状态的服务就需要考虑非活动连接给服务器的压力。

⑤.LBLC:基于局部性的最少链接(locality-Based Least Connections)
  基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。

⑥. LBLCR:带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)
  带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

lvs实现负载均衡原理详解相关推荐

  1. 均衡原理_干货什么是负载均衡?负载均衡原理详解

    负载均衡是高可用网络基础架构的一个关键组成部分,有了负载均衡,我们通常可以将我们的应用服务器部署多台,然后通过负载均衡将用户的请求分发到不同的服务器用来提高网站.应用.数据库或其他服务的性能以及可靠性 ...

  2. OpenFeign远程调用负载均衡原理详解

          SpringCloudAlibaba中使用OpenFeign时,默认的负载均衡策略是轮询调用.我们不做任何配置的时候,使用OpenFeign调用的时候,框架中是如何把负载均衡LoadBal ...

  3. 使用LVS实现负载均衡原理及安装配置详解

    使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均 ...

  4. 思科ccna认证VRRP负载均衡技术详解

    在VRRP标准协议模式中,只有Master路由器可以转发报文,Backup路由器处于监听状态,无法转发报文.虽然创建多个备份组可以实现多个路由器之间的负载分担,但是局域网内的主机需要设置不同的网关,增 ...

  5. Nacos系列--权重(负载均衡)--作用/详解

    原文网址:Nacos系列--权重(负载均衡)--作用/详解_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Nacos的权重的用法,它是一种负载均衡的方法. 权重的含义 Nacos控制台可以设置 ...

  6. 分布式架构系列: 负载均衡技术详解 | 技术头条

    戳蓝字"CSDN云计算"关注我们哦! 技术头条:干货.简洁.多维全面.更多云计算精华知识尽在眼前,get要点.solve难题,统统不在话下! 作者:ITFLY8 转自:架构师技术联 ...

  7. LVS负载均衡--知识详解

    一. 集群的概念 服务器集群简称集群是一种服务器系统,它通过一组松散集成的服务器软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台服务器. 集群系统中的单个服务器通常 ...

  8. linux搭建LVS+keepalive+nginx实现集群高性能负载均衡配置详解

    关于nginx配置tomcat实现负载均衡可参考http://blog.csdn.net/liqi_q/article/details/78063603 安装jdk可参考:http://blog.cs ...

  9. nginx反向代理及负载均衡使用详解

    nginx反向代理及负载均衡使用说明 文章目录 nginx反向代理及负载均衡使用说明 集群介绍 负载均衡架构图 为什么要使用集群 集群种类 负载均衡概念说明 压力测试 反响代理概念说明 反向代理图解 ...

最新文章

  1. 面向程序员的网络基本知识 - 网络模型及网络设备
  2. Shell脚本实战之文件批量创建和修改
  3. JSTL 与 JSP 代码段 相互调用变量
  4. web策略类游戏开发(四)一个可以承载万人在线的架构
  5. c# webbrowser  获取用户选中文字
  6. C#异步编程-------异步编程模型(APM)
  7. LeetCode每日打卡 - 汉明距离
  8. hibernate映射数据库表如何在不插入值的情况下使表中字段默认值生效
  9. Koa2-下载-文件流
  10. Python+常用模块(2).md
  11. Jmeter-【JSON Extractor】-响应结果中数组多个相同key取值
  12. djangosave保存数据太慢_PaddlePaddle从入门到炼丹八——模型的保存与使用
  13. hdu2084数塔----DP入门
  14. 黑马程序员传智播客 正则表达式学习笔记 匹配单个字符多个字符
  15. C++引用之引用的使用
  16. 最近公共祖先 python_lintcode :最近公共祖先
  17. viso 画背景框_officevisio怎么设置背景图和图纸...
  18. EasyPlayer播放H.265的HLS视频流出现加载异常的问题分析及解决方法
  19. 通过PCF8591读取电压值(AD转换)
  20. UE 某图局部 展UV 图标 / CSS 精灵图(sprite) 好像

热门文章

  1. 小身板大能量 清微智能边缘盒子满足多场景智能应用
  2. Java使文本框失去焦点的方法,使文本框text1获得焦点,js使文本框失去焦点
  3. java 二元一次方程式_【java】用户输入二元一次方程的三个系数,计算机求解二元一次方程。...
  4. 使用虚拟机在CentOS上安装部署openGauss数据库指导(下)
  5. 机器学习模型的数据预处理和可视化
  6. react 表单受控组件
  7. 复杂问题要想着怎么还原成简单问题
  8. 深入理解Java虚拟机二(类加载器和类的加载过程)
  9. 预制变电站的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  10. Mac-查看开关机记录