一、LVS相关实验介绍

IP 负载均衡技术是在负载调度器的实现技术中效率最高的,LVS 的 IP 负载技术被广泛地应用各种不同的大型企业集群中,带来稳定、可靠的服务。

实验涉及的知识点

  • 负载均衡解决方法
  • VS/NAT 实现虚拟服务器
  • VS/DR 实现虚拟服务器
  • VS/TUN 实现虚拟服务器

二、负载均衡的解决方法

在以软件实现的负载均衡的方式有:

  • 基于应用层负载均衡
  • 基于 IP 层负载均衡

其中基于应用层负载均衡:多台服务器通过高速的互联网络连接成一个集群系统,在前端有一个基于应用层的负载调度器。当用户访问请求到达调度器时,请求会提交给做负载均衡调度的应用程序,分析请求,根据各个服务器的负载情况,选出一台服务器,重写请求并向选出的服务器访问,取得结果后,再返回给用户。

典型的代表有 Nginx 以及 Apache 的 Rewrite 模块。

应用层的负载均衡实现这样强大的功能也会付出一定的代价:

  • 系统处理开销较大,致使系统的伸缩性有限。
  • 基于应用层的负载均衡调度器对于不同的应用,需要写不同的调度器。

而基于 IP 层负载均衡:用户通过虚拟 IP 地址(Virtual IP Address)访问服务时,访问请求的报文会到达负载调度器,由它进行负载均衡调度,从一组真实服务器选出一个,将报文处理并转发给选定服务器的地址。实服务器的回应报文经过负载调度器时,将报文的源地址和源端口改为 Virtual IP Address 和相应的端口,再把报文发给用户。

而 IP 的负载技术有以下三种模式:

  • 通过 NAT 实现虚拟服务器(VS/NAT)
  • 通过 IP 隧道实现虚拟服务器(VS/TUN)
  • 通过直接路由实现虚拟服务器(VS/DR)

并且在调度器上配置了 8 种调度算法:

  • 轮叫(Round Robin):调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

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

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

  • 加权最少链接(Weighted Least Connections):在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

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

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

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

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

三、LVS/NAT实现虚拟服务器

由于 IPv4 中 IP 地址空间的日益紧张和安全方面的原因,很多网络使用保留 IP地址(10.0.0.0/255.0.0.0、 172.16.0.0/255.128.0.0 和 192.168.0.0/255.255.0.0)。这些地址不在 Internet 上使用,而是专门为内部网络预留的。

当内部网络中的主机要访问 Internet 或被 Internet 访问时,就需要采用网络地址转换(Network Address Translation, 以下简称 NAT),将内部地址转化为 Internet 上可用的外部地址。

NAT 的工作原理是报文头(目标地址、源地址和端口等)被正确改写后,客户相信 它们连接一个 IP 地址,而不同 IP 地址的服务器组也认为它们是与客户直接相连的。由此,可以用 NAT 方法将不同 IP 地址的并行网络服务变成在一个 IP地址上的一个虚拟服务。

VS/NAT(Virtual Server via Network Address Translation)实现的虚拟服务器是这样的一个结构,主要经过这样的一些步骤:

  1. 客户端通过 Internet 向服务器发起请求,而请求的 IP 地址指向的是调度器上对外公布的 IP 地址;(因为它并不是真正处理请求的服务器 IP 地址,所以称之为 虚拟 IP 地址,简称为 VIP,Virtual IP Address)
  2. 请求报文到达调度器(Load Balancer),调度器根据调度算法从一组真实的服务器(因为他们是真正处理用户请求的服务器,所以称为真实服务器,Real server。其 IP 地址也被称为真实 IP,简称为 RIP)中选出一台当前负载不高的服务器。然后将客户端的请求报文中的目标地址(Load Balancer 的 VIP)和端口通过 iptables 的 NAT 改写为选定服务器的 IP 地址和服务的端口。最后将修改后的报文发送给选出的服务器。同时,调度器在连接Hash 表中记录这个连接;当这个连接的下一个报文到达时,从连接 Hash 表中可以得到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务器。
  3. Real Server 接收到报文之后,作出了相应的处理,然后将响应的报文发送给 Load Balancer
  4. Load Balancer 接收到响应的报文时,将报文的源地址和源端口改为 Virtual IP Address和相应的端口,再把报文发给用户。

这样,客户所看到的只是在 Virtual IP Address 上提供的服务,而服务器集群的结构对用户是透明的。

下面,举个例子来进一步说明 VS/NAT,如图所示:

VS/NAT 的配置如下表所示,所有到 IP 地址为 205.100.106.2 和端口为 80 的流量都被负载均衡地调度的真实服务器172.16.1.3:80和 172.16.1.4:8080上。目标地址为 205.100.106.2:21 的报文被转移到172.16.1.3:21上。而到其他端口的报文将被拒绝。

|Protocol | Virtual IP Address |Port |Real IP Address |Port| |--------|--------| |TCP |205.100.106.2| 80 |172.16.1.3 | 80| ||||172.16.1.4| 8080| |TCP |205.100.106.2| 21 |172.16.1.3 | 21|

当客户端访问 Web 服务的时候,报文中可能有以下的源地址和目标地址:

SOURCE DEST
203.100.106.1:3456 205.100.106.2:80

报文到达调度器之后,调度器从调度列表中选出一台服务器,例如是172.16.1.4:8080。该报文会被改写为如下地址,并将它发送给选出的服务器。

SOURCE DEST
203.100.106.1:3456 172.16.1.4:8080

Real Server 收到修改后的报文之后,做出响应,然后将响应报文返回到调度器,报文如下:

SOURCE DEST
172.16.1.4:8080 203.100.106.1:3456

响应报文的源地址会被 Load Balacer 改写为虚拟服务的地址,再将报文发送给客户:

SOURCE DEST
205.100.106.2:80 203.100.106.1:3456

这样,客户认为是从202.103.106.5:80服务得到正确的响应,而不会知道该请求是 Real Server1 还是 Real Server2 处理的。

这便是 VS/NAT 的处理数据包的整个过程,它有这样的一些特点:

  • 集群节点,也就是 Real Server 与 Load Balacer 必须在同一个 IP 网络中
  • Load Balancer 位于 Real Server 与客户端之间,处理进出的所有通信
  • RIP 通常是私有地址,仅用于各个集群节点之间的通信。
  • Real Server 的网关必须指向 Load Balancer
  • 支持端口映射:也就是Real Server 的端口可以自己设定,没有必须是与 Load Balancer 一样

VS/NAT 的优势在于可以做到端口映射,但是 Load Balancer 将可能成为集群的瓶颈。因为所有的出入报文都需要 Load Balancer 处理,请求报文较小不是问题,但是响应报文往往较大,都需要 NAT 转换的话,大流量的时候, Load Balancer 将会处理不过来。一般使用 VS/NAT 的话,处理 Real Server 数量达到 10~20 台左右将是极限,并且效率往往不高。

四、LVS/DR实现虚拟服务器

VS/NAT 的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的新瓶颈。大多数 Internet 服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。

既然同时处理进出报文会大大地影响效率,增加机器的负载,那么若是仅仅处理进来的报文,即在负载调度器中只负责调度请求,而出去的报文由 Real Server 直接发给客户端这样岂不是高效许多。

VS/DR(Virtual Server via Direct Routing)利用大多数 Internet 服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群 系统的吞吐量。

VS/DR 实现的虚拟服务器是这样的一个结构,主要经过这样的一些步骤:

  1. 客户端通过 Internet 向服务器发起请求,而请求的 IP 地址指向的是调度器上对外公布的 IP 地址;
  2. 请求报文到达调度器(Load Balancer),调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装 IP 报文,而是将数据帧的 MAC 地址改为选出服务器的 MAC 地址,再将修改后 的数据帧在与服务器组的局域网上发送。因为数据帧的 MAC 地址是选出的服务器,所以服务器肯定可以收到这个数据帧;
  3. Real Server 接收到报文之后,发现报文的目标地址 VIP 是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。

在 VS/DR中,根据缺省的 TCP/IP 协议栈处理,请求报文的目标地址为 VIP,响应报文的源地址肯定也为VIP,所以响应报文不需要做任何修改,可以直接返回给客户,客户认为得到正常的服务,而不会知道是哪一台服务器处理的。

这便是 VS/DR 的处理数据包的整个过程,它有这样的一些特点:

  • 集群节点,也就是 Real Server 与 Load Balacer 必须在同一个物理网络中(若是不同网段的话结构将变得复杂)
  • RIP 通常是私有地址,也可以是公网地址,以便于远程管理与监控。
  • Load Balancer 仅仅负责处理入站的请求,Real Server 将直接响应客户端
  • Real Server 的网关不能指向 Load Balancer
  • 不支持端口映射:也就是 Real Server 的端口必须是与 Load Balancer 对外服务的一样

五、LVS/TUN 实现虚拟服务器

VS/DR 限制 Real Server 与 Load Balancer 必须在同一个物理网络中,那若是分散在各地岂不是无法使用?所以有了 VS/TUN(Virtual Server via IP Tunneling)的诞生。

IP 隧道(IP tunneling)是将一个 IP 报文封装在另一个 IP 报文的技术,这可以使得目标为一个 IP 地址的数据报文能被封装和转发到另一个 IP 地址。IP隧道技术亦称为 IP 封装技术(IP encapsulation)。IP 隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的 IP 地址。

我们利用 IP 隧道技术将请求报文封装转发给后端服务器,响应报文能从后端服务器直接返回给客户。但在这里,后端服务器有一组而非一个,所以我们不可能静态地建立一一对应的隧道,而是动态地选择一台服务器,将请求报文封装和转发给选出的服务器。这样,我们可以利用 IP 隧道的原理将一组服务器上的网络服务组成在一个 IP 地址上的虚拟网络服务。 VS/TUN 的体系结构如图所示,各个服务器将 VIP 地址配置在自己的 IP 隧道设备上。

它的连接调度和管理与 VS/NAT 中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器, 将请求报文封装在另一个 IP 报文中,再将封装后的 IP 报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为 VIP的报文,服务器发现VIP地址被配置在本地的 IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。

这便是 VS/TUN 的处理数据包的整个过程,它有这样的一些特点:

  • 集群节点,也就是 Real Server 与 Load Balacer 可以跨越公网
  • RIP 必须是公网地址。
  • Load Balancer 仅仅负责处理入站的请求,Real Server 将直接响应客户端
  • Real Server 的网关不能指向 Load Balancer
  • 不支持端口映射:也就是 Real Server 的端口必须是与 Load Balancer 对外服务的一样

这便是 LVS 所提供的 IP 负载均衡的三种技术,我们可以根据自己的情况做出不同的选择。

转载于:https://www.cnblogs.com/wzylhj/p/10332609.html

LVS虚拟服务器的实现方式相关推荐

  1. LVS 集群架构介绍 (linux 虚拟服务器)

    目录 一.集群介绍 1.集群的含义 2.为什么需要使用群集 3.集群类型 1.负载均衡群集(Load Balance Cluster)----简称:LB 2.高可用群集(High Availabili ...

  2. ipvs -r02–restore02恢复虚拟服务器规则,ipvs 介绍

    ipvs ipvsadm/ipvs ipvs grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64 支持的协议:TCP, ...

  3. LVS(Linux Virtual Server,Linux虚拟服务器)开源软件创始人——章文嵩

    章文嵩是技术专家,也是LVS(Linux Virtual Server,Linux虚拟服务器)开源软件创始人,曾经是TelTel公司的首席科学家,ChinaCluster的共同创办人.他对自己的看法是 ...

  4. 基于redhat linux虚拟服务器的web负载均衡集群(piranha+LVS)

    基于redhat linux虚拟服务器的web负载均衡集群 硬件环境 分发机 LB1:192.168.0.129 LB2:192.168.0.130 真实节点主机 NODE1:192.168.0.13 ...

  5. linux虚拟实验服务,Linux虚拟服务器(LVS)实验文档PDF

    这个Linux虚拟服务器(LVS)实验文档时我看过最好的实验文档,里面介绍了LVS/nat LVS/DR LVS/TUN以及综合实验,讲解了常用的算法和调度. 由于 ARP 的对应关系,是通过广播学到 ...

  6. 路由器中虚拟服务器设置,路由器中虚拟服务器设置方法

    路由器中虚拟服务器设置方法 内容精选 换一换 购买独享带宽或是共享带宽时都需要选择带宽大小,该值为出云带宽的最大上限.如果出现依赖于公网的web应用程序出现卡顿等情况,请先排查该弹性云服务器绑定的EI ...

  7. 华为4g无线路由器虚拟服务器设置方法,华为4g2pro路由器虚拟服务器设置

    华为4g2pro路由器虚拟服务器设置 内容精选 换一换 当前在部分区域中,路由表已从虚拟私有云中解耦,解耦后路由表拥有独立入口,支持路由表与子网关联功能,请以实际界面为准.未解耦:在虚拟私有云详情页的 ...

  8. lvs web服务器不响应,lvs web服务器不响应

    lvs web服务器不响应 内容精选 换一换 REST API是访问Web服务器的一套API,REST API接口的执行方式是通过HTTP请求进行的,接收GET.PUT.POST.DELETE等请求并 ...

  9. IP虚拟服务器软件IPVS,ipvs介绍_ipvs配置安装部署-华为云

    简介 ipvs称之为IP虚拟服务器(IP Virtual Server,简写为IPVS).是运行在LVS下的提供负载平衡功能的一种技术. 支持的ARM体系结构 可支持ARMv8体系结构:华为鲲鹏兼容A ...

  10. LVS Linux服务器集群系统

    Linux服务器集群系统(一) LVS项目介绍 章文嵩 (wensong@linux-vs.org) 2002 年 3 月 本文介绍了Linux服务器集群系统--LVS(Linux Virtual S ...

最新文章

  1. 如何访问webService接口
  2. 使用Javascript创建XML文件
  3. linux 增加 ip_conntrack_max 造成 内核内存问题
  4. 初步了解Telerik for WPF 控件
  5. Java Integer类toString()方法与示例
  6. 首次公开!华为最前沿的X Labs实验室都在研究什么?5G+CV
  7. python在城市规划中的运用_温州市城市规划展示厅
  8. [论文阅读] Suggestive Annotation: A Deep Active Learning Framework for Biomedical Image Segmentation
  9. 恢复 管理员密码 新建管理员账号
  10. fio性能测试工具新添图形前端gfio
  11. Linux 镜像文件
  12. 在线检查错别字校对软件 | 推荐
  13. 后台管理软件测试用例,如何进行测试用例管理?
  14. Xshell脚本学习
  15. 开发人员该选择什么大数据工具提高工作效率?
  16. 阿里10年:一个普通技术人的成长之路
  17. 大数据时代之java操作hdsf
  18. 为什么手机信号满格,但网速却还是那么慢?这4点原因是关键
  19. mysql 3358端口_好用的MySQL抓包工具:sniffer-agent
  20. onu光功率多少是正常_光猫的收发光功率正常范围是多少

热门文章

  1. 什么是开源(Open Source)?
  2. 精选| 2019年2月R新包推荐
  3. 用R语言实现数据离散化
  4. R|数据处理|merge数据详解
  5. c#类 对象 构造函数 析构函数——面向对象
  6. 图的最短路径-----------Dijkstra算法详解(TjuOj2870_The Kth City)
  7. 冲刺第二阶段工作总结01
  8. C语言中指针数组和数组指针
  9. Node.js入门初体验
  10. SharePoint 2010的Form认证的用户注册功能