Linux高性能计算集群 -- Beowulf集群
1 集群
1.1 什么是集群
简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群系统的节点。
1.2 为什么需要集群
集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发。由于主要用于科学工程计算,所以这些系统并不为大家所熟知。直到Linux集群的出现,集群的概念才得以广为传播。
对集群的研究起源于集群系统的良好的性能可扩展性(scalability)。提高CPU主频和总线带宽是最初提供计算机性能的主要手段。但是这一手段对系统性能的提供是有限的。接着人们通过增加CPU个数和内存容量来提高性能,于是出现了向量机,对称多处理机(SMP)等。但是当CPU的个数超过某一阈值,象SMP这些多处理机系统的可扩展性就变的极差。主要瓶颈在于CPU访问内存的带宽并不能随着CPU个数的增加而有效增长。与SMP相反,集群系统的性能随着CPU个数的增加几乎是线性变化的。图1显示了这中情况。
图1. 几种计算机系统的可扩展性
集群系统的优点并不仅在于此。下面列举了集群系统的主要优点:
1. 高可扩展性:如上所述。
2. 高可用性:集群中的一个节点失效,它的任务可以传递给其他节点。可以有效防止单点失效。
3. 高性能:负载平衡集群允许系统同时接入更多的用户。
4. 高性价比:可以采用廉价的符合工业标准的硬件构造高性能的系统。
1.2.1 集群系统的分类
虽然 根据集群系统的不同特征可以有多种分类方法,但是一般我们把集群系统分为两类:
2 高可用集群
2.1 什么是高可用性
计算机系统的可用性(availability)是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的。工程上通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:
MTTF/(MTTF+MTTR)*100%
业界根据可用性把计算机系统分为如下几类:
可用比例 |
年停机时间 |
可用性分类 |
99.5 |
3.7天 |
常规系统(Conventional) |
99.9 |
8.8小时 |
可用系统(Available) |
99.99 |
52.6分钟 |
高可用系统(Highly Available) |
99.999 |
5.3分钟 |
Fault Resilient |
99.9999 |
32秒 |
Fault Tolerant |
表1. 系统可用性分类
对于关键业务,停机通常是灾难性的。因为停机带来的损失也是巨大的。下面的统计数字列举了不同类型企业应用系统停机所带来的损失。
应用系统 |
每分钟损失(美元) |
呼叫中心(Call Center) |
27000 |
企业资源计划(ERP)系统 |
13000 |
供应链管理(SCM)系统 |
11000 |
电子商务(eCommerce)系统 |
10000 |
客户服务(Customer Service Center)系统 |
27000 |
表 2. 停机给企业带来的损失
随着企业越来越依赖于信息技术,由于系统停机而带来的损失也越拉越大。
2.2 高可用集群
高可用集群就是采用集群技术来实现计算机系统的高可用性。高可用集群通常有两种工作方式:
关于高可用集群的讨论很多,这里就不进行深入的阐述了。
3 高性能计算集群
3.1 什么是高性能计算集群
简单的说,高性能计算(High-Performance Computing)是计算机科学的一个分支,它致力于开发超级计算机,研究并行算法和开发相关软件。高性能计算主要研究如下两类问题:
顾名思义,高性能集群就是采用集群技术来研究高性能计算。
3.2 高性能计算分类
高性能计算的分类方法很多。这里从并行任务间的关系角度来对高性能计算分类。
3.2.1 高吞吐计算(High-throughput Computing)
有一类高性能计算,可以把它分成若干可以并行的子任务,而且各个子任务彼此间没有什么关联。象在家搜寻外星人( SETI@HOME -- Searchfor Extraterrestrial Intelligence at Home )就是这一类型应用。这一项目是利用Internet上的闲置的计算资源来搜寻外星人。SETI项目的服务器将一组数据和数据模式发给Internet上参加SETI的计算节点,计算节点在给定的数据上用给定的模式进行搜索,然后将搜索的结果发给服务器。服务器负责将从各个计算节点返回的数据汇集成完整的数据。因为这种类型应用的一个共同特征是在海量数据上搜索某些模式,所以把这类计算称为高吞吐计算。所谓的Internet计算都属于这一类。按照Flynn的分类,高吞吐计算属于SIMD(Single Instruction/Multiple Data)的范畴。
3.2.2 分布计算(Distributed Computing)
另一类计算刚好和高吞吐计算相反,它们虽然可以给分成若干并行的子任务,但是子任务间联系很紧密,需要大量的数据交换。按照Flynn的分类,分布式的高性能计算属于MIMD(Multiple Instruction/Multiple Data)的范畴。
3.3 Linux高性能集群系统
当论及Linux高性能集群时,许多人的第一反映就是Beowulf。起初,Beowulf只是一个著名的科学计算集群系统。以后的很多集群都采用Beowulf类似的架构,所以,实际上,现在Beowulf已经成为一类广为接受的高性能集群的类型。尽管名称各异,很多集群系统都是Beowulf集群的衍生物。当然也存在有别于Beowulf的集群系统,COW和Mosix就是另两类著名的集群系统。
3.3.1 Beowulf集群
简单的说,Beowulf是一种能够将多台计算机用于并行计算的体系结构。通常Beowulf系统由通过以太网或其他网络连接的多个计算节点和管理节点构成。管理节点控制整个集群系统,同时为计算节点提供文件服务和对外的网络连接。它使用的是常见的硬件设备,象普通PC、以太网卡和集线器。它很少使用特别定制的硬件和特殊的设备。Beowulf集群的软件也是随处可见的,象Linux、PVM和MPI。
本文的以后几部分将详细介绍Beowulf集群系统的硬件、网络、软件和应用体系结构。
3.3.2 Beowulf集群和COW集群
象Beowulf一样,COW(Cluster Of Workstation)也是由最常见的硬件设备和软件系统搭建而成。通常也是由一个控制节点和多个计算节点构成。COW和Beowulf的主要区别在于:
1. COW中的计算节点主要都是闲置的计算资源,如办公室中的桌面工作站,它们就是普通的PC,采用普通的局域网进行连接。因为这些计算节点白天会作为工作站使用,所以主要的集群计算发生在晚上和周末等空闲时间。而Beowulf中的计算节点都是专职于并行计算,并且进行了性能优化。它们采用高速网(Myrinet或Giganet)上的消息传递(PVM或MPI)进行进程间通信(IPC)。
2. 因为COW中的计算节点主要的目的是桌面应用,所以它们都具有显示器、键盘和鼠标等外设。而Beowulf的计算节点通常没有这些外设,对这些计算节点的访问通常是在管理节点上通过网络或串口线实现的。
3. 因为连接COW中计算节点的通常是普通的局域网,所以COW上的高性能应用通常是象SETI@HOME 这样的SIMD的高吞吐计算。而Beowulf无论从硬件、网络和软件上都对需要频繁交换数据的MIMD应用做了特别的优化。
3.3.3 Mosix集群
实际上把Mosix集群放在高性能集群这一节是相当牵强的,但是和Beowulf等其他集群相比, Mosix集群确实是种非常特别的集群, 它致力于在Linux系统上实现集群系统的单一系统映象SSI(Single System Image)。Mosix集群将网络上运行Linux的计算机连接成一个集群系统。系统自动均衡节点间的负载。因为Mosix是在Linux系统内核中实现的集群,所以用户态的应用程序不需要任何修改就可以在Mosix集群上运行。通常用户很少会注意到Linux和Mosix的差别。对于他来说,Mosix集群就是运行Linux的一台PC。尽管现在存在着不少的问题,Mosix始终是引人注目的集群系统。
4.1 什么是Beowulf集群
Beowulf是现存的最古老的英语史诗:
Famed was this Beowulf: far ewthe boast of him, son of Scyld, in the Scandian lands. So becomes it a youth toquit him well with his father's friends, by fee and gift, that to aid him,aged, in after days, come warriors willing, should war draw nigh, liegemenloyal: by lauded deeds shall an earl have honor in every clan.
它歌颂了一个英雄,他拥有强壮的体魄和无人伦比的勇气。他最终战胜了魔鬼Grendel. 你可以在http://legends.dm.net/beowulf/index.html找到这首史诗。
我们所说的Beowulf首先是一个象史诗中英雄一样强大的集群系统。在1994年夏季,Thomas Sterling和Don Becker在CESDIS(The Center ofExcellence in Space Data and Information Sciences)用16个节点和以太网组成了一个计算机集群系统,并将这个系统命名为Beowulf。Beowulf集群。Beowulf集群提供了一种使用COTS(Commodity off the shelf)硬件构造集群系统以满足特殊的计算需求的方法。这里的COTS是指象PC和以太网这种广为应用的标准设备,它们通常可以由多家厂商提供,所以通常有很高的性价比。Beowulf集群这种方法很快从NASA传遍了整个科研机构和社团。实际上,Beowulf集群现在已被人们看作高性能计算中的一个分支或流派。
因为几乎每个Beowulf集群的设计者都有自己的Beowulf集群的定义,恐怕很难给Beowulf集群下一个确切的定义。一些人认为只有那些采用和原始的Beowulf集群系统一样方法构建的系统才叫Beowulf集群。而另一些人则认为凡是能够在多个工作站上运行并行代码的系统都称为Beowulf集群。这里我们只是列举多数Beowulf集群具有的特征作为Beowulf集群的定义:
4.2 Beowulf集群的分类
由于一些特殊的目的如系统性能,有些Beowulf集群系统也采用一些用户定制的设备(它们通常由一家厂商提供)。为了区分这些特殊的系统,通常把Beowulf分为两大类:
4.2.1 第一类Beowulf集群(CLASS I Beowulf)
这一类Beowulf集群全部由COTS设备组成。第一类Beowulf系统的优点是:
当然第一类Beowulf集群的缺点也是非常显然的。由于所采用的硬件都没有经过性能优化,所以其很难达到很好的性能。比如,由于以太网的高延迟和低带宽使得集群系统中消息传递很难达到MIMD应用的需求,从而使整个集群系统的计算能力大打折扣。
4.2.2 第二类Beowulf集群(CLASS II Beowulf)
第二类Beowulf集群是指那些采用了用户定制设备的Beowulf集群。这类集群系统最大优点是具有很好的性能。例如,采用Myrinet作为集群系统的IPC网络可以极大地提供进程间消息传递延迟和速度。当然它的缺点就是依赖于单个硬件提供商而且价格高昂。
不能说,哪一类集群绝对优于另一类集群。这依赖于你的集群系统的需求和预算。
4.3 Beowulf集群体系结构
如上所述,现实中存在形形色色的Beowulf集群。虽然它们都是原始Beowulf集群的衍生物,但是它们的体系结构也存在各种各样微小的差异。本文以IBM eServerCluster 1300为例来阐述Beowulf集群体系结构和系统组成。
图1是Cluster 1300上Beowulf集群的系统视图。无论是管理节点(Master Node)和计算节点都是Intel IA32架构的xSeries PC服务器。它们通过网络(以太网和Myrinet)相连接。所有的节点都运行Linux操作系统。运行在计算节点上的并行应用程序采用MPI进行完成并行进程间的通信。计算节点通过管理节点和外部LAN相连。整个集群系统都在一套集群管理工具监控之下。
图 2 是 Cluster 1300上Beowulf集群的组件视图。它揭示了Beowulf集群的组成部分。通常Beowulf集群由四个层次构成:
本文的下面三个小节将分别介绍这四个层次。而本系列文章的后面两片将更详细的介绍它们。
4.3.1 Beowulf集群硬件和网络
Beowulf集群硬件和网络层次需要解决的问题是如何组织硬件使其达到最高的性价比。为了达到很好的性价比,Beowulf通常采用廉价的COTS硬件。当然有时为了提供某些关键的性能,也会使用一些特殊的设备。
从硬件组织的角度说,Beowulf集群中的节点都是非共享内存的计算机,它们通过消息传递进行通信。实际上,我们还有其他组织硬件完成并行计算的方式。
简单地说,有两种组织硬件完成并行计算的方法:
当然也存在将多个本地或共享内存计算机相连并创造一个混和的共享内存计算机系统的可能。但在最终用户看来,这种计算机系统就好像一个大型的共享内存计算机。这种技术被我们叫做非一致内存访问NUMA(Non Uniform Memory Access)。但是从底层说,一个NUMA计算机系统必须在节点间传递消息。
当然也可以将共享内存计算机作为一个本地内存的计算机连入一个Beowulf集群系统。由于Linux系统支持SMP计算机,所以Linux系统本身能够在SMP中的多个CPU上调度作业。所以Beowulf集群本身就没有必要识别集群的节点是不是共享内存计算机了。
和SMP系统相比,集群系统有明显的优点。关于这一点请参阅本系列文章的第一篇。
因为Beowulf集群采用消息传递完成并行程序间通信,所以网络传输成了系统的瓶颈。在实际的系统中,通常采用有两套彼此的独立的网络设备。一套是普通的以太网,用于象系统管理和文件服务等普通的网络通信。另一套网络是用于进程间通信的高速网,象Myrinet和Giganet。和100M以太网相比,这类网络具有低延迟和高带宽的特性。
还有三类设备虽然不是必须,但是对于集群管理却是非常重要的:
4.3.2 Beowulf集群软件
Beowulf集群在软件层次面临的问题是如何在硬件层次上获得最大的性能。通常,Beowulf集群采用Linux+MPI的方式支持并行计算。MPI是采用消息传递的方式实现并行程序间通信。虽然也可以采用其他的通信方法,但是消息传递模式是最适合于集群系统的。简单地说,有两种在并行程序间传递并发的方法:
其他的方法也存在,但是这两种方法应用得最广泛。虽然存在效率和移植的问题,这两种方法都可以在SMP,NUMA和Cluster上实现。
消息传递需要在CPU间拷贝数据,而线程却可以在CPU间共享数据。数据拷贝的速度和延迟是影响消息传递效率的最关键的因素。PVM和MPI是最常用的两种消息传递API。消息传递也可以在线程上实现,并且消息传递即可以用于集群系统,也可以用于SMP系统。和线程相比,在SMP系统上使用消息传递的优点在于可以很方便的把SMP上的应用移植到集群系统上。
线程的最大特点是,线程间是共享数据。因此它在SMP系统上工作的更好。而且Linux本身也是支持Posix线程的。但是使用线程的最大缺点在于,很难将线程扩展到SMP系统以外。虽然NUMA技术可以高效的做到这一点,但是那非常昂贵而且Linux本身也不支持。
下表概括了线程和消息传递在SMP和集群系统上的比较:
|
SMP系统性能 |
集群系统性能 |
扩展性 |
消息传递 |
好 |
很好 |
很好 |
线程 |
很好 |
差* |
差 |
*需要昂贵的NUMA技术
4.3.3 Beowulf集群应用
Beowulf集群的应用层次位于硬件和软件层次之上。它要解决的问题是如何在实际的集群系统中并行化(PARALLEL)应用中的并发(CONCURRENT)部分,从而使集群上的应用达到最好的性能。
在阐述这部分之前,我们需要区分两个概念: PARALLEL和CONCURRENT。程序的并发(CONCURRENT)部分是指程序中可以独立计算的部分。程序的并行(PARALLEL)部分是指程序中在同一时间被分别执行的并发(CONCURRENT)部分。
它们的区别是很重要的。并发是程序本身的属性,而并行是计算机系统的属性。并行的目的是获得很好的性能。限制并行性能的因素是计算节点间通信的速度和延迟。大部分的Benchmark都有很高的并行性并且通信和延迟不是什么瓶颈。但是其他应用却没有这么简单。对于这些应用,有时候使并发部分并行执行反而可能使应用性能更低。简单的说,除非附加的通信时间代价小于并发节约的计算时间,否则并行执行反而会降低效率。
程序员的任务就是决定哪些并发的部分需要并行执行,而哪些不应该并行执行。这些决定最终会影响应用程序的执行效率。图3描述了实际应用中程序并发部分和通信计算时间比的关系。
在理想的系统中,通信计算时间比应该是恒定的。任何并发部分都应该实现为并行。不幸的是,实际的系统,包括SMP系统,都是图3所示的那样。所以在设计Beowulf集群应用时,必须认识到并发带来的效率依赖于在该系统上通信处理时间比。也正是因为这个原因,虽然可以把应用移植到另一个并发系统上,但是并不能保证应用在被移植的系统上仍然是高效的。一般来说,不存在可移植的且高效的应用程序。
同样的道理,使用更快的CPU也可能使你的应用变慢。
5.1 Beowulf集群硬件和网络体系结构
图 1是Cluster 1300的硬件和网络体系结构图。从图中可以看出,整个系统由5类计算或网络设备和5类网络组成。这5类设备是:
5类网络是:
本文的以下部分将介绍这些设备和网络的角色,功能和一般的配置。
5.2 Beowulf集群中的节点
这一节主要介绍Beowulf集群中的节点,节点的类型和相应的功能。根据功能,我们可以把集群中的节点划分为6种类型:
虽然由多种类型的节点,但并不是说一台计算机只能是一种类型的节点。一台计算机所扮演的节点类型要由集群的实际需求和计算机的配置决定。在小型集群系统中,用户节点、控制节点、管理节点、存储节点和安装节点往往就是同一台计算机。下面我们分别解释这些类型节点的作用。
5.2.1 用户节点(User Node)
用户节点是外部世界访问集群系统的网关。用户通常登录到这个节点上编译并运行作业。
用户节点是外部访问集群系统强大计算或存储能力的唯一入口,是整个系统的关键点。为了保证用户节点的高可用性,应该采用硬件冗余的容错方法,如采用双机热备份。至少应该采用RAID(Redundant Arrayof Independent Disks)技术保证用户节点的数据安全性。
5.2.2 控制节点(Control Node)
控制节点主要承担两种任务
通常控制节点是计算网络中的关键点,如果它失效,所有的计算节点都会失效。所以控制节点也应该有硬件冗余保护。
5.2.3 管理节点(Management Node)
管理节点是集群系统各种管理措施的控制节点:
5.2.4 存储节点(Storage Node)
如果集群系统的应用运行需要大量的数据,还需要一个存储节点。顾名思义,存储节点就是集群系统的数据存储器和数据服务器。如果需要存储TB级的数据,一个存储节点是不够的。这时候你需要一个存储网络。通常存储节点需要如下配置:
5.2.5 安装节点(Installation Node)
安装节点提供安装集群系统的各种软件,包括操作系统、各种运行库、管理软件和应用。它还必须开放文件服务,如FTP或NFS。
5.2.6 计算节点
计算节点是整个集群系统的计算核心。它的功能就是执行计算。你需要根据你的需要和预算来决定采用什么样的配置。理想的说,最好一个计算节点一个CPU。但是如果考虑到预算限制,也可以采用SMP。从性价比角度说,两个CPU的SMP优于3或4个CPU的SMP机器。
因为一个计算节点的失效通常不会影响其他节点,所以计算节点不需要冗余的硬件保护。
5.2.7 集群中节点的部署
虽然由多种类型的节点,但并不是说一台计算机只能是一种类型的节点。一台计算机所扮演的节点类型要由集群的实际需求和计算机的配置决定。在小型集群系统中,用户节点、控制节点、管理节点、存储节点和安装节点往往就是同一台计算机,这台计算机通常成为主节点(Master Node)。在这种情况下,集群就是由多个计算节点和一个主节点构成。
在大型的集群系统中如何部署这些节点是个比较复杂的问题,通常要综合应用需求,拓扑结构和预算等因素决定。
5.3 Beowulf集群的网络结构
5.3.1 集群中的网络技术
因为计算节点间的通信需求,IPC网络的性能是Beowulf集群设计中非常重要的话题。由于应用的需求,通常需要高带宽、速度和低延迟的网络。Beowulf集群的主要瓶颈通常也在于双工的网络通信,延迟和全局同步。
有好几种网络技术可以用于IPC网络。它们是快速以太网、千兆以太网和Myrinet。为了达到高带宽,通常需要采用交换机。交换机接受从双绞线传来的数据包,但是它和集线器不一样。它不向所有连接的节点广播这个数据包,它会根据目的地址哪个端口是接受者,然后把这个包传给接受者。
5.3.2 Beowulf集群网络拓扑
如上所述,通常Beowulf集群系统中有5类网络。其中Service Processor网络是以太网连接起来的菊花链结构,Terminal网络是计算节点和Terminal Server通过串口线连接起来的星形结构。管理网络、集群网络和IPC网络则是通过交换机相连的。虽然可以把这三个网络配置在一个网段,但是通常我们把它们分化在三个虚拟网中(VLAN)。图2是Beowulf集群网络结构。
5.3.2.1 管理网络(Management VLAN)
管理网络用于访问IPC网络交换机、Service Processor网络和Terminal Server。HTTP、Telnet和SNMP等协议被用来管理这些设备。
5.3.2.2 集群网络(Cluster VLAN)
计算节点和存储节点用这个网络进行通常的网络I/O。
5.3.2.3 IPC网络(IPC VLAN)
用于计算节点间的高速通信。通常由特殊的高速网络设备构成。
5.3.2.4 Service Processor网络
以太网连接起来的菊花链结构,用于系统管理目的。
5.3.2.5 Terminal网络
Terminal网络是计算节点和Terminal Server通过串口线连接起来的星形结构。Terminal Server是外界访问这个网络的接口。管理节点通过Terminal Server虚拟出来的终端可以登录到其他节点上完成必要的管理工作。
5.3.2.6 KVM网络
KVM网络是KVM Switch和各节点连接的星形网络。其实把KVM网络称为一个网络并恰当。KVM是指Keyboard、Video和Mouse。通过KVM Switch的切换,管理员可以在管理各个节点。
5.5.4附录:一个Cluster 1300集群系统的配置清单
Qty .P/N Description
IBM Products
Compute Nodes
4 865431Y xSeries330 1000 256 256/OPEN 24X
4 37L7202 18.2GBUltra160 HDD
4 10K3806 866Mhz 133MHz 256K
12 33L3144 256MB133MHz ECC SDRAM RDIMM MEMORY
1 06P4792 C2TCable Kit
Management Node
1 86564RY xSeries340,866Mhz,128Mb
1 19k4630 866Mhz 133MHz 256K
4 33L3144 256MB133MHz ECC SDRAM RDIMM MEMORY
1 37L6091 ServeRAID4L LVD SCSI Adapter
3 37L7202 18.2GB7200rpm Ultra160 SCSI Hot-Swap SL H
1 34L1501 Netfinity10/100 Ethernet PCI Adapter 2
1 34L0301 NetfinityGigabit Ethernet SX Adapter
1 37L6880 270WRedundant HS Power Supply
Shared Resources
1 9306200 Netbay22 Half Rack
1 3619702 Netbay22 Rack Extension Kit
1 9411AG1 Monitor(flatpanel)
1 L6888 Flatpanelrack mount kit
1 09N4291 8x2Console Switch (KVM Switch)
2 94G7447 ConsoleCable Set 12ft (to KVM switch)
1 28L3644 SpacesaverKeyboard/trackpoint
1 28L4707 Keyboardtray
2 37L6866 NetbayUniversal Voltage PDU
1 01K7209 ASMAAdapter (Wiseman card)
1 36L9973 1MFibre Channel Cable
1 03K9308 ShortWave GBIC (Gigabit module)
Equinox Products
1 990209 EquinoxELS-16
1 210059 Micro-Transceiver,AUI (DB-15)to 10BaseT
1 790091 ELSRackmount kit
4 210062 EquinoxSerial Adapters
4 690226 10'SerialCables
Myrinet Networking Products
1 M3-E16 Myrinet20003-slot Chassis
1 M3-M ManagementModule
4 M3S-CB-5M Myricom MyrinetLAN cables
4 M3S-PCI64B-2 Myrinet LAN Card
1 M3SW16-8S Myrinet 8-portSerial modules
Miscellaneous Products
8 3'CAT5Cables
5 1'CAT5Cables
Extreme Networks Products
1 13020 Summit24-Full Layer 3-X
6.1 Beowulf集群软件结构
图1 是Beowulf集群的软件体系机构。一般来说,Beowulf集群由如下几个软件部分组成:
6.2 操作系统
并不是每种操作系统都适合高性能集群系统。理论上说,硬件的体系结构、操作系统的任务调度方式和IPC的方式是决定应用并行化效果的主要因素。根据这三个因素,我们可以归纳出如下5种实施应用并行化的平台:
Beowulf集群使用第5种类型平台。它可以由SMP和PC服务器组成,以Linux为操作系统,以MPI或PVM这种消息传递方式作为通信方法。
6.3 文件系统
文件系统是操作系统的重要组成部分,用于存储程序和数据。如何在各节点间高效、一致和简捷的实现数据共享是集群系统对文件系统提出的挑战。
6.3.1 集群和文件系统
很明显,那种仅能管理本地存储的文件系统(如EXT和FAT)是无法满足集群系统对文件共享的要求的。在集群环境下,最容易想到,也是最容易实现的文件系统就是分布式文件系统。相当于本地文件系统,分布式文件系统有如下优点:
分布式文件系统可以使集群的节点间简捷地实现共享。但是为了提供性能,分布式文件系统通常需要使用本地的缓存(Cache), 所以它很难保证数据在集群系统范围的一致性。而且往往分布式文件系统中只有一份数据,所以很容易发生单点失效。
建立在共享磁盘(Share-Disk)上的并行文件系统可以克服分布式文件系统的这些缺点。通过使用在节点共享的存储设备,并行文件系统具有很多优点:
6.3.2 集群中的数据共享形式
下面通过给出几个集群中使用具体的数据共享的方法。其中rsync是建立在本地文件系统之上,NFS和Inteemezzo属于分布式文件系统(确切的说,NFS只是网络文件系统),GFS属于并行文件系统,而Backend-database则属于不同于文件共享的另一种形式的共享。
6.3.2.1 rsync
rsync是一种简单的文件共享实现方式。集群中的每个节点都有一份数据复本,复本间使用rsync进行同步。因为节点需要的数据就在本地,所以这种方法具有很高的可用性,不会出现单点失效现象。
如果需要的共享的数据量很小,而且很少更新时,可以采用这种方式。静态网页和小的FTP站点的可以使用这种共享方式。
6.3.2.2 NFS
这也是一种容易实现的方式。存储节点通过NFS将自己本地的文件输出,其他节点则把存储节点输出的文件系统mount到本地文件系统。NFS方式的存在两个很大的缺点:
当然使用多个互为备份的NFS服务器可以改善性能和避免单点失效,但是这样又会带来如何实时保持备份服务器间数据一致性的问题。 NFS方式适合于共享访问数据量不大的小型集群系统。
6.3.2.3 GFS
GFS(Global File System)实现了存储设备的网络共享。这些存储设备可以是共享SCSI(Shared SCSI)和共享通道(Fibre Channel - FC)。GFS包装这些存储设备使得它们好像节点本地的文件系统。GFS的主要优点在于:
GFS可以将物理上分离的存储设备虚拟为一个存储而且能平衡访问负载。GFS还实现了文件锁和实时文件系统。
6.3.2.4 Intermezzo
Intermezzo实现了一个分布式的文件系统。它采用客户/服务器模式。服务器拥有权威的数据,客户节点仅有本地缓冲的版本。它们通过普通的网络进行同步。Intermezzo支持断开连接下文件操作。在下次恢复连接时,它会集成本地的改动到服务器上。Intermezzo拥有象GFS一样的可用性和可扩展性。但是它无法保证数据的实时一致性。
6.3.2.5 Backend Database
基于后端数据库的共享是完全不同于文件共享的方式。后端数据库系统解决了数据的一致性、性能、可用性和可扩展性问题。但是数据库的访问方法要比文件访问复杂的多。
6.4 并行化应用程序
并行化应用程序,使其更高效的运行是使用Beowulf集群系统的最终目的。一般说,并行化应用程序分为三个步骤:
在并行化应用程序的过程中,需要开发环境、并行开发库和各种工具的支持。这些软件都是Beowulf集群软件体系结构中重要的组成部分。
6.4.1 确定应用程序的并发部分
从实用的角度说,应用程序有两种类型的并发:计算和I/O。尽管在多数情况下这两者是正交的,但是也存在一些应用同时需要这两种并发性。有一些工具可以用来帮助分析应用程序的并发,而且通常这些工具都是专门为Fortran设计的。
6.4.2 分析并行的效率
分析并行的效率是并行化应用程序中很重要的一个步骤。正确的分析并行的效率可以帮助你在有限的经费下最大化应用的执行效率。往往Beowulf集群的需要和应用的需要有些许的差别。比如,CPU消耗型的应用往往需要的是稍微快一点的CPU和高速低延迟的网络,而I/O消耗型的应用需要的是稍微慢一点的CPU和快速以太网。
如果没有分析工具,你只能使用猜测和估计的办法完成这一步骤。一般来说,如果在应用的一部分中,计算的时间是分钟级而数据传输的时间是秒级,那么这一部分可以并行执行。但是如果并行后计算时间降到秒级,你就需要实际测量一下再做权衡。
另外,对于I/O消耗型的应用,Eadline-Dedkov法则对你做决定有些帮助:如果两个并行系统具有相同的CPU指标,慢CPU和相应具有低速CPU间通信网络的系统反而具有较好的性能。
6.4.3 实现应用程序的并发
有两种方法去实现应用程序的并发:显式并发和隐式并发。
6.4.3.1 显式并行化
显式并行化是指由开发者决定程序的并行。开发者通过在程序中增加PVM或MPI消息,或者增加程序执行的线程从而达到程序的并行化。显式并行化通常难以实现和调试。为了简化显式并行化,某些开发库中增加了一些函数用于简化标准并行方法的实现。另外也有专门用于调试并行程序的工具。TotoalView(http://www.etnus.com/Products/TotalView/index.html)就是一个源码级的C、C++和Fortran调试工具。它拥有方便的图形化界面,可以用于调试多线程、多进程和集群应用程序。
6.4.3.2 隐式并行化
隐式并行化是由编译器来决定程序的并行性,高性能Fortran就是这类编译器。隐式并行化中,程序开发者向编译器提供一些程序并行的特征,编译器根据这些特征做出程序并行化的决定。通常编译器可以给并行应用提供一定程度的效率和移植性,但是不是最好的。
6.5 作业管理(资源管理)
从用户角度看,集群系统就好像一台服务器或者PC。很多用户可以同时使用这个系统。但是当太多的用户使用集群系统时,系统性能会很差。资源管理就是管理用户提交的作业,合理给各个作业分配资源从而保证集群系统高效运行。作业管理通常由资源管理器和作业调度策略器组成。
6.6 系统管理
从系统组成角度说,集群系统是由多台计算机组成的超级计算机。但是从最终用户看来,集群系统是一台计算机,也就是说,集群系统的构成对用户是透明的。所以集群系统的管理的目的就是让集群系统象一台计算机一样利于管理。归纳起来,集群系统管理一般完成如下任务:
7.1 集群作业管理
从用户角度看,集群系统就好像一台服务器或者PC。很多用户可以同时使用这个系统。但是当太多的用户使用集群系统时,系统性能会变得很差。资源管理就是管理用户提交的作业,合理给各个作业分配资源从而确保充分利用集群系统计算能力并尽可能快的得到运算结果。简单的说,集群资源由实现如下几个部分:
7.2 Beowulf集群中的作业管理软件
有很多种选择去管理集群系统中的资源。其中PBS资源管理器和Maui作业调度器最适合集群系统。
7.2.1 PBS
PBS(Portable Batch System)是由NASA开发的灵活的批处理系统。它被用于集群系统、超级计算机和大规模并行系统。PBS主要有如下特征:
OpenPBS(http://www.OpenPBS.org/)是PBS的Open Source的实现。商业版本的PBS可以参照:http://www.pbspro.com/。
7.2.2 Maui
Maui是一个高级的作业调度器。它采用积极的调度策略优化资源的利用和减少作业的响应时间。Maui的资源和负载管理允许高级的参数配置:作业优先级(Job Priority)、调度和分配(Scheduling and Allocation)、公平性和公平共享(Fairness and Fairshare)和预留策略(Reservation Policy)。Maui的QoS机制允许资源和服务的直接传递、策略解除(Policy Exemption)和指定特征的受限访问。Maui采用高级的资源预留架构可以保证精确控制资源何时、何地、被谁、怎样使用。Maui的预留架构完全支持非入侵式的元调度。
Maui的设计得益于世界最大的高性能计算中心的经验。Maui本身也提供测试工具和模拟器用于估计和调节系统性能。
Maui需要资源管理器与其配合使用。我们可以把Maui想象为PBS中的一个插入部件。
更多Maui的信息可以访问:http://www.supercluster.org
7.3 集群系统管理
从系统组成角度说,集群系统是由多台计算机组成的超级计算机。但是从最终用户看来,集群系统是一台计算机,也就是说,集群系统的构成对用户是透明的。所以集群系统的管理的目的就是让集群系统象一台计算机一样利于管理。归纳起来,集群系统管理一般完成如下任务:
7.3.1 资源管理
简单地说,资源管理就是分配系统的资源和监控系统资源的使用状态。这里的资源是个很广泛的概念,各种硬件设备、数据和程序都可以看成资源:如CPU、存储、网卡,甚至系统的事件和log。
7.3.2 事件服务
事件(Event)就是系统的状态的一次变化。如"CPU的利用率超过90%"就可以理解为一次事件。简单的说,事件服务就是事件通知服务,也就是当一次事件发生时,通知对这类事件感兴趣的个体这个事件发生了。事件服务可以分为Push(也称为Subscribe-Publish)和Pull方式。系统管理员还应该能够通过事件服务设置系统对事件的自动响应。
7.3.3 分布式命令和文件
分布式命令和文件是指让命令和文件操作同时在整个集群结点或指定的一组结点上并行执行。
分布式命令功能通常通过分布式的Shell来提供。这种Shell一般叫做dsh(distributed shell)或 psh ( parallel shell)。你可以通过rsh或ssh来实现分布式Shell。
分布式文件主要用于指集群中配置文件的同步。集群系统实际上是由多个结点组成,所以对集群系统的一个配置需要发布到每个结点(或一组结点)。比如,需要配置每个结点上的Apache都支持CGI,就需要把/etc/httpd下的配置文件发布到每个结点的/etc/httpd中。简单地说,集群系统地配置管理就是把一个或多个配置文件发布到指定的结点上。有很多开放源码的工具可以帮助完成集群系统的分布式文件功能,如rdist和cfengine。
7.3.4 监控和诊断
对持续运行的集群系统而言,当系统正常运行时,你需要一些工具监控系统各部分的运行状态,如系统进程、CPU利用率和内存利用率等。在普通的Unix系统上,你可以简单的用ps和top实现这些功能。但是在集群系统中,你确实需要一些特殊工具,而且最好系统的监控可以支持多种网络管理协议,如SNMP和WBEM。当集群系统工作不正常时,你则需要另外一些工具来协助系统诊断。如当系统某个不服务时,你可能需要用ping诊断是不是网络出了问题。而当时多个结点服务时,你则需要并发的ping来诊断是不是网络错误。
7.3.5 硬件控制
PC机上很简单的管理功能对于集群系统而言可能会很难做到。比如让一组结点重启,就很难手工完成。所以集群系统需要一些特殊的硬件设备完成这些功能。下面是几个需要硬件支持特殊管理功能:
7.3.6 系统安装
集群系统的安装主要是指在各个结点上安装操作系统、文件系统、并行程序运行库、作业管理软件和系统管理软件等。它是集群系统投入应用的前提,所以集群系统的安装是一件非常重要的任务。一般集群系统由几十台,甚至上百上千台计算机组成,显然手工安装系统几乎是不可能的。一般集群系统的安装的机制是:
1. 网络启动:设置需要的安装的结点网络启动,然后管理结点远程重启需要安装的结点。网络启动的结点启动后从启动服务器获得一个小的操作系统内核。网络启动一般采用Intel的PXE(Pre-Execution Environment)标准。 PXELinux是支持PXE的网络启动服务器。它可以在网络启动的结点启动一个小的Linux核心并运行指定的Init程序。由Init程序负责后续的安装。
2. 网络安装:这个操作系统内核负责从安装服务器(通常是一个文件服务器)上取得安装软件包或系统镜像并在本地实施系统安装。有多种Linux工具可以完成基于网络的系统安装。这些工具中的典型代表是:KickStart、ALICE (Automatic Linux Installation and Configuration Environment)、SIS(System Install Suite)和PartImage。这些工具可以分为如下几类:
1. a. 基于Script的安装:这种安装方式中,安装过程由安装脚本(Script)控制,可以通过修改安装脚本来配置安装过程。这种安装方式中,安装服务器实际上是一个文件服务器,它向结点提供要安装的软件包。除了软件包不是来自本地外,这种安装方法和本地安装并没有太大的区别,本地安装的各个步骤(配置硬件、安装软件包、配置系统等)它都要经过。KickStart属于这中安装方法。基于Script的安装比较灵活,但是它是操作系统依赖型的。象KickStart只支持Redhat Linux。
2. b. 基于Imaging的安装:和基于Script的安装不同,基于Imaging的安装并不需要经过本地安装的各个步骤。它只需要把存储在文件服务上的需要安装的系统映象(Image)拷贝到本地的硬盘上。这个系统映象来源于一个已经安装和配置好的样机。Imaging的安装方式是独立于操作系统,但是它依赖于网络启动的操作系统内核支持的文件系统。Imaging的很大缺点是很难提供独立于操作系统的配置方法。PartImage属于Imaging安装方法。而SIS是Script和Imaging混合型的安装方式。SIS利用Linux的chroot命令在安装服务器的一个文件目录下安装一个虚拟的操作系统映象。同时SIS支持用户提供Shell脚本完成安装后的配置。
3. c. 基于Cloning的安装:和Imaging安装方式相同的是,Cloning安装也采用系统映象。但是Cloning中的系统映象是样机上硬盘分区的Clone。因此,Cloning安装不需要识别系统镜像中的文件系统类型。所以它是独立于文件系统的,它只依赖于操作系统内核支持的硬盘设备类型(IDE或SCSI)。和Imaging一样,Cloning的很大缺点是很难提供独立于操作系统的配置方法。而且相对于Imaging而言,Cloning效率更低。你可以简单的用dd命令实现Clone。
下表归纳了几种安装工具的特点:
安装工具 |
安装方法 |
支持的系统 |
支持的网络协议 |
KickStart |
Script |
Redhat Linux |
NFS、FTP |
SIS |
Script和Imaging混合 |
Redhat Linux |
rsync |
PartImage |
Imaging |
EXT2、FAT、NTFS、HPFS… |
私有协议 |
3.7 域管理
你可以简单的把集群系统的域管理理解为结点管理,它主要包括如下简单的功能:
实际上,我们也把作业管理纳入集群系统管理的任务。但是相对于其他系统管理任务而言,作业管理在集群系统中具有更重要的作用,而且通常的集群系统管理软件也不直接实现作业管理功能。所以我们把作业管理作为集群系统一个重要的软件部分,而不是集群系统管理的一项任务。
7.4 几种集群系统管理软件
集群系统管理软件和集群系统一样形形色色、多种多样。下面简要介绍几种集群系统管理软件并比较它们实现的功能。
7.4.1 IBM CSM
IBM CSM(Cluster Systems Management )是IBM eServer Cluster 1300上的系统管理软件。IBM的Linux集群战略的一部分就是把运行在RS/6000 SP平台上的PSSP软件移植到基于xSeries的Linux集群系统上。CSM大部分功能来源于SP平台,但是它也集成了WebSM 2000、xSeries、开放源码工具和其他技术。CSM是一款功能很全面的管理工具,而且还在不断的发展中。
7.4.2 XCAT
XCAT是用于IBM eServer Cluster 1300上的系统管理软件。它由Egan Ford开发。它基本上是由shell脚本写成,相当简捷。但是它实现了集群系统管理大部分的内容,是个非常出色的管理软件。
7.4.3 Mon
Mon在Linux平台上开发,但是也以运行在Solaris上而出名。Mon的服务器和客户都是基于perl开发的,所以很容易移植到其他UNIX和类UNIX平台。
下表比较了以上三种集群系统管理软件:
项目 |
CSM |
XCAT |
Mon |
支持的集群系统 |
IBM eServer Cluster 1300 |
IBM eServer Cluster 1300 |
不特定于某个集群系统 |
支持的操作系统 |
Redhat、SuSE |
Redhat,结点可以采用Imaging和Cloning安装其他操作系统,甚至于Windows |
在Linux上开发,但是以运行在Solaris而著名。很容易移植到其他Unix和非Unix操作系统上 |
资源管理 |
提供统一的、可扩展的,全面的资源管理,但是由于强大而使用起来很复杂。 |
基本没有 |
基本没有 |
事件服务 |
提供事件订阅发布机制,并预先定义了很多系统事件和对事件的响应 |
将来会于Mon集成以完成事件服务 |
支持 |
配置管理 |
支持 |
无 |
无 |
监控和诊断 |
支持分布式Shell(dsh)、支持SNMP |
支持并发Shell(psh)、并发ping(pping) |
支持SNMP |
硬件控制 |
远程电源管理(rpower)远程控制台(rconsole) |
远程电源管理(rpower) 远程控制台(rcon、wcon) |
无 |
系统安装 |
支持KickStart和SIS 支持PXE |
支持KickStart、Imaging和Cloning 支持PXE和etherboot |
无 |
域管理 |
全面 |
基本没有 |
基本没有 |
集成性 |
除了必须的开放源码软件包,不与任何其他软件集成。但是底层资源管理和事件服务提供编程接口,集成很方便。上层可以通过命令调用集成。 |
自动安装PBS、Maui、Myrinet和MPI。将来会支持 SgridEngine Scheduler |
基本没有,应该可以通过命令行集成 |
易用性 |
提供强大命令行工具和简单的GUI工具 |
命令行工具,将来会和Ganglia集成提供一定的GUI |
提供命令行和基于Web的工具 |
原文来源于developerworks上的多篇博客,作者金戈,IBM软件工程师,在IBM中国开发中心主持Linux集群系统开发工作。