计算机集群

的技术人员在一个大型Linux集群上工作]]

计算机集群()是一组松散或紧密连接在一起工作的计算机。由于这些计算机协同工作,在许多方面它们可以被视为单个系统。与网格计算机不同,计算机集群将每个设置为执行相同的任务,由软件控制和调度。

集群的组件通常通过快速局域网相互连接,每个节点(用作服务器的计算机)运行自己的操作系统实例。在大多数情况下,所有节点使用相同的硬件和相同的操作系统,尽管在某些设置中(例如使用),可以在每台计算机或不同的硬件上使用不同的操作系统。

部署集群通常是为了提高单台计算机的性能和可用性,而集群也通常比速度或可用性相当的单台计算机的成本效益要高。

计算机集群的出现是许多计算趋势汇聚的结果,这些趋势包括低成本微处理器、高速网络以及用于高性能分布式计算软件的广泛使用。集群使用和部署广泛,从小型企业集群到世界上最快超级电脑(如IBM的Sequoia)。 在集群出现之前,人们采用具有三重模块冗余的单元容错主机;但是,集群的前期成本较低,网络结构速度提高,这助推了人们采用集群这种方式。与高可靠性的大型机集群相比,扩展成本更低,但也增加了错误处理的复杂性,因为在集群中错误模式对于运行的程序是不透明的。

基本概念
。]]
为了通过组合低成本的商用现成计算机,来获得更大的计算能力和更好的可靠性,人们研究提出了各种架构和配置。

计算机集群方法通常通过快速局域网连接许多现成的计算节点(例如用作服务器的个人计算机)。 计算节点的活动由“集群中间件”协调,集群中间件是一个位于节点之上的软件层,让用户可以将集群视为一个整体的内聚计算单元(例如通过单系统映像概念)。 开发人员使用Linux、工具包和訊息傳遞介面库以相对较低的成本实现高性能。

尽管一个集群可能仅由几台通过简单网络连接的个人计算机组成,但集群架构也可用于实现非常高的性能水平。TOP500组织每半年公布的500台最快超级计算机的名单通常包括许多集群,例如,2011年世界上最快的机器是“京”,它有和集群架构。

历史
集群 11/780, 拍摄于约1977年]]
Greg Pfister指出,集群最初不是由特定的供应商发明的,而是由无法在一台计算机上完成所有工作或需要备份的客户发明的。 他估计计算机集群发明于20世纪60年代。 作为并行工作的一种方式,集群计算的正式工程基础可以说是由IBM的吉恩·阿姆達爾发明的,因为他在1967年出版了被认为是关于并行处理的开创性论文:阿姆达尔定律。

早期计算机集群的历史或多或少直接与早期网络的历史有关,因为网络发展的主要动机之一是连接计算资源,创建真正的计算机集群。

第一个被设计成集群的生产系统是20世纪60年代中期的Burroughs ,它允许多达四台计算机(每个计算机都有一个或两个处理器)紧密连接到一个公共磁盘存储系统,以平衡工作负载。与标准的多处理器系统不同,每台计算机都可以在不中断整体运行的情况下重新启动。

第一个商业松散耦合的集群产品是公司的“附加资源计算机”(Attached Resource Computer,ARC)系统,该系统于1977年开发,使用ARCNET作为集群接口。直到迪吉多电脑公司在1984年为VAX/VMS操作系统(现在称为OpenVMS)发布了产品,集群才真正开始。ARC和VAX集群产品不仅支持并行计算,还支持共享文件系统和外部设备。其目的是提供并行处理的优势,同时保持数据的可靠性和唯一性。另外两个值得注意的早期商业集群是(大约1994年出现的高可用性产品)和IBM S/390 Parallel Sysplex(也在大约1994年出现,主要用于商业用途)。

同时,当商业网络使用计算机集群在计算机外部的并行性时,超级计算机开始在计算机内部中使用它们。继CDC 6600在1964年取得成功之后,也于1976年成功发布,并通过向量处理引入了内部并行性。 虽然早期的超级计算机不使用集群而是使用了共享内存,但一些速度最快的超级计算机(如京)最终依赖于集群架构。

集群的属性
-{zh-hant:;zh-hans:}-
可以根据不同目的配置计算机集群,从一般用途的业务需求(如Web服务支持),到计算密集型的科学计算。在这两种情况下,集群都可以使用高可用性方法。请注意,下面描述的属性并不是排他的,“计算机集群”也可以使用高可用性方法等等。

“负载均衡”集群是集群节点共享计算工作负载,以提供更好的总体性能的配置。例如,Web服务器集群可以将不同的查询分配给不同的节点,因此总体响应时间将得到优化。 然而,负载平衡的方法可能在不同的应用程序之间有很大的不同,例如,用于科学计算的高性能集群的平衡负载算法与Web服务器集群不同,Web服务器集群可能只是使用一种简单的循环方法,将每个新请求分配到不同节点。 例如,计算机集群可能支持车祸或天气的计算模拟。非常紧密耦合的计算机集群被设计用于可能接近“超级计算”的工作。

“高可用性集群”提高了集群方法的可用性。它们通过拥有冗余节点来运行,当系统组件出现故障时,这些节点将用于提供服务。高可用性集群实现试图使用集群组件的冗余来消除单点故障。许多操作系统都有高可用性集群的商业实现。Linux-HA项目是Linux操作系统常用的一个自由软件HA包。

优点
集群的设计主要考虑性能,但实际使用中还涉及许多其他因素,包括容错(能够容许系统继续使用故障节点)能力、可扩展性、高性能、不需要频繁运行维护程序、资源整合(如RAID)和集中管理。集群的优点包括在发生灾难时启用数据恢复、提供并行数据处理和高计算能力。

在可伸缩性方面,集群提供了水平添加节点的能力。这意味着可以向集群中添加更多的计算机,以提高其性能、冗余和容错。与在集群中扩展单个节点相比,添加节点是一个既节省成本,又可以使集群获得更高的性能的解决方案。计算机集群的这一大特性允许大量性能较低的计算机执行较大的计算负载。

向集群添加新节点时,可靠性也会增加,这是因为进行维护的时候不需要停下整个集群,只需停下单个节点维护,集群的其余节点承担该节点的负载即可。

如果集群包含大量的计算机,那么可以使用分布式文件系统和RAID,这两种方法可以大大提高集群的可靠性和速度。

设计与配置
设计集群的问题之一是各个节点之间的耦合程度。例如,单个计算机作业可能需要节点之间的频繁通信:这意味着集群共享一个专用网络,位置密集,可能有同类节点。另一个极端是计算机作业使用一个或几个节点,并且需要很少或没有节点间通信,接近网格计算。

在贝奥武夫机群中,应用程序从不会看到计算节点(也叫“从属计算机”),只与“主计算机”交互,而“主计算机”是处理从属计算机的调度和管理的特定计算机。

由于每一代游戏机的计算能力不断增强,一种新的用途出现了,它们被重新用于高性能计算(HPC)集群。游戏机集群的例子有索尼PlayStation集群和微软Xbox集群。另一个消费类游戏产品的例子是Nvidia Tesla个人超级计算机工作站,它使用多个图形加速处理器芯片。除了游戏机,也可以使用高端显卡。使用显卡进行网格计算比使用CPU更经济,尽管不太精确。但是,当使用双精度值时,它们变得像CPU一样精确,并且成本更低。 当进行维护时,集群还可以在各种配置上进行虚拟化。一个示例实现是Xen作为Linux-HA的虚拟化管理器。

早在1989年MPI出现之前,PVM就在橡树岭国家实验室问世了。PVM必须直接安装在每个集群节点上,并提供一组软件库,将节点描绘成一个“并行虚拟机”。PVM为消息传递、任务和资源管理以及故障通知提供了一个运行时环境。PVM可以由用C、C++或Fortran等语言编写的用户程序使用。 因此,与提供具体实现的PVM不同,MPI是已经在诸如MPICH和Open MPI的系统中实现的规范。

集群管理
上使用Apache Hadoop,低成本、低能耗的Cubieboard微型集群]]
使用计算机集群服务器的挑战之一是管理它的成本,如果集群有N个节点,有时可能高达管理N个独立机器的成本。 在某些情况下,这为管理成本较低的共享内存架构提供了一个优势。

节点故障管理
当集群中的一个节点出现故障时,可以使用诸如“fencing”(隔离)之类的策略来保持系统的其余部分可操作。 Fencing是在节点出现故障时隔离节点或保护共享资源的过程。有两类隔离方法;一类禁用节点本身,另一类禁用对资源(如共享磁盘)的访问。

调试和监控
在集群上开发和调试并行程序需要并行语言原语以及合适的工具,例如高性能调试论坛(HPDF)所讨论的那些工具,HPD规范就是这样产生的。
像TotalView这样的工具是为了在使用MPI或PVM进行消息传递的计算机集群上调试并行实现而开发的。

Berkeley NOW(Network of Workstations)系统收集集群数据并将其存储在数据库中,而在印度开发的PARMON系统允许对大型集群进行可视化观察和管理。 这在大型集群中是必不可少的,因为随着节点数量的增加,在繁重的计算负载下节点失败的可能性也会增加。检查点可以将系统恢复到稳定状态,这样处理就可以在不重新计算结果的情况下继续进行。

一些实现
GNU/Linux世界提供了各种集群软件;对于应用程序集群,有distcc和MPICH。Linux Virtual Server, Linux-HA等基于导向器的集群,允许传入的服务请求分布在多个集群节点上。MOSIX、LinuxPMI、Kerrighed、OpenSSI都是集成到内核中的成熟集群,它们可在同类节点之间自动进行进程迁移。OpenSSI、openMosix和Kerrighed是单系统映像实现。

基于Windows Server平台的Microsoft Windows计算机群集Server 2003为高性能计算提供了诸如Job Scheduler、MSMPI库和管理工具。

gLite是(EGEE)创建的一组中间件技术。

slurm还用于调度和管理一些最大的超级计算机集群(参见top500列表)。

其他方法
尽管大多数计算机集群都是永久性的,但是人们已经尝试用来为特定的计算构建短期集群。不过,更大规模的系统(如基于BOINC的系统)的追随者更多。

参见
参考资料
延伸阅读
*
*
*
*
*

外部链接

评论 (0)

  • 还没有评论,来抢沙发吧。