LVS负载均衡群集(三种工作模式原理详解)
一、前言
? 在互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器力不从心。所以我们需要通过一些方法来解决这样的瓶颈。
? 最简单的方法就是使用价格昂贵的大、小型的主机;但这样在大多数企业中显然是不可取或者说不现实的。那么我们就需要通过多个普通服务器构建服务器群集。
二、相关概念概述
2.1何为LVS?
? LVS——Linux Virtual Server,即Linux虚拟服务器(虚拟主机、共享主机),虚拟主机在这里就不再赘述了,相信大家都明白。
? 而LVS是一个虚拟的服务器集群系统,其实现的是一个高性能、高可用的服务器。目前LVS已经被集成到Linux内核模块中。
2.2LVS的构成
①从物理层面上讲,LVS的主要组成:
- 负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
- 服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。
- 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务
如下图所示:
补充:一般为了实现高可用会使用两台以上的调度服务器,作为备份,提高安全性。(后面的实验部署DR模式+keepalive会使用两台负载调度服务器)
②从软件层面上讲,LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。
1.ipvs(ip virtual server):工作在内核空间的一段代码,叫ipvs,是真正生效实现调度的代码。
2.ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server),然后由内核代码实现真正的调度算法及功能。
2.3何为群集?
? 群集,或者说集群,英文是cluster,由多台主机构成,但是对外只表现为一个整体(同一服务),客户端是无法察觉到究竟有多少台服务器,并且对自己访问的是哪一台真实服务器一无所知。
? 根据针对目标差异,可将群集分为负载均衡群集、高可用群集(HA)、高性能运算群集三类。下文会逐一介绍。
2.4如何理解负载均衡?
? 负载均衡——load balance,顾名思义,就服务器方面而言,可以理解为多个服务器上所承载的“压力”相对平衡,这里的“压力”指的是服务器上所需要响应的各种资源请求或者服务,并且是相对平衡的,毕竟服务器的性能等诸多方面都未必一致。
? 简单举个例子来说明一下负载均衡的含义,如果说你需要打一桶水,你可以选择用一只手拎着,但是可能会比较累,如果你用双手拎着两个桶来装与之等量且平均分配的水,就比较轻松了。
? 其实负载均衡本质上就是这样的原理,将任务相对平均分配给多个服务器处理,这样既可以减轻一台服务器的压力,也能提高响应与处理的速度。
2.5群集的类型
2.5.1负载均衡群集
? 负载均衡+群集,可以提高应用系统的响应能力、处理更多访问请求、减少延迟,从而获得高并发、高负载的整体性能。
? 当然,负载均衡的处理并不是简单的平均分配,而是依赖于实际情况下的调度分流算法。而算法就涉及开发人员的思想和生产环境的实际情况了。
2.5.2高可用群集
? 提高应用系统的可靠性、减少主断时间,确保服务的连续性,达到高可用的容错效果。
? HA(high availability)的工作方式包括双工和主从两种模式。这就涉及到“去中心化”和“中心化”思想,而上一篇文章所介绍的MHA就是典型的master高可用群集的架构模式,只不过我们使用的是MySQL数据库,从而搭成该高可用的架构。
2.5.3高性能运算群集
? 高性能运算群集——High Performance Computer Cluster,提高应用系统的CPU运算速度、扩展硬件资源和分析能力,获得相当于大型、超级计算机的高性能运算能力。
? 高性能运算群集的高性能依赖于“分布式运算”、“并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型计算机具备的计算能力。
?
负载均衡群集是目前企业用的最多的群集类型,群集的负载调度技术有三种工作模式:地址转换——NAT、IP隧道——ip Tunnel、直接路由——Directing Route。
?
下面我们来逐一介绍一下这三种模式。
三、负载均衡群集工作模式
3.1NAT模式
地址转换——Network Address Translation。我们结合下图分析该模式:
? 根据上图结构我们暂时不考虑共享存储,(下篇文章会将该模式的架构流程以及配置过程详细给出,使用NFS作为共享存储)
? 我们首先来看实线部分,也就是client端请求服务的部分。
? 1.客户端进行请求服务器,对于客户而言,直接访问的目标IP地址不可能是下面的三台或多台真实服务器(Real Server),而是LVS负载调度服务器(当然,该服务器也可以是一个真实服务器(相当于身兼数职),看自己的想法和需求)。一般而言我们在负载调度器上是将其充当为一个网关的功能,所以它有(至少有)两个网卡,并且网段不同。在这台服务器上我们需要进行NAT地址转换,一般是通过ip地址映射的方法,来实现数据请求和数据响应的功能。当然这需要我们理解NAT的原理和设置方法。
? 2.请求到达负载调度服务器,进行相关处理将数据按照设置的调度算法进行任务分配;
? 3.响应该调度算法的真实服务器将开始执行自己的任务并且返回相关数据,而所有的真实服务器的网关都指向负载调度器,依据NAT原理进行ip地址映射,将数据从外网口发送给客户端。
整个过程中客户端对真实服务器的内部结构是不清楚的,事实上也无需了解。
该模式的最为典型的特点就是:
数据的请求和数据的返回都需要经过负载调度服务器(load balancer/Director)
那么这在高负载的应用场景中,该模式中的负载调度服务器就成为服务性能的瓶颈。出现这样的情况则必然有对应解决的方法。下面我们将介绍其他两种模式——TUN模式和DR模式。
3.2TUN模式
? 该模式为IP Tunnel模式,简称TUN模式,采用开放式的网络结构。负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器。
? 服务器节点分散在互联网中的不同位置,具有独立的公网ip地址,通过专用IP隧道与负载调度器相互通信。
? 如下图所示:
? IP隧道原理的核心思想就是:基于将一个IP报文封装在另一个IP报文的技术,从而使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。
? 因而,IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。
? 调度器根据服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为 VIP 的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。
该模式的典型特点:
除了负载调度服务器是公网IP地址,后端服务器和其网关也都是公网IP地址
? 而这样造成的结果就是,不论从安全性方面考虑,还是从购买地址和管理的成本方面考虑,这种模式都是非常不可取的。所以,DR模式就应运而生了。
3.3DR模式
? DR模式,直接路由模式。采用半开放式的网络结构,与TUN不同点在于各节点服务器不是分散在各地,而是与调度器位于同一个物理网络。这同样也减轻了服务器的负担。
如下图所示:
? 该模式的优点在于:不仅解决了TUN模式存在的问题,而且由于负载调度器与各个节点服务器通过本地网络连接,因此无需建立专用的IP隧道。
? 那么,我们可能产生一个问题:既然负载调度器和节点服务器在同一个物理网络中,我们可以认为是一个局域网,那么这不是会导致广播风暴吗?
? 解答:这个问题非常好,其实在我们进行真正的配置过程中,对于DR模式,是需要关闭ARP功能的。如何关闭我们会在之后的文章中通过实际案例配置具体介绍和解释。
四、LVS负载均衡群集总结
? 本文主要对LVS负载均衡群集的三种工作模式进行原理上的讲解,包括了一些可能对于初学者而言无法理解的名词,如:群集;负载均衡等。我们只有理解了前辈们研发出来的方法从而实现相关功能的原理,我们在实际操作的时候才能融会贯通,加深理解。
? 之后会对上述的NAT模式和DR模式进行实际的案例模拟配置。谢谢阅读!