Linux LVS详解

LVS(Linux Virtual Server)即Linux虚拟服务器,是一个基于Linux操作系统的高性能、可扩展的负载均衡器。以下是对LVS的详细介绍:

一、简介

LVS项目由章文嵩博士在1998年5月发起,是中国国内最早出现的自由软件项目之一。LVS现在是Linux标准内核的一部分,提供了一个可靠的、高可用的解决方案,用于将来自客户端的请求分发到多个后端服务器,以实现负载均衡和高可用性。
概念:

  • VS:虚拟服务器,指LVS服务器自身
  • RS:提供服务的服务器
  • CIP:客户端ip地址
  • VIP:lvs服务器对外发布的ip地址,用户通过vip访问集群
  • DIP:LVS连内网的ip地址叫DIP,用于接收用户请求的ip叫做VIP

用户访问流程:
客户端通过 CIP—>VIP—>DIP---->RIP
工作模式:

  • lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
  • lvs-dr:操纵封装新的MAC地址
  • lvs-tun:在原请求IP报文之外新加一个IP首部
  • lvs-fullnat:修改请求报文的源和目标IP

二、结构组成

LVS集群架构主要由以下三部分组成:

  1. 负载调度器(Load Balancer/Director):是整个集群对外的前端机,负责将客户的请求发送到一组后端服务器上执行,而客户端则认为返回来是同一个IP(通常把这个IP叫成为虚拟IP或VIP)。

  2. 服务器池(Server Pool/Real Server):是一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。

  3. 共享存储(Shared Storage):为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
    另外,LVS主要由两部分组成:ipvs和ipvsadm。

    • ipvs:工作在内核空间,是LVS的核心组件,负责实际处理负载均衡和流量调度的功能。
    • ipvsadm:工作在用户空间,是一个命令行工具,用于管理和配置ipvs。

三、工作原理

当用户向负载均衡调度器(VS或者叫LB)发起请求时,调度器将请求发往至内核空间。PREROUTING链首先会接收到用户请求,判断目标IP确定为本机IP,将数据包发往INPUT链。IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链。POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器。
在这里插入图片描述

四、负载均衡模式

LVS提供了多种负载均衡模式,以适应不同的网络架构和需求。常用的模式有:

1. NAT(Network Address Translation)模式

LVS(Linux Virtual Server)NAT,即Linux虚拟服务器网络地址转换模式,是一种高性能、高可用的服务器集群系统。它通过IP负载均衡技术实现网络服务的负载均衡,其中NAT模式是LVS中最常用的一种工作模式。
在这里插入图片描述

1、工作原理

LVS NAT模式的工作原理如下:

  1. 客户端发送请求到负载均衡器的虚拟IP(VIP)地址。
  2. 负载均衡器接收请求后,根据预设的调度算法(如轮询、最少连接等)选择一台真实服务器(Real Server)。
  3. 负载均衡器将客户端的请求通过网络地址转换(NAT)转发给选中的真实服务器。在转发过程中,负载均衡器会重写请求报文的目标地址,将其改为真实服务器的IP地址。
  4. 真实服务器处理请求,并将响应数据发送回负载均衡器。
  5. 负载均衡器接收真实服务器的响应数据后,再次进行网络地址转换,将响应数据的源地址改为自己的IP地址,并将目的地址改为客户端的IP地址,然后将响应数据发送回客户端。
    在这里插入图片描述

在这里插入图片描述

2、配置过程

LVS NAT模式的配置过程通常包括以下几个步骤:

  1. 安装LVS软件包和内核模块。
  2. 在负载均衡器上配置虚拟IP(VIP)和真实服务器(RIP)池。
  3. 在负载均衡器上配置NAT规则和调度算法。
  4. 在真实服务器上配置共享存储(如NFS)并挂载,以实现会话共享。
  5. 配置真实服务器的网关指向负载均衡器,以确保响应数据包能够正确返回给客户端。
3、优缺点

LVS NAT模式的优点包括:

  1. 集群中的物理服务器可以使用任何支持TCP/IP的操作系统。
  2. 物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
  3. NAT模式可以支持不同网段的IP访问。

然而,LVS NAT模式也存在一些缺点:

  1. 扩展性有限。当服务器节点数量增长到一定数量时(如20个或更多),负载均衡器可能成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器进行地址转换。
  2. 所有的流量(无论是进来的还是出去的)都必须经过负载均衡器,这可能会增加网络延迟和带宽消耗。
4、应用场景

LVS NAT模式适用于以下场景:

  1. 集群中的服务器数量相对较少,且对扩展性要求不高的场景。
  2. 需要支持不同网段IP访问的场景。
  3. 对网络延迟和带宽消耗要求不高的场景。

示例:
在这里插入图片描述

2. DR(Direct Routing)模式

直接路由模式,在这种模式下,LVS不会改写请求包的IP和端口,但是会改写请求包的目的MAC地址为后端RS的MAC地址,然后将数据包转发。真实服务器处理请求后,响应包直接回给客户端,不再经过负载均衡器。DR模式的转发效率是最高的,特别适合下行流量较大的业务场景。
在这里插入图片描述

1、工作原理

LVS DR模式的工作原理基于二层数据链路层的转发,具体过程如下:

  1. 客户端发送请求到负载均衡器的虚拟IP(VIP)地址。
  2. 负载均衡器接收请求后,根据预设的调度算法(如轮询、最少连接等)选择一台真实服务器(Real Server)。
  3. 负载均衡器修改请求报文的目标MAC地址,将其改为选中真实服务器的MAC地址,但源IP地址和目标IP地址保持不变。然后,负载均衡器将修改后的请求报文通过二层数据链路层转发给选中的真实服务器。
  4. 真实服务器接收请求报文后,处理请求并生成响应报文。响应报文的源IP地址是真实服务器的IP地址,目标IP地址是客户端的IP地址。
  5. 真实服务器将响应报文通过本地网络接口直接发送给客户端,而不需要经过负载均衡器。
    在这里插入图片描述
2、配置过程

LVS DR模式的配置过程通常包括以下几个步骤:

  1. 安装LVS软件包:在负载均衡器和真实服务器上安装LVS软件包和必要的内核模块。
  2. 配置VIP:在负载均衡器和所有真实服务器的本地环回接口(lo)上配置VIP地址。这通常通过创建虚拟网络接口或修改网络配置文件来实现。
  3. 配置ARP抑制:为了避免ARP冲突,需要配置真实服务器不响应针对VIP的ARP请求。这可以通过修改内核参数(如arp_ignore和arp_announce)或使用arptables工具来实现。
  4. 配置路由:确保真实服务器的默认网关不指向负载均衡器,以避免响应报文经过负载均衡器。同时,需要在前端路由器或网关上配置静态路由,将目标IP为VIP的请求报文发往负载均衡器。
  5. 配置LVS调度:在负载均衡器上配置LVS调度算法和规则,将请求分发到不同的真实服务器。
3、优缺点

LVS DR模式的优点包括:

  1. 高性能:由于响应报文直接由真实服务器发送给客户端,而不需要经过负载均衡器,因此减少了负载均衡器的带宽消耗和延迟。
  2. 高扩展性:随着真实服务器数量的增加,LVS DR模式可以轻松地扩展负载均衡能力。
  3. 灵活性:真实服务器可以使用私有地址或公网地址,且支持不同网段的IP访问。

然而,LVS DR模式也存在一些缺点:

  1. 配置复杂性:相对于其他模式,LVS DR模式的配置过程较为复杂,需要处理ARP抑制和路由配置等问题。
  2. 网络依赖性:LVS DR模式依赖于二层数据链路层的转发,因此要求负载均衡器和真实服务器必须在同一个物理网络中。
4、应用场景

LVS DR模式适用于以下场景:

  1. 大规模服务器集群:需要处理大量并发请求的场景,如大型网站、在线游戏服务器等。
  2. 高性能要求:对响应时间和带宽消耗有较高要求的场景,如金融交易系统、实时通信系统等。
  3. 跨网段访问:需要支持不同网段IP访问的场景,如跨地域的分布式服务器集群。

示例:
在这里插入图片描述

3. TUN(Tunneling)模式

隧道模式,LVS通过在IP数据包外面再封装了一层Ip Tunnel 头部,将数据包的源地址改写为LVS自身的物理地址,目的地址改写为RS的物理地址,从而实现跨网段访问RS。
在这里插入图片描述

1、工作原理

LVS TUN模式的工作原理基于IP隧道技术,具体过程如下:

  1. 客户端发送请求到负载均衡器的虚拟IP(VIP)地址。
  2. 负载均衡器接收请求后,根据预设的调度算法(如轮询、最少连接等)选择一台真实服务器(Real Server)。
  3. 负载均衡器对请求报文进行封装,即在原IP报文之外再添加一个新的IP首部。新的IP首部的源IP地址是负载均衡器的IP地址(DIP),目标IP地址是选中真实服务器的IP地址(RIP)。然后,负载均衡器将封装后的请求报文发送给选中的真实服务器。
  4. 真实服务器接收封装后的请求报文后,先解开IP隧道包头信息,得到原始的请求报文,然后处理请求并生成响应报文。响应报文的源IP地址是真实服务器的VIP地址(在真实服务器的隧道接口上配置),目标IP地址是客户端的IP地址。
  5. 真实服务器将响应报文通过本地网络接口直接发送给客户端,而不需要经过负载均衡器。
    在这里插入图片描述
2、配置过程

LVS TUN模式的配置过程通常包括以下几个步骤:

  1. 安装LVS软件包:在负载均衡器和真实服务器上安装LVS软件包和必要的内核模块,如ipip模块。
  2. 配置VIP和DIP:在负载均衡器的隧道接口(如tunl0)上配置VIP地址,并在真实服务器的隧道接口上也配置相同的VIP地址。同时,确保负载均衡器和真实服务器的IP地址(DIP和RIP)是公网地址或能够相互通信。
  3. 配置隧道:在负载均衡器和真实服务器上激活隧道接口,并配置路由规则以确保封装后的请求报文能够正确转发到真实服务器。
  4. 配置LVS调度:在负载均衡器上配置LVS调度算法和规则,将请求分发到不同的真实服务器。
3、优缺点

LVS TUN模式的优点包括:

  1. 跨网络访问:由于使用了IP隧道技术,LVS TUN模式可以支持不同网络之间的访问,适用于分布式服务器集群。
  2. 高性能:负载均衡器只负责将请求报文分发给真实服务器,而真实服务器直接响应客户端的请求,减少了负载均衡器的带宽消耗和延迟。
  3. 灵活性:真实服务器可以使用不同的操作系统和硬件配置,只要支持IP隧道协议即可。

然而,LVS TUN模式也存在一些缺点:

  1. 配置复杂性:相对于其他模式,LVS TUN模式的配置过程较为复杂,需要处理隧道接口、路由规则等问题。
  2. 服务器要求:所有真实服务器都需要支持IP隧道协议,这可能限制了服务器的选择范围。
4、应用场景

LVS TUN模式适用于以下场景:

  1. 分布式服务器集群:需要跨网络访问的分布式服务器集群,如跨地域的Web服务器集群、数据库服务器集群等。
  2. 高性能要求:对响应时间和带宽消耗有较高要求的场景,如在线视频服务、实时通信系统等。
  3. 异构服务器环境:真实服务器使用不同操作系统和硬件配置的场景,只要它们都支持IP隧道协议。

示例:
在这里插入图片描述

五、负载均衡算法

LVS(Linux Virtual Server)即Linux虚拟服务器,是一个基于Linux的开源负载均衡器项目,其负载均衡算法是LVS的核心技术。

  1. 轮询调度算法(Round Robin,RR):
    • 工作原理:按顺序将请求依次分配给每台服务器,假设每台服务器的处理能力相同,从而实现请求的平均分配。
    • 优点:实现简单、公平,确保每个后端服务器都有机会处理请求。
    • 缺点:无法根据服务器的负载情况进行动态调整,无法应对服务器不同的性能差异。
  2. 加权轮询调度算法(Weighted Round Robin,WRR):
    • 工作原理:在轮询的基础上增加了权重的概念,根据各台服务器的处理能力不同给予不同的权重,处理能力强的服务器分配更多的请求。
    • 优点:考虑了服务器的性能差异,能够更加合理地分配请求。
  3. 最小连接调度算法(Least Connections,LC):
    • 工作原理:将新请求分配给当前连接数最少的服务器,适用于服务器性能相近的环境。
    • 优点:可以根据服务器的实际负载情况进行动态调整,将请求分配给负载较轻的服务器。
    • 缺点:需要实时跟踪每个后端服务器的连接数,增加了额外的开销。
  4. 加权最小连接调度算法(Weighted Least Connections,WLC):
    • 工作原理:结合了最小连接和权重,按照服务器的连接数和权重进行综合考量,权重高的服务器处理更多连接。
    • 优点:在最小连接的基础上考虑了服务器的性能差异,能够更加合理地分配请求。
  5. 基于局部性的最少链接调度算法(Locality-Based Least Connections,LBLC):
    • 工作原理:主要用于Cache集群系统,根据请求的目标IP地址找出最近使用的服务器,如果该服务器可用且未超载则分配请求。
    • 优点:可以提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。
  6. 带复制的基于局部性最少链接调度算法(Locality-Based Least Connections with Replication,LBLCR):
    • 工作原理:维护一个目标IP到一组服务器的映射,并按最小连接原则从服务器组中选择一台未超载的服务器处理请求。与LBLC算法不同之处在于,它要维护从一个目标IP地址到一组服务器的映射。
  7. 目标地址散列调度算法(Destination Hashing,DH):
    • 工作原理:使用请求的目标IP地址作为散列键,从静态分配的散列表中找到对应的服务器。
  8. 源地址散列调度算法(Source Hashing,SH):
    • 工作原理:使用请求的源IP地址作为散列键,从静态分配的散列表中找到对应的服务器。这种算法可以确保特定客户端的会话维持在同一台服务器上,适用于需要保持会话一致性的应用。
  9. 最短的期望延迟调度算法(Shortest Expected Delay Scheduling,SED):
    • 工作原理:基于WLC算法,通过计算每个服务器的响应时间估计值来分配请求,旨在减少请求的总体响应时间。
  10. 无需队列调度算法(Never Queue Scheduling,NQ):
    • 工作原理:直接将请求分配给当前连接数为零的服务器,从而避免排队延迟。

六、优缺点

LVS的优点包括:

1. **高性能**:LVS能够实现高吞吐量和低延迟的负载均衡。
2. **可扩展性**:LVS支持横向扩展,可以轻松地添加更多的后端服务器以应对不断增长的流量和负载。
3. **可靠性**:LVS支持多种负载均衡算法,提供高可用性和容错能力。
4. **灵活性**:LVS提供了多种工作模式,以适应不同的网络架构和需求。
5. **开源和免费**:LVS是一个开源项目,可以免费使用和定制。

LVS的缺点包括:

1. **配置复杂**:LVS的配置相对复杂,需要对网络和负载均衡概念有一定的了解。
2. **缺乏图形界面**:LVS主要是通过命令行工具进行配置和管理,缺乏直观的图形界面。
3. **有限的支持和文档**:相比于商业解决方案,LVS的支持和文档资源相对有限。
4. **依赖于Linux内核**:LVS是一个基于Linux内核的解决方案,因此它的使用受限于支持LVS的Linux发行版和内核版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/454344.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter Container容器组件实战案例

The Container widget is your design toolkit. It’s like the master builder that helps you structure and style your UI elements with precision. Whether you’re creating simple designs or complex layouts, the Container is your trusty tool for the job. “容器…

如何在算家云搭建GPT-SOVITS(语音转换)

一、模型介绍 GPT-SOVITS是一款强大的小样本语音转换和文本转语音 WebUI工具。它集成了声音伴奏分离、自动训练集分割、中文ASR和文本标注等辅助工具。 具有以下特征: 零样本 TTS: 输入 5 秒的声音样本并体验即时文本到语音的转换。少量样本 TTS&…

ESC服务器被暴力破解如何解决

使用fail2ban解决 黑客怎么暴力破解的?安装教程一些命令 黑客怎么暴力破解的? 他们一般是用脚本扫描公网上的ip地址, 一个个ping, 如果ping通了, 就开始以这个公网ip尝试连接服务器, 比如使用ssh, 接下来就输入密码了, 暴力破解他们一般都有密码表的, 一个个试, 密码简单很容…

【赵渝强老师】Oracle的参数文件与告警日志文件

一、Oracle的参数文件 在Oracle数据库中,参数文件在通常情况下指的就是初始化参数文件(Initialization Parameter File)。在参数文件中包括了初始化参数文件和服务器端参数文件。在Oracle数据库启动的时候就会读取参数文件,然后根据参数文件…

C++ 进阶:类相关特性的深入探讨

⭐在对C 中类的6个默认成员函数有了初步了解之后,现在我们进行对类相关特性的深入探讨! 🔥🔥🔥【C】类的默认成员函数:深入剖析与应用(上) 【C】类的默认成员函数:深入剖…

python实战项目46:selenium爬取百度新闻

python实战项目46:selenium爬取百度新闻 一、项目简介二、完整代码一、项目简介 思路是首先使用selenium打开百度新闻页面,然后实现翻页操作,获取每条新闻的标题和链接。接下来的问题是,在遍历标题和链接,对每一个链接发送请求时,发现会弹出百度安全验证,本文的思路是使…

浪潮云启操作系统(InLinux)bcache缓存实践:理解OpenStack环境下虚拟机卷、Ceph OSD、bcache设备之间的映射关系

前言 在OpenStack平台上,采用bcache加速ceph分布式存储的方案被广泛用于企业和云环境。一方面,Ceph作为分布式存储系统,与虚拟机存储卷紧密结合,可以提供高可用和高性能的存储服务。另一方面,bcache作为混合存储方案&…

新版idea菜单栏展开与合并

新版idea把菜单栏合并了看着很是不习惯,找了半天原来在这里展开 ① 点击文件 -> 设置 ② 点击外观与行为 -> 外观 -> 合并主菜单和窗口标题 然后确定,重启即可

HTML作业

作业 复现下面的图片 复现结果 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><form action"#"method"get"enctype"text/plain"><…

演示:基于WPF的DrawingVisual开发的高刷新率示波器

一、目的&#xff1a;分享一个基于WPF的DrawingVisual开发的高刷新率示波器 二、效果演示 特此说明&#xff1a;由于Gif录制工具帧率不够&#xff0c;渲染60帧用了4.6秒&#xff0c;平均帧率在12Hz左右&#xff0c;所以展示效果不好&#xff0c;想要看好些的效果可以看文章下面…

【目标检测2024】DetCLIP

算法介绍 CLIP&#xff08;Contrastive Language-Image Pre-Training&#xff09;模型是一种多模态预训练神经网络&#xff0c;由OpenAI在2021年发布&#xff0c;是从自然语言监督中学习的一种有效且可扩展的方法。CLIP在预训练期间学习执行广泛的任务&#xff0c;包括OCR&…

DORA 机器人中间件学习教程(6)——激光点云预处理

文章目录 1 移植思路2 代码输入输出说明3 编写CmakeList.txt文件4 编写yml文件5 编译并启动节点参考资料 在DORA中通过驱动获取激光雷达数据后&#xff0c;激光点云预处理部分代码是参考了autoware官方代码并对其进行裁剪得到的&#xff0c;点云预处理主要包含三个节点&#xf…

32.第二阶段x86游戏实战2-遍历技能2(技能二叉树基址)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

[数据集][目标检测]电力场景输电线路巡检检测数据集VOC+YOLO格式8667张50类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8667 标注数量(xml文件个数)&#xff1a;8667 标注数量(txt文件个数)&#xff1a;8667 标注…

双碳目标下储能产业新趋势与架构

0.引言 储能技术涉及能量的存储和利用&#xff0c;对电力系统平衡至关重要。它允许电力在需求时被储存和释放&#xff0c;对电力生产和消费方式产生重大影响。随着全球应对气候变化&#xff0c;风能和太阳能成为主要能源&#xff0c;但其不稳定性需要储能技术来提高可靠性。储…

在做题中学习(65):Z字形变换

6. Z 字形变换 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;模拟 思路&#xff1a;把原字符串从上到下依次读取到新字符串中&#xff0c;就需要看看Z字形变换时字符变化的规律。 以行数h4时为例&#xff1a; 对于第一行和最后一行&#xff1a; 每一个字符的下标…

Java笔试06

在Java中&#xff0c;异常可以分为两大类&#xff1a;编译时异常&#xff08;编译时检查异常&#xff09;和运行时异常&#xff08;非编译时检查异常&#xff09;。 编译时异常&#xff08;Checked Exceptions&#xff09;是指在编译时期必须被捕获或声明抛出的异常。这些异常…

基于springboot家乡特色推荐系统

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…

Q宠大乐斗批量好友添加器(基于python实现)

效果如下: 只要有自动化测试的浏览器和插件就能批量添加等级相近的陌生人为好友,过程迅速,分两个py文件 第一个是主程序: import tkinter as tk import re from tkinter import scrolledtext, font, ttk, messagebox, filedialog from selenium import webdriver from se…

10_实现readonly

在某些时候&#xff0c;我们希望定义一些数据是只读的&#xff0c;不允许被修改&#xff0c;从而实现对数据的保护&#xff0c;即为 readonly 只读本质上也是对数据对象的代理&#xff0c;我们同样可以基于之前实现的 createReactiveObject 函数来实现&#xff0c;可以为此函数…