LVS
LVS
LVS
LVS
手册
如何给出合理的框架和有效的设计方法,来建立高性能、高可伸缩、高可用的网络服务,这是
摆在研究者和系统设计者面前极富挑战性的任务。下面文章就是围绕这一任务展开的。
可伸缩网络服务的设计与实现
人类社会正在进入以网络为中心的信息时代,人们需要更快捷、更可靠、功能更丰富的网络服
务。万维网的流行促进互联网使用的指数级增长,现在很多站点收到前所未有的访问负载,经
常担心系统如何被扩展来满足不断增长的性能需求,同时系统如何保持 24x7 的可用性。未来的
应用将需要更高的吞吐率、更好的交互性、更高的安全性,这要求服务平台具有更强的处理能
力和更高的可用性。所以,如何给出合理的框架和有效的设计方法,来建立高性能、高可伸缩
、
高可用的网络服务,这是摆在研究者和系统设计者面前极富挑战性的任务。本文研究和设计的
可伸缩网络服 务便是围绕这一任务展开的。
一、可伸缩网络服务的体系结构
二、 IP
IP
IP
IP
负载均衡技术
三、负载调度
四、 IP
IP
IP
IP
虚拟服务器的实现和性能测试
五、内核中的基于内容请求分发
六、 TCPHA
TCPHA
TCPHA
TCPHA
的设计与实现
一、可伸缩网络服务的体系结构
针对网络服务的可伸缩性、高可用性、可维护性和价格有效性需求,本章给出了可伸缩网络服
务的体系结构和设计方法,它提供了负载平衡、可伸缩性和高可用性。
1 、可伸缩网络服务的定义
2 、网络服务的需求
3 、
LVS
集群的体系结构
4 、地理分布
LVS
集群的体系结构
5 、小结
1
1
1
1
、可伸缩网络服务的定义
可伸缩性( Scalability )是在当今计算机技术中经常用到的词汇。对于不同的人,可伸缩性有 不
同的含义。 现在,我们来定义可伸缩网络服务的含义。
可伸缩网络服务是指网络服务能随着用户数目的增长而扩展其性能,如在系统中增加服务器、
内存或硬盘等;整个系统很容易被扩展,无需重新设置整个系统,无需中断服务。换句话说,
系统管理员扩展系统的操作对最终用户是透明的,他们不会知道系统的改变。
可伸缩系统通常是高可用的系统。在部分硬件(如硬盘、服务器、子网络)和部分软件(如操
作系统、服务进程)的失效情况下,系统可以继续提供服务,最终用户不会感知到整个服务的
中断,除了正在失效点上处理请求的部分用户可能会收到服务处理失败,需要重新提交请求。
Caching 和复制是建立高可用系统的常用技术, 建立多个副本会导致如何将原件的修改传播到 多
个副本上的问题。
实现可伸缩网络服务的方法一般是通过一对多的映射机制,将服务请求流分而治之( Divide an d
Conquer )到多个结点上处理。一对多的映射可以在很多层次上存在,如主机名上的 DNS
系统、
网络层的 TCP/IP 、文件系统等。虚拟( Virtual )是描述一对多映射机制的词汇,将多个实体组
成一个逻辑上的、虚拟的整体。例如,虚存( Virtual Memory )是现代操作系统中最典型的一 对
多映射机制,虚存建立一个虚拟内存空间,将它映射到多个物理内存上。
2
2
2
2
、网络服务的需求
随着 Internet 的飞速发展和对我们生活的深入影响,越来越多的个人在互联网上购物、娱乐、休
闲、与人沟通、获取信息;越来越多的企业把他们与顾客和业务伙伴之间的联络搬到互联网上
,
通过网络来完成交易, 建立与客户之间的联系。互联网的用户数和网络流量正以几何级数增长
,
这对网络服务的可伸缩性提出很高的要求。例如,比较热门的
Web
站点会因为被访问次数急剧
增长而不能及时处理用户的请求,导致用户进行长时间的等待,大大降低了服务质量。另外,
随着电子商务等关键性应用在网上运行,任何例外的服务中断都将造成不可估量的损失,服务
的 高可用性也越来越重要。所以,对用硬件和软件方法实现高可伸缩、高可用网络服务的需求
不断增长,这种需求可以归结以下几点:
可伸缩性 (
Scalability ) , 当服务的负载增长时, 系统能被扩展来满足需求, 且不降低服务质
量。
高可用性( Availability ) ,尽管部分硬件和软件会发生故障,整个系统的服务必须是每天 24 小
时每星期 7 天可用的。
可管理性( Manageability ) ,整个系统可能在物理上很大,但应该容易管理。
价格有效性( Cost-effectiveness ) ,整个系统实现是经济的、易支付的。
单服务器显然不能处理不断增长的负载。 这种服务器升级方法有下列不足:一是升级过程繁琐
,
机器切换会使服务暂时中断,并造成原有计算资源的浪费;二是越往高端的服务器,所花费的
代价越大;三是一旦该服务器或应用软件失效,会导致整个服务的中断。
通过高性能网络或局域网互联的服务器集群正成为实现高可伸缩的、高可用网络服务的有效结
构。这种松耦合结构比紧耦合的多处理器系统具有更好的伸缩性和性能价格比,组成集群的 P C
服务器或 RISC 服务器和标准网络设备因为大规模生产, 价格低,具有很高的性能价格比。 但
是,
这里有很多挑战性的工作,如何在集群系统实现并行网络服务,它对外是透明的,它具有良好
的可伸缩性和可用性。
针对上述需求,我们给出了基于 IP 层和基于内容请求分发的负载平衡调度解决方法,并在 Linu x
内核中实现了这些方法, 将一组服务器构成一个实现可伸缩的、高可用网络服务的服务器集群
,
我们称之为 Linux 虚拟服务器( Linux Virtual Server
) 。在
LVS
集群中,使得服务器集群的结构对
客户是透明的,客户访问集群提供的网络服务就像访问一台高性能、高可用的服务器一样。客
户程序不受服务器集群的影响不需作任何修改。系统的伸缩性通过在服务机群中透明地加入和
删除一个节点来达到,通过检测节点或服务进程故障和正确地重置 系统达到高可用性。
3
3
3
3
、
LVS
LVS
LVS
LVS
集群的体系结构
下面先给出
LVS
集群的通用结构, 讨论了它的设计原则和相应的特点; 然后将
LVS
集群应用于 建
立可伸缩的
Web
、 Media 、 Cache 和 Mail 等服务。
3.1 、
LVS
集群的通用结构
3.2 、可伸缩
Web
和媒体服务
3.3 、可伸缩 Cache 服务
3.4 、可伸缩邮件服务
3.1
3.1
3.1
3.1
、
LVS
LVS
LVS
LVS
集群的通用结构
LVS
集群采用 IP 负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均
衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成
一个高性能的、高可用的虚拟服务器。
图 2.1 :
LVS
集群的体系结构
为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。
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 ) 协议和身份认证后, 才能进行系统监
测,
并进行系统的配置和管理。
3.1.1 、为什么使用层次的体系结构
3.1.2 、为什么是共享存储
3.1.3 、高可用性
3.1.1
3.1.1
3.1.1
3.1.1
、为什么使用层次的体系结构
层次的体系结构可以使得层与层之间相互独立,允许在一个层次的已有软件在不同的系统中被
重用。例如,调度器层提供了负载平衡、可伸缩性和高可用性等,在服务器层可以运行不同的
网络服务,如
Web
、 Cache 、 Mail 和 Media 等,来提供不同的可伸缩网络服务。
3.1.2
3.1.2
3.1.2
3.1.2
、为什么是共享存储
共享存储如分布式文件系统在这个
LVS
集群系统是可选项。当网络服务需要有相同的内容,共
享存储是很好的选择,否则每台服务器需要将相同的内容复制到本地硬盘上。当系统存储的内
容越多,这种不共享结构( Shared-nothing Structure )的代价越大,因为每台服务器需要一样大
的存储空间,所有的更新需要涉及到每台服务器,系统的维护代价也很高。
共享存储为服务器组提供统一的存储空间,这使得系统的维护工作比较轻松, 如 Webmaster 只 需
要更新共享存储中的页面,对所有的服务器都有效。分布式文件系统提供良好的伸缩性和可用