LVS (Linux虚拟服务器)-不同的负载均衡方法

随着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 |
| 好处 |
|
|
|
| 组态 |
虚拟服务器端不需要特殊配置。 |
|
虚拟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虚拟服务器)-不同的负载均衡方法的更多相关文章
- keepalived+LVS 实现双机热备、负载均衡、失效转移 高性能 高可用 高伸缩性 服务器集群
本章笔者亲自动手,使用LVS技术实现实现一个可以支持庞大访问量.高可用性.高伸缩性的服务器集群 在读本章之前,可能有不少读者尚未使用该技术,或者部分读者使用Nginx实现应用层的负载均衡.这里大家都可 ...
- Linux虚拟服务器--LVS
LVS 百科名片 LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡.LVS是Linux Virtual Server的缩写,意思是L ...
- LVS (Linux虚拟服务器)模型及算法
LVS(Linux Virtual Server)Linux虚拟服务器 LVS集群采用IP负载均衡技术和基于内容请求分发技术. 用户请求发给负载均衡调度器,由负载均衡调度器根据设定的调度算法将请求发给 ...
- Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台 Seesaw
负载均衡系统 Seesaw Seesaw是由我们网络可靠性工程师用 Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台,就像所有好的项目一样,这个项目也是为了解决实际问题而产生的. Seesa ...
- Linux系统(五)负载均衡LVS集群之DR模式
序言 DR模式是lvs集群中三种负载均衡模式的其中一种,那么上一篇中我写啦关于NAT模式的搭建与原理,为什么还要有DR模式与IP隧道模式呢? 首先我们来看3张图.LVS/NAT模式如下图: LVS/I ...
- LVS+Keepalived搭建MyCAT高可用负载均衡集群
LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...
- LVS + Keepalived 实现高可用、负载均衡 Web 集群
简介: LVS 是 Linux Virtual Server 的简写,Linux 虚拟服务器的意思,是一个虚拟的服务器集群系统,此项目由章文嵩博士于 1998 年 5 月成立,是中国最早出现的自由软件 ...
- LVS集群中的IP负载均衡技术
LVS集群中的IP负载均衡技术 章文嵩 (wensong@linux-vs.org) 转自LVS官方参考资料 2002 年 4 月 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集 ...
- Nginx简单介绍以及linux下使用Nginx进行负载均衡的搭建
1.Nginx简介 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5 ...
随机推荐
- harber私有镜像仓库(4)
一.部署准备: 准备harbor软件包 在部署节点上: #mv harbor-offline-installer-v1.4.0.tgz /opt/ && cd /opt #tar zx ...
- Linux上MongoDB一些设置
MongoDB启动停止方法 官网安装介绍中依然有启动停止的方式 1 启动 sudo service mongod start 2 停止 sudo service mongod stop 3 重启 su ...
- Spring Cloud(1):概览
什么是微服务? 小型的,简单的和解耦的服务 = 可伸缩的,有弹性的和灵活的应用程序. 什么是云? 基础设施即服务(Infrastructure as a Service, Iaas):云提供商只提供基 ...
- 【转】java获取当前年、月、日 、小时 、分钟、 秒、 毫秒
public class Test { /** * 英文简写(默认)如:2010-12-01 */ public static String FORMAT_SHORT = "yyyy-MM- ...
- What's binary search?
Binary Search: Search a sorted array by repeatedly dividing the search interval in half. Begin with ...
- STS中MyBatis的基本实现
本文采用的是<深浅spring boot 2.x>中第5章的例子,用一个接口实现对一个表项的读取. 数据库:mysql下建立user数据库,表名为t_usr 1. 数据源设置 在appli ...
- 【HTML】常用的标签学习(2)
现在的使用的html语言都是h5,但是h5也是从h4继承发展来的,所以h4的标签我们也要学习,然后加上h5新增的标签,那么html这门语言才算学习完毕.上次学习了h4的一些常用标签,今天学习h4剩下的 ...
- Java学习笔记-网络编程
Java提供了网络编程,并且在实际中有着大量运用 网络编程 网络编程概述 网络模型 OSI参考模型 TCP/IP参考模型 网络通讯要素 IP地址 端口号 传输协议 网络参考模型 网络通讯要素 IP地址 ...
- shell sed 替代1
sed -e '/-DLUA_USE_LINUX/s/-lreadline/-lreadline -lncurses/g' Makefile > tmp mv tmp Makefile 全局换- ...
- [bzoj3887][Usaco2015 Jan]Grass Cownoisseur_trajan_拓扑排序_拓扑序dp
[Usaco2015 Jan]Grass Cownoisseur 题目大意:给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过?(一个点在 ...