高可用集群技术

日期: 2008-04-06 来源:TechTarget中国

  下面针对高可用性集群,介绍一下它的工作原理。


  在微软的MSCS(Microsoft Cluster Server)术语中,所有的应用程序、数据文件、磁盘、网络IP地址等都被称为资源,一些资源可以组成一个资源组,一个资源组存在于一个节点上,但同时只能在一个节点上,它是MSCS可以进行故障切换(FailOver)的最小单元。


  在MSCS中,所有的资源都处于资源监视器的监视之下,资源监视器通过资源动态链接库文件与资源进行通信,这些资源动态链接库会侦测对应资源的状态,并通知资源监视器,之后,监视器再把信息提供给集群服务(Cluster Service),缺省情况下,集群服务会启动一个资源监视器来监视节点中的全部资源。


  MSCS用依赖性来定义不同资源彼此之间的关系,MSCS会根据资源间的相互依赖关系来决定把这些资源变为在线或者是离线的顺序。举一个WEB服务器文件共享的例子,文件共享的资源需要硬盘驱动器来存储数据,把这些有关系的资源一起放在MSCS组中,要实现共享,就必须先把硬盘准备好。同时,为了完成文件共享,我们还需要准备好网络名称以及IP地址。


  文件共享资源依赖于硬盘资源,网络名称资源依赖于IP地址资源,而对应的WEB服务刚依赖于文件共享和网络名称。


  资源的存在可以分为五种状态


  1、Offline,资源不能被别的资源或者客户机使用
  2、Offline Pending,资源正处于Offline的过程中
  3、Online,资源处于可用的状态
  4、Online Pending,资源正处于Online的过程中
  5、Failed,资源出现了MSCS无法解决的问题


  前面已经提到,MSCS可以从一个节点故障切换到另一个节点的最小单元是资源组。被定义好的相关的资源放在同一个组中,并建立对应的依赖关系。以下图为例,如果节点A中的资源组1要移到节点B上的话,资源组1中的资源(资源A,资源B,资源C)也必须从节点A移到节点B才行。


  在MSCS的资源中,有一个非常重要的资源,Quorum,它是一个可以被两个节点访问的物理硬盘,用来保存集群的信息。这些信息是用来维护集群的完整性以及使节点保持同步,特别是当节点不能与另一个节点通信的时候。Quorum盘在某一时刻只能被一个节点所拥有,并用来决定由哪个节点来拥有集群的所有资源。Quorum必须位于共享的磁盘子系统中,一般都是使用外接的磁盘柜。一般情况下,不建议把应用
程序和数据保存到包含Quorum的硬盘上。


  故障切换(Failover)是指把出现故障的节点上的资源重新定位到另一个可用的节点上。负责监视资源的资源监视器一旦发现资源出现故障,它就会通知集群服务,集群服务会根据事前定义好的策略触发对应的事件。虽然发现的是个别资源的故障,但是,集群还是会把整个资源组进行故障切换。


  故障切换会在三种不同的情况下发生:人工(一般是因为管理员的请求),自动,或者在特定的时间(由集群管理软件设定)。自动故障切换又包含了三个阶段:1、故障发现。2、资源重新定位。3、重新启动应用程序(一般是故障切换过程中最耗费时间的)。当达到资源组的故障切换阀值时,自动的故障切换才会发生,阀值是可以设定的,一般由管理员来设定。


  故障恢复(Failback)是一种故障切换的特例,是指发生故障切换之后,把部分或者全部资源组移回它们首选的节点的过程。首选的节点,就是指集群中指定的运行资源组的道选的节点,如果是多个节点的高可用性方案,就会有多个首选的节点。当首选的节点出现故障后,对应的资源组就切换到另外的可用节点上,当出现故障的节点恢复正常后,资源组可以自动的切换回首选节点。如果没有定义首选节点,资源组就不会自动切换回来。


  要检查资源是不是可用,资源监视器会向对应的动态链接库发送状态信息的请求,一般会有两种级别的检查,LooksAlive和IsAlive。LooksAlive级别的检查相对比较简单,每隔一段时间(相对比较短的时间,缺省是5秒),资源监视器会进行一次LooksAlive级别的检查,如果资源没有响应,监视器会向集群服务报告。IsAlive级别的检查是非常完整的检查,它会彻底检查资源是不是工作正常,IsAlive检查的时间间隔比LooksAlive要长,缺省是1分钟。


  结合上面提到的各个要素,高可用性就是通过下面的过程来实现的:


  首先,资源监视器根据设定的时间间隔对资源进行LookAlive和IsAlive两种级别的检查,一旦发现某一个资源不可用,就会试图重新启动该资源。根据阀值的设定,如果在某一时间段内,资源不可用的情况达到了设定的阀值时,就会发生故障切换。经过故障切换的过程,对应的资源组在另外一个节点上重新启动了,继续为客户机提供服务,对客户来说,工作没有影响,这就完成了一次故障切换。当出现故障的节点恢复正常以后,如果事先对该资源组设定了首选节点,就会把该资源组移回该首选节点。


  高性能计算技术
  HPC: 并行计算工作原理
  要实现并行计算,您需要:
  1.        支持并行运算的硬件架构;
  2.        支持并行计算的应用程序;
  3.        使应用能够并行执行的软件工具,如编译器,API等等。


  下面我们就这三个方面分别介绍它们的分类和作用。


  一、并行计算硬件架构


  1、 计算方式的分类


  在这里我们使用历史”悠久”的Flynn分类法将计算方式分为以下四种:
  •        SISD(单指令流单数据流):传统的计算机只有一块CPU,因此准许一条指令流顺序执行。目前许多大型主机有一块以上的CPU,但各CPU执行的指令流互不相关,因此它们仍被看作是SISD机器,不过是很多运行在不同数据空间上的SISD的组合。很多HP,DEC和SUN的工作站属于这种类型。并行计算机不应采用这种计算方式。
  •        SIMD(单指令流多数据流):单个指令流对于多个数据流进行操作。这种方式可以形象化为多台计算机在中央调度处理器的协调下处理各自的数据。从逻辑上看,此时指令全部来自于中央调度器,尽管它们可以执行在不同的硬件设备(CPU)上。
  •        MISD(多指令流单数据流):多个指令流共同操作同一条数据流。到目前为止尚未发明这样的系统。
  •        MIMD(多指令流多数据流):这种系统并行的在不同数据上执行不同的指令流,这种类型与上面提到的多处理器SISD系统的本质区别在于不同处理器处理的数据是彼此相关的,它们实际上是在并行执行同一工作的不同部分。因此MIMD系统可以将一个主任务分解为众多子任务并行执行以缩短工作时间。这是目前大部分协同计算系统所采用的计算方式。


  2、 并行计算的相关架构


  为了使计算机系统能够实现并行处理,一系列的计算机架构相关的技术被开发出来。下面我们介绍一下其中的几种主要技术。


  ■ 处理器阵列(Array Processors):


  使用多个处理器组成阵列,在运行时由中央处理器广播指令流,各个其它处理器(又称处理元,processing element)执行指令流来处理本地内存中的数据。这种处理技术是被广泛采用的分布式内存技术的基础。


  ■ 共享内存(Shared Memory):


  处理器(PE)通过某种连接机制连接到一块巨大的共享内存上,使得任何处理器都能够访问任何一段内存。这种技术的优点是在并行环境中可以简化操作系统、编译器和应用程序的设计,缺点是当处理器数目增加时性能会迅速下降而成本会迅速上升。著名的Cray T90超级计算机使用的就是这种技术,目前很多的RISC工作站也使用这种技术。这种技术在很多新的并行计算实现上也被部分借鉴。


  ■ 分布式内存(Distributed Memory):


  每个处理器(PE)只访问自己的本地内存,处理器之间通过某种连接机制进行通讯,从而进行协同工作,成为一台并行计算机。这种技术的优点是可以很容易地组合很多标准计算机硬件成为一台超级计算机,与其它技术相比具有很高的性能价格比和可扩展性。缺点是应用程序中必须包含明确的信息传递调用以利用并行架构,而且编译器、调试器、并行化工具和性能监测工具的设计也会非常复杂。使用这种技术时,连接机制的选择至关重要。带宽和时延会直接影响整个系统的性能。这种技术在新兴的Linux HPC中广为采用。


  ■ 虚拟共享内存(Virtual Shared memory):


  这种技术将分布式内存虚拟为统一的内存空间,从而获得分布式内存和共享内存技术的所有优点。但是由于过多的内存访问调度,在目前的技术水平上性能非常差。目前的实际应用中不会采取这种技术。


  二、并行应用程序技术


  应用程序决定了计算过程中的指令流和数据流,所以应用程序能否并行化是能否利用并行计算机的硬件架构的关键所在。以下是一些对并行应用程序常用技术的简单介绍。


  ■ 数据和功能并行化:


  这时将计算任务分配到多个处理器上执行的最基本方法。数据并行化是指将需要处理的数据划分到不同的处理器上,然后所有处理器执行相同的指令流来处理各自的数据。设想一下一个求1000个数的正弦函数的程序,如果您有1000个处理器,您可以为每个处理器分配一个计算正弦函数的任务,然后让1000个处理器同时开始执行。这是一种SIMD的实现技术。功能并行化是指将应用程序中的不同功能分配到不同的处理器/内存上去完成,是一种MIMD的实现方法。


  ■ 循环级并行化:


  对于大多数科学计算任务而言,大部分的时间花费在循环计算之中。在共享内存架构的系统中,”并行编译器”可以检测到循环中互无关联的计算步骤并将它们分配给不同的处理器去执行。


  ■ 数组语句(Array Syntax):


  SIMD的另一种实现方法。在程序设计语言中包含对数组成员进行一次性赋值和计算的语句。在并行系统上,并行编译器会自动对这些赋值和计算进行并行化处理。


  ■ 信息传递(Message passing):


  在分布式内存架构上,每个处理器只能访问自己的内存。当处理器之间需要进行数据交换时,信息传递是目前最为广泛使用的技术。从程序员的角度来看,这种技术就是一系列发送与接收调用的组合。当应用程序变得比较庞大而复杂时,这种技术的使用会变得非常复杂和容易出错,比如一个处理器等待的消息永远无法收到等等。但是一旦程序设计成功,这种技术在分布式内存系统和共享内存系统上都能够获得很好的性能。


  三、常用的并行计算工具软件


  并行计算工具软件是指那些帮助程序设计人员更好或更简单地利用并行架构的工具。下面我们介绍最常用的几种。


  ■ 编译器(Compiler):


  编译器在并行计算中的作用分为两个层面,一是像在串行系统上一样生成优化的代码序列,二是将可以并行执行的部分进行并行化处理。尽管编写出能够把传统的、串行结构的应用程序编译为完美的并行代码的编译器是几乎不可能的任务,但计算机科学家们的不懈努力正在使编写并行程序越来越容易。目前很多的编译器可以借助程序员写在程序中的简单编译指导生成高质量的并行代码,如数组语句的处理等。在目前的多数共享内存架构的系统上,编译器已经可以进行循环级的并行化。


  ■ 调试器(Debugger):


  调试器可以说是程序设计的必备工具。在并行计算系统中,特别是分布式内存架构的系统中,一个调试器通常面临以下的挑战:必须能够反映出信息传递的过程和状态;在查看变量时,必须能够查看每个处理器上的同名变量的状态;由于在科学计算中大数组的广泛应用,必须能够以直观的方式表示出数组成员的值,等等等等。


  ■ 性能监测/分析工具:


  由于并行计算所带来的程序并行执行的复杂性和不可预见性,您会需要一个功能强大的性能监测/分析工具来帮助您完成分析并行化程度、信息传递特性以及判定系统瓶颈等工作,以便使并行系统投入产能应用时能够有最好的性能状态。


  ■ 并行化工具/API:


  并行化工具是指将串行源代码转化为并行源代码的工具,通常只需要程序员在程序中插入简单的宏,就可以完成向并行源代码的转化。并行API主要是指实现了完整信息传递功能的软件包,使得程序员指需要进行简单的调用就可以实现信息传递,而无须自己实现其中的每一个细节。


  综上所述,一个成功的并行计算系统的核心是硬件架构、应用程序和辅助软件。目前广为应用的硬件架构是共享内存和分布式内存,前者可以简化程序设计但成本高,可扩展性差;后者成本低,扩展性好但会导致程序设计复杂化。应用程序在设计上会因为硬件架构的不同而有所不同,其中信息传递技术虽然设计复杂但在两种硬件架构上都能够获得高性能。恰当的辅助工具不仅使程序设计更为简单,而且实际上,在大规模的应用系统中,没有这些工具几乎不可能实现稳定的、高性能的并行计算。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐