随着Internet用户的增长,基于Web的公司处理的通信量急剧增加。有各种解决方案来应对这种不断增长的流量。

一种解决方案是垂直扩展服务器(即:简单地向服务器添加更多的CPU和内存资源。)当然在一定程度上是无法完成的。

另一个解决方案是水平扩展服务器(:添加更多可以应对流量激增的服务器。)。这种机制通常称为集群。

在集群中,多台服务器作为单个组件共同作用,向最终用户提供所需的服务。

当流量/负载增加时,我们可以简单地将更多服务器添加到群集中,因此它具有更高的可扩展性。

在本文中,我们将重点介绍可用于Linux虚拟服务器(LVS)的不同方法和方案。

LVS是一个开源项目,始于1998年,其主要重点是使用由商用硬件组成的集群来构建高可用性和负载平衡解决方案。

如上图所示,典型的LVS群集由位于前面的负载均衡器和位于后面的一组服务器(称为“真实服务器”)组成。最终用户请求首先发送到虚拟IP地址(VIP)。

VIP或虚拟IP地址是为虚拟群集提供的服务添加为A记录的地址。路由器的主要工作(如上图中心所示,Linux框为Linux)是将用户的请求发送到真实服务器。因此,有时也称为调度程序。

从最终用户向真实服务器发送请求的方法有多种。LVS具有三种服务请求的模式。这些在下面提到。

  • LVS VIA NAT(网络地址转换)相关信息: 什么是网络地址转换?
  • LVS VIA IP隧道
  • LVS VIA直接路由

什么是LVS VIA NAT?

通过NAT的Linux虚拟服务器是最简单的配置。这是因为在真实服务器上不需要修改。真实服务器可以是任何支持TCP IP堆栈的操作系统。通过NAT的LVS是使用Linux中的IP伪装技术实现的。用户的请求首先到达分配给前端负载均衡器的虚拟IP。然后,负载均衡器会对数据包进行调查,并使用池中真实服务器的目标地址对其进行修改,然后将其转发至真实服务器。

此处要注意的另一重要事项是虚拟IP(客户端访问的IP,通常作为提供服务的域名的A记录添加到IP中)仅分配给负载均衡器。Real服务器可以具有任何专用寻址方案。

让我们研究当请求到达前端负载均衡器时,直到响应传递回客户端之前发生的一系列事件。为了理解这一系列事件,让我们考虑一个从客户端到虚拟服务器的示例请求,以及从负载均衡器返回到客户端的最终响应。以下是我们将用来理解此示例的地址。

客户端源地址: 183.38.214.214

虚拟IP(分配给负载均衡器的IP): 212.71.233.103

真实服务器1: 10.1.10.1

真实服务器2: 10.1.10.2

步骤1:用户(183.83.214.214)向分配给负载均衡器(212.71.233.103)的VIP发送对所需服务的请求。该请求如下所示。

源地址(183.83.214.214)------->目的地地址(212.71.233.103)

步骤2:负载平衡器在收到请求后,检查请求目的地和端口。如果请求与负载均衡器配置中定义的特定服务匹配,则使用选择算法从池中选择一个真实服务器(在我们的示例中,我们有两个真实服务器)。一旦选择了Real Server,负载均衡器会将连接信息和所选的Real Server记录在表中,然后修改数据包的目标地址和端口(为Real Server的地址和端口),并将数据包转发到Real Server。让我们考虑选择的Real服务器是10.1.10.1,在这种情况下,转发数据包的源和目的地将如下所示。

源地址(183.83.214.214)------->目的地地址(10.1.10.1)

在选择Real服务器后,负载平衡器记下了连接信息(在表中),来自同一连接的后续数据包将简单地用已选择的Real服务器目标地址(可从表中找到)重写。

步骤3:当负载均衡器从Real Server获取响应数据包时,它将再次将源地址和端口重写为其自己的虚拟IP和服务端口的源地址和端口。然后,它将响应发送回用户。

源地址(212.71.233.103)------->目的地地址(183.83.214.214

最终用户永远不会意识到后面的Real Server。用户始终认为实际响应是由负载均衡器的虚拟IP地址创建和传递的。

通过NAT进行LVS的主要优点是Real Server可以运行任何操作系统,并且仅使用一个IP地址。通过nat进行LVS的缺点是,负载均衡器将目标地址重新写入两次以完全满足单个请求。由于这种重写,如果请求数量很高,则负载平衡器可能会耗尽资源。如果后端真实服务器的数量更多,情况将变得更糟。

什么是LVS VIA IP隧道?

与通过NAT的LVS相比,通过IP隧道的LVS是更好的可扩展解决方案。这是由于两个主要原因。

  • 负载平衡器不会对IP数据包进行多次重写。
  • 实际响应永远不会通过负载均衡器发送。

IP隧道是将数据包发送到Real Server的技术。在上面显示的图中,在负载均衡器和所有Real Server之间建立了IP隧道。

关于通过IP隧道进行LVS的另一项重要注意事项是,每个Real Server必须具有配置了虚拟IP地址的隧道接口。Real Server可以位于同一LAN中,甚至可以位于WAN网络中。这会在Real服务器的出口路由器上引入另一种配置更改(如果Real服务器位于完全不同的网络上),并且应将其配置为接受具有虚拟IP地址的传出数据包(这是因为路由器具有以下安全措施:丢弃带有源地址的数据包,该地址不属于其接受的列表。)

下面描述了通过IP隧道使用LVS完成请求所涉及的一系列步骤。

步骤1:客户端将请求发送到分配给负载均衡器的虚拟IP地址。在这里,源地址将是客户端的地址,而目标地址将是分配给负载均衡器的VIP。

步骤2:负载均衡器检查数据包,并在数据包与定义的服务规则匹配的情况下,将数据包封装在另一个IP数据包中,然后转发到使用选择/调度算法选择的Real Server。此处,负载平衡器还将连接信息添加到表中,以便可以封装来自同一连接的后续请求并将其发送到同一Real Server。

IP隧道与VPN非常相似(无需加密)。真实服务器可以具有任何不同网络的任何IP地址。但它也应该在虚拟接口上配置负载均衡器的虚拟IP地址。这意味着所有通过IP隧道方法参与LVS的服务器都应分配VIP。这带来了ARP的另一个问题。问题是,如果客户端和LVS群集都在同一个LAN中,则Real服务器永远不要使用针对虚拟IP地址的ARP请求进行响应,否则客户端可能会错误地直接到达Real服务器,而不是通过负载均衡器。

通过在非arp接口(例如lo:0或tun0等)上的Real服务器中分配虚拟IP地址,可以解决此问题。

实际请求被封装在另一个IP数据包中,并从池中发送到Real服务器之一。

步骤3: Real Server解压缩Load Balancer发送的数据包,并从客户端读取原始数据包。然后,Real Server处理该数据包,并将响应直接发送到客户端。

由于真实服务器支持IP隧道协议,因此它将数据包解封装并读取原始数据包。在原始数据包的目标字段中找到虚拟IP (已分配给Real服务器上的非arp接口之一)后,Real服务器会认为“是。此数据包适合我..!”,然后处理它,然后将响应直接发送到客户端。

这种隧道方法的主要优点是,负载平衡器不会因重写数据包而过载。可能的缺点可能是Real Server上IP隧道支持的基本要求。

什么是LVS VIA直接路由?

尽管我们减少了使用第二种方法进行多次数据包重写的开销,但是仍然存在IP隧道管理的开销。使用LVS的另一种方法既没有隧道的开销,也没有重写的开销。

此方法称为直接路由方法。在一个方面,它与第二种方法非常相似。响应将从Real服务器直接发送给用户。

在这种方法中,虚拟IP也由负载均衡器和真实服务器分配和共享。如上一节所述,虚拟IP地址被分配给不响应ARP请求的接口(这在此方法中非常重要,因为负载均衡器和Real服务器都位于同一物理段中。)

步骤1:与往常一样,客户端将请求发送到负载均衡器上分配的虚拟IP。负载平衡器检查该请求,如果找到类似的服务配置,则它将仅将数据包转发到选定的虚拟服务器。与其他方法类似,负载均衡器也建立了非连接,因此只需查看表,即可将来自同一连接的后续数据包转发到同一Real服务器。

好吧,负载平衡器修改的唯一内容是mac地址。一旦使用选择/调度算法选择了Real Server,它将使用Real Server的mac地址简单地修改帧,并在LAN上转发帧。这是使用此方法将Load Balancer和Real服务器需要位于同一LAN网段上的主要原因。

步骤2:由于Real服务器在其非arp接口之一上配置了相同的虚拟IP地址,因此它接受数据包并进行处理。然后将响应直接发送回客户端。

这种方法的主要优点是所涉及的开销非常少。唯一的缺点是Real Servers和Load Balancer需要相同的LAN网段。

Linux虚拟服务器中不同负载平衡方案的摘要

LVS类型 通过NAT进行LVS 通过IP隧道进行LVS 通过直接路由LVS
好处
  • 支持具有任何操作系统的Real Server
  • 需要一个IP
  • 由于减少了IP数据包的重写,从而减少了开销
  • 它没有IP隧道的开销
  • 它没有包重写的开销
组态

虚拟服务器端不需要特殊配置。

  • 真实服务器还必须支持IP隧道
  • 必须在非arp接口中配置虚拟IP

虚拟IP必须在非arp接口上分配(主要是环回)

可扩展性 更少,因为重写开销

转载链接:https://www.slashroot.in/lvs-linux-virtual-server-different-methods-of-load-balancing

超详细!使用 LVS 实现负载均衡原理及安装配置详解 参考 链接:https://blog.csdn.net/Ki8Qzvka6Gz4n450m/article/details/79119665

LVS (Linux虚拟服务器)-不同的负载均衡方法的更多相关文章

  1. keepalived+LVS 实现双机热备、负载均衡、失效转移 高性能 高可用 高伸缩性 服务器集群

    本章笔者亲自动手,使用LVS技术实现实现一个可以支持庞大访问量.高可用性.高伸缩性的服务器集群 在读本章之前,可能有不少读者尚未使用该技术,或者部分读者使用Nginx实现应用层的负载均衡.这里大家都可 ...

  2. Linux虚拟服务器--LVS

    LVS 百科名片 LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡.LVS是Linux Virtual Server的缩写,意思是L ...

  3. LVS (Linux虚拟服务器)模型及算法

    LVS(Linux Virtual Server)Linux虚拟服务器 LVS集群采用IP负载均衡技术和基于内容请求分发技术. 用户请求发给负载均衡调度器,由负载均衡调度器根据设定的调度算法将请求发给 ...

  4. Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台 Seesaw

    负载均衡系统 Seesaw Seesaw是由我们网络可靠性工程师用 Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台,就像所有好的项目一样,这个项目也是为了解决实际问题而产生的. Seesa ...

  5. Linux系统(五)负载均衡LVS集群之DR模式

    序言 DR模式是lvs集群中三种负载均衡模式的其中一种,那么上一篇中我写啦关于NAT模式的搭建与原理,为什么还要有DR模式与IP隧道模式呢? 首先我们来看3张图.LVS/NAT模式如下图: LVS/I ...

  6. LVS+Keepalived搭建MyCAT高可用负载均衡集群

    LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...

  7. LVS + Keepalived 实现高可用、负载均衡 Web 集群

    简介: LVS 是 Linux Virtual Server 的简写,Linux 虚拟服务器的意思,是一个虚拟的服务器集群系统,此项目由章文嵩博士于 1998 年 5 月成立,是中国最早出现的自由软件 ...

  8. LVS集群中的IP负载均衡技术

    LVS集群中的IP负载均衡技术 章文嵩 (wensong@linux-vs.org) 转自LVS官方参考资料 2002 年 4 月 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集 ...

  9. Nginx简单介绍以及linux下使用Nginx进行负载均衡的搭建

    1.Nginx简介 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5 ...

随机推荐

  1. IDEA 底部工具栏没有 Version Control 解决办法

    百度了半天 都说VCS配置不对 但是默认IDEA是配置好的 根本不需要修改 忽然看到 工具栏的快捷键 于是 Alt + 9 就出现了 完美

  2. JAVA 基础编程练习题3 【程序 3 水仙花数】

    3 [程序 3 水仙花数] 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例 如:153 是一个"水仙 ...

  3. koa2中间件

    在我看来,前端框架的中间件的思想来源于传统后端的切面编程(AOP)思想,比如我们常见的身份校验(JWT). axios的拦截器也是基于这种程序设计模式的. 在koa中,实际上是由一个数组对象来保存所有 ...

  4. DOTS概述

    Unity数据导向技术栈有三个主要部分:Unity实体 - 组件 - 系统(ECS),Unity C#作业系统和Unity Burst编译器. 实体 - 组件 - 系统概述 ECS提供了一种游戏设计方 ...

  5. Microsoft Hackathon 2019 留念

    参加今年微软的 Hackathon 是 2019 年 7 月份的事情,但是后来各种各样的事情,考托.考G.网申……就给耽搁了.我本来以为自己的记忆力足够好,几个月以后也能写很多东西,然鹅……现在发现好 ...

  6. Django-DRF(路由与扩展功能)

    一. 视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update( ...

  7. 李宏毅 Tensorflow解决Fizz Buzz问题

    提出问题 一个网友的博客,记录他在一次面试时,碰到面试官要求他在白板上用TensorFlow写一个简单的网络实现异或(XOR)功能.这个本身并不难,单层感知器不能解决异或问题是学习神经网络中的一个常识 ...

  8. 【并行计算-CUDA开发】CUDA shared memory bank 冲突

    CUDA SHARED MEMORY shared memory在之前的博文有些介绍,这部分会专门讲解其内容.在global Memory部分,数据对齐和连续是很重要的话题,当使用L1的时候,对齐问题 ...

  9. vue-cli@webpack@4打包分析命令

    一.命令 npm run build --report 该命令在打包完之后,可以分析包的大小(如下图),从而分析那一块打包太大了可以进行优化处理.

  10. Flash中的SLC/MLC/MLC--基础

    参考 1.http://www.upantool.com/jiaocheng/qita/2012/slc_mlc_tlc.html 2.http://www.2ic.cn/html/10/t-4324 ...