上一章节讲述了可伸缩网络服务的几种结构,它们都须要一个前端调度器。在调度器的实现技术中,IP负载均衡技术是效率最高的。在已有的IP负载均衡技术中有经过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,咱们称之为VS/NAT技术(Virtual Server via Network Address Translation),大多数商品化的IP负载均衡调度器产品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和Alteon的ACEDirector。在分析VS/NAT的缺点和网络服务的非对称性的基础上,咱们提出经过IP隧道实现虚拟服务器的方法VS/TUN(Virtual Server via IP Tunneling),和经过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们能够极大地提升系统的伸缩性。后端
本章节将描述三种IP负载均衡技术VS/NAT、VS/TUN和VS/DR的工做原理,以及它们的优缺点。在如下描述中,咱们称客户的socket和服务器的socket之间的数据通信为链接,不管它们是使用TCP仍是UDP协议。浏览器
可伸缩网络服务的定义
可伸缩性(Scalability)是在当今计算机技术中常常用到的词汇。对于不一样的人,可伸缩性有不一样的含义。 如今,咱们来定义可伸缩网络服务的含义。安全
可伸缩网络服务是指网络服务能随着用户数目的增加而扩展其性能,如在系统中增长服务器、内存或硬盘等;整个系统很容易被扩展,无需从新设置整个系统,无需中断服务。换句话说,系统管理员扩展系统的操做对最终用户是透明的,他们不会知道系统的改变。服务器
可伸缩系统一般是高可用的系统。在部分硬件(如硬盘、服务器、子网络)和部分软件(如操做系统、服务进程)的失效状况下,系统能够继续提供服务,最终用户不会感知到整个服务的中断,除了正在失效点上处理请求的部分用户可能会收到服务处理失败,须要从新提交请求。Caching和复制是创建高可用系统的经常使用技术,创建多个副本会致使如何将原件的修改传播到多个副本上的问题。网络
实现可伸缩网络服务的方法通常是经过一对多的映射机制,将服务请求流分而治之(Divide and Conquer)到多个结点上处理。一对多的映射能够在不少层次上存在,如主机名上的DNS系统、网络层的TCP/IP、文件系统等。虚拟(Virtual)是描述一对多映射机制的词汇,将多个实体组成一个逻辑上的、虚拟的总体。例如,虚存(Virtual Memory)是现代操做系统中最典型的一对多映射机制,虚存创建一个虚拟内存空间,将它映射到多个物理内存上。并发
- 可伸缩性(Scalability),当服务的负载增加时,系统能被扩展来知足需求,且不下降服务质量。
- 高可用性(Availability),尽管部分硬件和软件会发生故障,整个系统的服务必须是天天24小时每星期7天可用的。
- 可管理性(Manageability),整个系统可能在物理上很大,但应该容易管理。
- 价格有效性(Cost-effectiveness),整个系统实现是经济的、易支付的。
单服务器显然不能处理不断增加的负载。这种服务器升级方法有下列不足:一是升级过程繁琐,机器切换会使服务暂时中断,并形成原有计算资源的浪费;二是越往高端的服务器,所花费的代价越大;三是一旦该服务器或应用软件失效,会致使整个服务的中断。负载均衡
经过高性能网络或局域网互联的服务器集群正成为实现高可伸缩的、高可用网络服务的有效结构。这种松耦合结构比紧耦合的多处理器系统具备更好的伸缩性和性能价格比,组成集群的PC服务器或RISC服务器和标准网络设备由于大规模生产,价格低,具备很高的性能价格比。可是,这里有不少挑战性的工做,如何在集群系统实现并行网络服务,它对外是透明的,它具备良好的可伸缩性和可用性。
针对上述需求,咱们给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的服务器集群,咱们称之为Linux虚拟服务器(Linux Virtual Server)。在LVS集群中,使得服务器集群的结构对客户是透明的,客户访问集群提供的网络服务就像访问一台高性能、高可用的服务器同样。客户程序不受服务器集群的影响不需做任何修改。系统的伸缩性经过在服务机群中透明地加入和删除一个节点来达到,经过检测节点或服务进程故障和正确地重置系统达到高可用性。
http://zh.linuxvirtualserver.org/node/12
LVS集群的通用结构
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具备很好的吞吐率,将请求均衡地转移到不一样的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。
为此,在设计时须要考虑系统的透明性、可伸缩性、高可用性和易管理性。LVS集群的体系结构如图2.1所示,它有三个主要组成部分:
- 负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址上的。它能够是用IP负载均衡技术的负载调度器,也能够是基于内容请求分发的负载调度器,还能够是二者的结合。
- 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
- 后端存储(backend storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
调度器采用IP负载均衡技术、基于内容请求分发技术或者二者相结合。在IP负载均衡技术中,须要服务器池拥有相同的内容提供相同的服务。当客户请求到达时,调度器只根据负载状况从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度;当这个请求的其余报文到达,也会被转发到前面选出的服务器。在基于内容请求分发技术中,服务器能够提供不一样的服务,当客户请求到达时,调度器可根据请求的内容和服务器的状况选择服务器执行请求。由于全部的操做都是在操做系统核心空间中将完成的,它的调度开销很小,因此它具备很高的吞吐率。
服务器池的结点数目是可变的。当整个系统收到的负载超过目前全部结点的处理能力时,能够在服务器池中增长服务器来知足不断增加的请求负载。对大多数网络服务来讲,结点与结点间不存在很强的相关性,因此整个系统的性能能够随着服务器池的结点数目增长而线性增加。
后端存储一般用容错的分布式文件系统,如AFS、GFS、Coda和Intermezzo等。分布式文件系统为各服务器提供共享的存储区,它们访问分布式文件系统就像访问本地文件系统同样。同时,分布式文件系统提供良好的伸缩性和可用性。然而,当不一样服务器上的应用程序同时访问分布式文件系统上同一资源时,应用程序的访问冲突须要消解才能使得资源处于一致状态。这须要一个分布式锁管理器(Distributed Lock Manager),它多是分布式文件系统内部提供的,也多是外部的。开发者在写应用程序时,可使用分布式锁管理器来保证应用程序在不一样结点上并发访问的一致性。
负载调度器、服务器池和分布式文件系统经过高速网络相连,如100Mbps交换机、Myrinet、CompactNET和Gigabit交换机等。使用高速的网络,主要为避免当系统规模扩大时互联网络成为瓶颈。
Graphic Monitor是为系统管理员提供整个集群系统的监视器,它能够监视系统中每一个结点的情况。Graphic Monitor是基于浏览器的,因此不管管理员在本地仍是异地均可以监测系统的情况。为了安全的缘由,浏览器要经过HTTPS(Secure HTTP)协议和身份认证后,才能进行系统监测,并进行系统的配置和管理。