前言:
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. MYSQL 中的LEFT( RIGHT ) JOIN使用ON 与WHERE 筛选的差异
  2. [scala-spark]11. RDD控制操作
  3. 技术实践 | Android 设备音视频兼容性适配
  4. Common-lang包中StringUtils用法
  5. Android开发之fragment传递参数的两种方法
  6. 如何将自己的Java项目部署到外网
  7. linux编译c 优化,Linux编译选项
  8. css中的换行符_如何使用CSS防止项目列表中的换行符?
  9. 插入移动硬盘_Win10插入移动硬盘或U盘有提示声但电脑中不显示的解决方法
  10. bzoj 2707: [SDOI2012]走迷宫(Trajan+高斯消元+Dp)
  11. 华三H3C链路聚合配置实例
  12. [转]NetBeans开发Applet方法实例学习
  13. 吴恩达深度学习课程练习题汇总(第二周)
  14. 微信小程序测试点总结
  15. tailscale自建derper服务器中转,使用自定义端口
  16. 2022年河南省高职单招(综合素质)考试冲刺试题及答案
  17. android 关闭蓝牙功能,android – 打开和关闭蓝牙?
  18. Linux Panic 机制解析
  19. Jetpack Compose 深入探索系列一:Composable 函数
  20. 2021年幼儿园教师招聘:中班绘画活动《吹画梅花》

热门文章

  1. Flink 最锋利的武器:Flink SQL 入门和实战
  2. 转战C#---day2
  3. 阿飞之死(故事新编)
  4. android-沉浸状态栏以及状态栏背景色如何设置
  5. 微信web开发者工具报错笔记
  6. Donald E. Knuth
  7. CountDownLatch并发测试
  8. 书单丨关于程序员技能成长与技术转型的5本秘籍
  9. 死磕solidity之如何有效的节省gas.md
  10. python 安装 fitz pip安装模块时提示: No module named pip