本文是linux高性能集群系列文章的第一部分。这一部分介绍了集群系统的基本知识,并解释了两类主要的集群:高可用集群和高性能集群。本系列文章的后面几部分将围绕beowulf高性能集群展开。笔者先介绍beowulf集群的体系结构,然后陆续介绍beowulf集群的硬件、网络、软件和应用程序的部分的系统构成,最后集群系统管理软件。 1 集群 1.1 什么是集群 简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群系统的节点。 1.2 为什么需要集群 集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发。由于主要用于科学工程计算,所以这些系统并不为大家所熟知。直到linux集群的出现,集群的概念才得以广为传播。 对集群的研究起源于集群系统的良好的性能可扩展性(scalability)。提高cpu主频和总线带宽是最初提供计算机性能的主要手段。但是这一手段对系统性能的提供是有限的。接着人们通过增加cpu个数和内存容量来提高性能,于是出现了向量机,对称多处理机(smp)等。但是当cpu的个数超过某一阈值,象smp这些多处理机系统的可扩展性就变的极差。主要瓶颈在于cpu访问内存的带宽并不能随着cpu个数的增加而有效增长。与smp相反,集群系统的性能随着cpu个数的增加几乎是线性变化的。图1显示了这中情况。 集群系统的优点并不仅在于此。下面列举了集群系统的主要优点: 1.2.1 集群系统的分类 虽然 根据集群系统的不同特征可以有多种分类方法,但是一般我们把集群系统分为两类: 2 高可用集群 2.1 什么是高可用性 计算机系统的可用性(availability)是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的。工程上通常用平均无故障时间(mttf)来度量系统的可靠性,用平均维修时间(mttr)来度量系统的可维护性。于是可用性被定义为: 业界根据可用性把计算机系统分为如下几类: 对于关键业务,停机通常是灾难性的。因为停机带来的损失也是巨大的。下面的统计数字列举了不同类型企业应用系统停机所带来的损失。 随着企业越来越依赖于信息技术,由于系统停机而带来的损失也越拉越大。 2.2 高可用集群 高可用集群就是采用集群技术来实现计算机系统的高可用性。高可用集群通常有两种工作方式: 关于高可用集群的讨论很多,这里就不进行深入的阐述了。 3 高性能计算集群 3.1 什么是高性能计算集群 简单的说,高性能计算(high-performance computing)是计算机科学的一个分支,它致力于开发超级计算机,研究并行算法和开发相关软件。高性能计算主要研究如下两类问题: 顾名思义,高性能集群就是采用集群技术来研究高性能计算。 3.2 高性能计算分类 高性能计算的分类方法很多。这里从并行任务间的关系角度来对高性能计算分类。 3.2.1 高吞吐计算(high-throughput computing) 有一类高性能计算,可以把它分成若干可以并行的子任务,而且各个子任务彼此间没有什么关联。象在家搜寻外星人( seti@home -- search for extraterrestrial intelligence at home )就是这一类型应用。这一项目是利用inte.net上的闲置的计算资源来搜寻外星人。seti项目的服务器将一组数据和数据模式发给inte.net上参加seti的计算节点,计算节点在给定的数据上用给定的模式进行搜索,然后将搜索的结果发给服务器。服务器负责将从各个计算节点返回的数据汇集成完整的数据。因为这种类型应用的一个共同特征是在海量数据上搜索某些模式,所以把这类计算称为高吞吐计算。所谓的inte.net计算都属于这一类。按照 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的主要区别在于: 3.3.3 mosix集群 实际上把mosix集群放在高性能集群这一节是相当牵强的,但是和beowulf等其他集群相比, mosix集群确实是种非常特别的集群,它致力于在linux系统上实现集群系统的单一系统映象ssi(single system image)。mosix集群将网络上运行linux的计算机连接成一个集群系统。系统自动均衡节点间的负载。因为mosix是在linux系统内核中实现的集群,所以用户态的应用程序不需要任何修改就可以在mosix集群上运行。通常用户很少会注意到linux和mosix的差别。对于他来说, mosix集群就是运行linux的一台pc。尽管现在存在着不少的问题,mosix始终是引人注目的集群系统。
图1. 几种计算机系统的可扩展性 mttf/(mttf+mttr)*100%
可用比例
(percent availability)年停机时间
(downtime/year)可用性分类 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. 停机给企业带来的损失
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器