刘志勇
前言
如果你所维护的服务器上运行着非常重要的应用程序(如银行的网上交易系统),那么你对这台服务器的“可用性”就会异常关注,生怕它什么时候“宕掉”,给你所在的企业带来很大的损失和麻烦。那么,群集技术会帮我们解决这一问题。什么是群集技术?实现群集有哪些关键点?在实际中,群集技术又应当如何应用?本文已发表在《网管员世界》,网络首发在51CTO博客,出处[url]http://stlzy.blog.51cto.com/69882/89786[/url],作者为刘志勇,谢绝转载!
什么是群集技术
让我们现看看群集技术的定义。
群集技术,英文为Cluster。计算机集群简称集群,是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来的、高度紧密地协作完成计算工作。在某种意义上,它们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多。
如果你知道RAID,那么就容易理解群集技术的意义。我们知道RAID是通过磁盘阵列与数据条块化方法相结合, 以提高数据可用率的一种结构。RAID可分为RAID级别1到RAID级别6, 每一个RAID级别都有自己的强项和弱项。 "奇偶校验"定义为用户数据的冗余信息, 当硬盘失效时, 可以重新产生数据。群集技术的思想与之类似,就是让你免于整个系统的瘫痪以及操作系统和应用层次的故障,它将多台的服务器连接在一起当作一台大型机来使用。但由于群集技术的解决方案缺乏工业标准,并且是基于专利技术之上,使得应用环境在开发、管理和移植到新的平台都要付出额外的成本。
一台服务器集群包含多台拥有共享数据存储空间的服务器,各服务器之间通过内部局域网进行互相连接;当其中某一台服务器发生故障时,它所运行的应用程序,并不会因此中止,而是被与之相连的服务器自动接管。通常情况下,集群中所有的节点都拥有一个共同的名称,集群系统内任意一台服务器都可被所有的网络用户所使用。
一般而言,群集和高可用性结合的服务器可将运行提升至99.99%。群集技术不仅仅能够提供更长的运行时间,它在尽可能地减少与既定停机有关的停机时间方面同样有着重要意义。
例如,如果使用群集,你可以在关闭一台服务器的同时,不用与用户断开即可进行应用,硬件,操作系统的流动升级。集群系统通过功能整合和故障过渡技术实现系统的高可用性和高可靠性,集群技术还能够提供相对低廉的总体拥有成本和强大灵活的系统扩充能力。
一个理想的群集是,用户从来不会意识到群集系统底层的节点,在他们看来,群集是一个系统,而非多个计算机系统。并且群集系统的管理员可以随意增加和删改群集系统的节点。 本文已发表在《网管员世界》,网络首发在51CTO博客,出处[url]http://stlzy.blog.51cto.com/69882/89786[/url],作者为刘志勇,谢绝转载!
群集技术到底有什么用
让我们来看以下几个情景:
一,某家银行用来存储财务数据的服务器,要求当机房发生意外,如停电,火灾,地震等,银行业务不能因此而中止,保证各网点的业务仍然继续进行。
二,某气象研究所要模拟气象的变化,需要超级计算机的运算能力,但限于财力不能购置超级计算机。
三,某网站处于起步阶段,因不知未来前景,但想以后可以逐步升级到具备巨型计算机能力的服务器来运行数据库。
……
以上的需求就要用到群集技术。群集技术在网络服务等方面的应用的非常广泛,现在的大型网络服务器都是由HTTP服务器、FTP服务器、数据库服务器、邮件服务器和防火墙服务器等多台主机构成,再由操作系统统一管理,以发挥其最大的效能。
换言之,群集技术可以用来保证网络应用不受服务器软、硬件故障影响,持续不间断运行。采用这种技术的产品分软件方式和硬件方式,无论是纯软件方式还是需配合硬件使用的非纯软件方式,其中的软件均称为群集软件。通常我们所讲的群集软件,它有两个含义,一个指用于双机环境,即两台服务器间的数据通信,称其为双机软件;一个用于多机环境,即多台服务器间的数据通信,则称其为多机软件。群集软件具有监控和切换的功能。
据笔者所知,每年评选两次的TOP500强的超级计算机排名表中,越来越多的超级计算机使用了群集技术,群集技术已成为当今超级计算机的发展方向。使用了群集技术的超级计算机的典型代表,如Thunder,集成了4096个Intel Itanium2 Tiger4 1.4GHz处理器,每秒钟可以运算229380亿次。上海的超级计算机中心同样是利用群集技术集成了2560个AMD Opteron 2.2 GHz处理器,运算速度可达每秒112640亿次。 本文已发表在《网管员世界》,网络首发在51CTO博客,出处[url]http://stlzy.blog.51cto.com/69882/89786[/url],作者为刘志勇,谢绝转载!
群集软件的基本工作原理
让我们看一下群集软件的基本原理。在服务器间通过软件监控服务器的处理器或应用,并保持持续的通信,当某服务器发生中断,其他服务器接收不到它发出的通信信号时,群集软件的切换功能会发生作用,将被中断服务器的工作移到指定服务器上运行,使原服务器的工作得以继续。
从功能上看,群集软件可以分为热备和容错,如果再继续细分,还可分为双机热备、双机容错、群集热备和群集容错4种。
热备群集软件与容错群集软件有什么区别呢?它们监控的对象不同。热备群集软件监控服务器的处理器,而容错群集软件监控服务器的应用,也就是说,热备群集软件是硬件级的监控,容错群集软件是应用级的监控,容错群集软件产品应该是用户的首选。
从工作原理上看,群集软件可以分为磁盘阵列方式和非磁盘阵列方式,前者指共享磁盘阵列方式,依赖硬件实现高可用性,软件只起到部分管理作用;而后者指扩展镜像方式,是一种纯软件方式。本文已发表在《网管员世界》,网络首发在51CTO博客,出处[url]http://stlzy.blog.51cto.com/69882/89786[/url],作者为刘志勇,谢绝转载!
群集技术的种类
群集分为同构与异构两种,它们的区别在于:组成群集系统的计算机之间的体系结构是否相同。按照功能和结构大致可以划分成四种:高性能科学群集(High-performance clusters,HPC)、负载均衡群集(Load balancing clusters)、高可用性群集(High-availability clusters,HA)、网格计算 Grid computing。本文已发表在《网管员世界》,网络首发在51CTO博客,出处[url]http://stlzy.blog.51cto.com/69882/89786[/url],作者为刘志勇,谢绝转载!
科学群集
科学群集是指以提高科学计算能力为目的计算机群集技术,基于并行计算的基础之上,需要为之开发并行编程应用程序,以解决复杂的科学计算问题——将一个应用程序分割成多块可以并行执行的部分并指定到多个处理器上执行,。但是,科学群集并不使用专门的并行超级计算机,采用这种技术的超级计算机内部通常由十至上万个独立处理器组成,使用商业系统,如通过高速连接来链接的一组单处理器或双处理器个人计算机,并且在公共消息传递层上进行通信以运行并行应用程序。平常所说的便宜的Linux超级计算机实际上就是一个计算机群集,其处理能力与真正的超级计算机相等。通常一套象样的群集配置开销要超过80万元人民币,对一般用户来说过于昂贵,但与价值动辄数百万元人民币的专用超级计算机相比还是很划算的。采用这种群集技术的典型代表有IBM的“深蓝”超级计算机。
比较流行的HPC采用Linux操作系统和其它一些免费软件来完成并行运算。这一集群配置通常被称为Beowulf集群。这类集群通常运行特定的程序以发挥 HPC cluster的并行能力。这类程序一般应用特定的运行库, 比如专为科学计算设计的MPI库。壳牌石油公司(Shell)所使用的由IBM xSeries服务器组成的1024节点的Linux HPC Cluster是目前世界上计算能力最强的计算机之一。
负载均衡群集
当企业的业务量的发展都超出了过去最乐观的估计,即使按照当时最优配置建设的网络,也很快会感到吃不消。尤其是各个网络的核心部分。在此情况下,如果扔掉现有设备去做大量的硬件升级,将造成现有资源的浪费,而且如果再面临下一次业务量的提升,又将导致再一次硬件升级的高额成本投入,甚至性能再卓越的设备也不能满足当前业务量的需求。于是,负载均衡机制应运而生。
对于企业需求而言,负载均衡群集是一种更实用的系统。顾名思义,负载均衡群集可以使负载在系统中尽可能平均地分摊处理。负载可以是需均衡的应用程序处理负载,也可以是网络流量负载……这类系统适合于运行同一组应用程序的大量用户。每个节点都可以处理一部分负载,并且可以在节点之间动态分配负载,以实现平衡。对于网络流量亦如此。通常,网络服务器应用程序会接受过多的入网流量以致无法迅速处理,这就需要将流量发送给在其它节点上运行的网络服务器应用。还可根据每个节点上不同的可用资源或网络的特殊环境来进行优化。
负载均衡群集就是带均衡策略(算法)的服务器群集。负载均衡群集在多节点之间按照一定的策略(算法)分发网络或计算处理负载。负载均衡建立在现有网络结构之上,它提供了一种廉价有效的方法来扩展服务器带宽,增加吞吐量,提高数据处理能力,同时又可以避免单点故障。
负载均衡群集运行时一般通过一个或者多个前端负载均衡器将工作负载分发到后端的一组服务器上,从而达到整个系统的高性能和高可用性。这样的计算机集群有时也被称为服务器群(Server Farm)。
Linux虚拟服务器(LVS)项目在Linux操作系统上提供了最常有的负载均衡软件。
高可用性群集
高可用性群集的出现是为了使群集的整体服务尽可能可用,以便考虑计算硬件和软件的易错性。如果高可用性群集中的主节点发生了故障,那么这段时间内将由可用的次节点代替它,这就是故障切换。次节点通常是主节点的镜像,所以当它代替主节点时,它可以完全接管其身份,并且因此使系统环境对于用户是一致的。它的具体实现思路是这样的:负责监视资源的资源监视器一旦发现资源出现故障,它就会通知群集服务,群集服务会根据事前定义好的策略触发对应的事件。虽然发现的是个别资源的故障,但是,群集还是会把整个资源组进行故障切换。
网格计算
网格计算,或者称为网格群集,是一种与群集计算关系比较密切的技术。网格与传统群集的主要区别在于,网格是连接一组相关并不信任的计算机,它的运作更像一个计算公共设施而不是一个独立的计算机。还有,网格通常比群集支持更多不同类型的计算机集合。网格计算是针对有许多独立作业的工作任务作优化,在计算过程中作业间无需共享数据。网格主要服务于管理在独立执行工作的计算机间的作业分配。资源如存储可以被所有结点共享,但作业的中间结果不会影响在其他网格结点上作业的进展。
在实际应用的情况中,前面提到的三种群集技术种类经常会发生交叉,但目前企业应用网格群集的仍然很鲜见,因为它刚从学术计算和研究领域进入商业应用领域没几年,故网格群集在本文中只点到为止,不做深究。
您只要稍加留心,就可以发现高可用性群集也可以在其节点之间均衡用户负载,同时仍试图维持高可用性程度。同样,可以从要编入应用程序的群集中找到一个并行群集,它可以在节点之间执行负载均衡。所以,采用这些技术的系统,在分类上划分趋于模糊。虽说群集系统本身独立于支撑它的软件或硬件平台上,但要有效运行系统时,硬件连接将起关键作用。
目前我们常见、常用的群集类型主要是高可用性群集和负载均衡群集,再具体点就是双机热备和负载均衡(以两台服务器的环境为例)。
双机热备就是一台做主机,另一台做备机,正常状态下,只有主机自己提供服务,备机处于待命状态;主机宕机后,备机自动接管主机上的服务。由于切换时间比较短,后台的这些变化客户端往往感觉不到。
负载均衡就是两台机器同时为提供服务,当A机忙,用户请求就转到B机处理,反之亦然。当然,如果其中一个宕机了,照样可以正常提供服务。可以说负载均衡模式包含了热备模式的功能。
实现群集的关键点
本文只简单的阐述各种群集技术的实现关键点和原理,并不涉及到具体技术细节,本刊会另著文章详细讲述具体实现的方法。
高可用性群集
上一节已经说过,高可用性群集的关键是故障切换。
故障切换会在三种不同的情况下发生:人工(一般是因为管理员的请求),自动,或者在特定的时间(由集群管理软件设定)。
自动故障切换包含了三个阶段: 1、故障发现。2、资源重新定位。3、重新启动应用程序(一般是故障切换过程中最耗费时间的)。当达到资源组的故障切换阀值时,自动的故障切换才会发生,阀值是可以设定的,一般由管理员来设定。
故障恢复是一种故障切换的特例,是指发生故障切换之后,把部分或者全部资源组移回它们首选的节点的过程。首选的节点,即集群中指定的运行资源组的首选的节点,若为多节点的高可用性方案,就会有多个首选的节点。当首选的节点出现故障后,对应的资源组就切换到另外的可用节点上,当出现故障的节点恢复正常后,资源组可以自动的切换回首选节点。如果没有定义首选节点,资源组就不会自动切换回来。
要检查资源是否可用,资源监视器会向对应的动态链接库发送状态信息的请求,一般会有两种级别的检查,LooksAlive和 IsAlive。LooksAlive级别的检查相对比较简单,每隔一段时间,资源监视器会进行一次LooksAlive级别的检查,如果资源没有响应,监视器会向群集服务报告。而IsAlive级别则比较高,它的检查很完整,会彻底检查资源是否工作正常,通常,IsAlive检查的时间间隔比 LooksAlive要长。
综上所述,我们可以理解高可用性群集的实现的方式:
首先,资源监视器根据设定的时间间隔对资源进行LookAlive和IsAlive两种级别的检查,一旦发现某一个资源不可用,就会试图重新启动该资源。根据阀值的设定,如果在某一时间段内,资源不可用的情况达到了设定的阀值时,就会发生故障切换。经过故障切换的过程,对应的资源组在另外一个节点上重新启动,继续为客户机提供服务,对客户来说,工作没有影响,这就完成了一次故障切换。当出现故障的节点恢复正常以后,如果事先对该资源组设定了首选节点,就会把该资源组移回该首选节点。本文已发表在《网管员世界》,网络首发在51CTO博客,出处[url]http://stlzy.blog.51cto.com/69882/89786[/url],作者为刘志勇,谢绝转载!
负载均衡群集
负载均衡群集技术在网站、电子邮件提供商、VOD(Video On Demand)等很多方面都有广泛的应用。它的核心内容是运用越来越科学的负载分配算法开发出软件或硬件,来实现负载的更加合理地分配。
负载均衡群集就是带均衡策略(算法)的服务器群集。负载均衡群集在多个节点之间按照一定的策略(算法)分发网络或计算处理负载。负载均衡建立在现有网络结构之上,它提供了一种廉价有效的方法来扩展服务器带宽,增加吞吐量,提高数据处理能力,同时又可以避免单点故障。
使用负载均衡群集技术的web网站,它的后台有多个Web服务器,上面有相同的Web内容,来自客户端的访问请求首先发到一台服务器,由它根据负载均衡策略(算法)合理地分配给某个Web服务器。负载均衡策略(算法)的选择是关键问题——要做到每一个web服务器都有相同的内容,实现并不难。
要理解负载均衡的原理,读者可以想一下轮值工作的方式,就是把某一个任务分给大家完成,以免让个人过度劳累。负载均衡群集技术与之类似,不同的是,它是一种动态的均衡,而不是死板的均衡。它是通过一些工具对流进来的数据包进行实时分析,根据网络中的数据流状况,把任务进行合理分配。
刚才已经说到,负载均衡策略(算法)的选择是个关键问题,何出此言?因为不同应用环境中,负载的方式不同,如电子商务,它的负载在于计算;而网络数据库应用,则负载为服务器的存储子系统的I/O;再如视频网站,则负载在于网络接口的I/O……所以使用的均衡策略(算法)是不同的,多种多样的形式。具体的实现方式有软件和硬件两大类,实现的方法也很多,限于篇幅,本文不做赘述。
均衡算法主要有三种:轮循、最小连接数和快速响应优先。
轮循算法,就是将来自网络的请求依次分配给集群中的服务器进行处理。
最小连接数算法,就是为服务器群集中的每个节点设置一个记数器,记录每个节点当前的连接数,负载均衡系统总是选择当前连接数最少的节点分配任务。这要比"轮循算法"好很多,因为在有些场合中,简单的轮循不能判断哪个服务器的负载更低,也许新的工作又被分配给了一个已经很忙的服务器了。
快速响应优先算法,是根据群集中的服务器状态(CPU、内存等主要处理部分)来分配任务。这一点实现难度很高,目前采用该算法的负载均衡系统还很少见。尤其对于硬件负载均衡设备来说,只能在TCP/IP协议方面做工作,深入到服务器的处理系统中进行监测几乎不可能
综上所述,负载均衡群集的使用是非常广泛的,它的核心内容是运用越来越科学的负载分配算法开发出软件或硬件,来实现负载的更加合理地分配。
高性能科学群集
高性能科学群集是基于并行计算之上。要实现并行计算,必须具备以下要素:
支持并行运算的硬件架构、支持并行计算的应用程序、使应用能够并行执行的软件工具,如编译器,API等等。
支持并行计算的硬件架构所使用的技术,目前大致有处理器阵列、共享内存、分布式内存、虚拟共享内存这几种技术。支持并行计算的应用程序的实现技术大致有:数据和功能并行化、循环级并行化、数据语句、信息传递。限于篇幅,本文不可能事无巨细的介绍上述提到的各种技术,只能粗枝大叶介绍个大概。
综上所述,一个成功的并行计算系统的核心是硬件架构、应用程序和辅助软件。目前广为应用的硬件架构是共享内存和分布式内存。共享内存的优点是可以简化程序设计,缺点是成本高,可扩展性差;分布式内存的优点是成本低,扩展性好,缺点是程序设计复杂。应用程序在设计上会因为硬件架构的不同而有所不同,其中信息传递技术虽然设计复杂但在两种硬件架构上都能够获得高性能。恰当的辅助工具不仅使程序设计更为简单,而且实际上,在大规模的应用系统中,没有这些工具几乎不可能实现稳定的、高性能的并行计算。
高性能科学群集已存在多年,但普及程度不是很高。主要原因不外乎以下几点:
价格昂贵。相对较小的生产规模使得相关的部件成本极高,价格常常使用户望而却步。
不易扩展。由于没有使用市面上通用的模块,HPC系统的扩展要么不易在技术上实现,要么成本难以接受。
对使用环境要求苛刻。过去,一套大的HPC系统可能需要像篮球场那么大的机房去安装,可以想见配套的建筑、电源、布线和散热措施的准备会有多么复杂和昂贵。
近年来,针对上面三个问题,推出了新的高性能科学群集系统,这就是使用运行Linux操作系统的Intel平台的计算机来构建。这是一种分布式内存的HPC架构,它完美的解决这些问题:
由于使用Linux和通用的Intel平台,群集中的各个节点的价格将会相对低廉;
由于使用通用的硬件平台和标准的网络组件,群集的扩展容易实现且价格低廉;
廉价是Linux HPC最大的卖点。这一特点使得更多的"计算饥渴"的用户可以选择使用HPC系统。IBM曾帮助包括壳牌石油在内的许多客户建立了1000节点以上的Linux HPC系统,这些系统至今仍然在全世界最快速的计算机系统中占据着一席之地。
一个好的Linux HPC系统完全不会在任何方面逊色于其它的分布式内存HPC系统,但问题是想要构建一个好的Linux HPC系统事实上却是很难的。