【深入浅出Linux】LVS集群的通用结构

一、LVS简介

了解LVS之前我们先来了解一下几种需求:

  • 可伸缩性(Scalability),当服务的负载增长时,系统能被扩展来满足需求,且不降低服务质量。
  • 高可用性(Availability),尽管部分硬件和软件会发生故障,整个系统的服务必须是每天24小时每星期7天可用的。
  • 可管理性(Manageability),整个系统可能在物理上很大,但应该容易管理。
  • 价格有效性(Cost-effectiveness),整个系统实现是经济的、易支付的。

上述的几种需求是xian现在网络服务的软硬件系统的重要需求。

针对上述需求,一个基于IP层和基于请求内容分发的负载均衡调度解决方案应运而生,这种解决方法在Linux内核中实现,主要实现方式是将一组服务器构成一个实现可伸缩性。高可用性的服务器集群,我们称之为Linux虚拟服务器(Linux Virtual Server),在LVS集群中,服务器集群对应于客户端来说是透明的,客户端访问我们的LVS集群,就像是访问一台高性能,高可用计算机一样。
系统的可伸缩性是通过在服务器集群中添加或者删除节点来实现。

二.LVS集群的通用结构

LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。

【深入浅出Linux】LVS集群的通用结构_第1张图片
LVS体系结构.jpg

为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。LVS集群的体系结构如图所示,它有三个主要组成部分:

  • 负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址上的。它可以是用IP负载均衡技术的负载调度器,也可以是基于内容请求分发的负载调度器,还可以是两者的结合。
  • 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
  • 后端存储(backend storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

调度器采用IP负载均衡技术、基于内容请求分发技术或者两者相结合。在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客户请求 到达时,调度器只根据负载情况从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度;当这个请求的其他报文到达,也会被转发到前面选 出的服务器。在基于内容请求分发技术中,服务器可以提供不同的服务,当客户请求到达时,调度器可根据请求的内容和服务器的情况选择服务器执行请求。因为所 有的操作都是在操作系统核心空间中将完成的,它的调度开销很小,所以它具有很高的吞吐率。

服务器池的结点数目是可变的。当整个系统收到的负载超过目前所有结点的处理能力时,可以在服务器池中增加服务器来满足不断增长的请求负载。对大多数网络服务来说,结点与结点间不存在很强的相关性,所以整个系统的性能可以随着服务器池的结点数目增加而线性增长。

后端存储通常用容错的分布式文件系统,如AFS、GFS、Coda和Intermezzo等。分布式文件系统为各服务器提供共享的存储区,它们访问 分布式文件系统就像访问本地文件系统一样。同时,分布式文件系统提供良好的伸缩性和可用性。然而,当不同服务器上的应用程序同时访问分布式文件系统上同一 资源时,应用程序的访问冲突需要消解才能使得资源处于一致状态。这需要一个分布式锁管理器(Distributed Lock Manager),它可能是分布式文件系统内部提供的,也可能是外部的。开发者在写应用程序时,可以使用分布式锁管理器来保证应用程序在不同结点上并发访 问的一致性。

三、LVS集群的几种工作模式

1.NAT
客户通过Virtual IP Address(虚拟服务的IP地址)访问网络服务时,请求报文到达调度器,调度器根据连接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址 Virtual IP Address改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器。

同时,调度器在连接Hash 表中记录这个连接,当这个连接的下一个报文到达时,从连接Hash表中可以得到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务器。当来自真实服务器的响应报文经过调度器时,调度器将报文的源地址和源端口改为Virtual IP Address和相应的端口,再把报文发给用户。

2.TUN
在VS/NAT的集群系统中,请求和响应的数据都是需要经过负载均衡器的,当真实服务器的数量在20台以上,负载均衡器将成为整个系统的瓶颈,因为大多数的Internet服务都有一个特点,就是请求报文发来的数据都很少,而响应的报文往往包含大量的数据,因而对于我们的服务器来说,响应回去的报文数据如果走的是负载均衡器,那么这么多RIP使用一根网线来返回数据,而负载均衡服务器的带宽是有限的,这就是系统的瓶颈。

VS/TUN的对上述瓶颈的解决方案主要是它的报文的转发方法不同,调度器根据各个服务器的负载情况, 动态地选择一台服务器,将请求报文封装到,另一个IP报文中,再将封装后后的新IP报文转发给所选择的服务器,服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所有就处理这个请求,然后根据路由表将相应报文直接返还给用户。

在这里,请求报文的目标地址为VIP,响应报文的源地址也为VIP,所以响应报文不需要作任何修改,可以直接返回给客户。

3.DR
DR模式的连接调度和管理与VS/NAT和VS/TUN中的一样,它的报文转发方法又有不同,将报文直接路由给目标服务器,在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是直接将数据帧的MAC地址修改为选出服务器的MAC地址,再将修改后的数据帧在服务器组的局域网上发送。

因为数据帧的MAC地址是选出服务器的MAC地址,所以服务器肯定能够接受到这个数据帧,从中可以获得该IP报文,当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器会处理这个报文,然后根据路由表将相应报文直接返还给用户。

你可能感兴趣的:(【深入浅出Linux】LVS集群的通用结构)