Beowulf
(本节资料主要来自http://www.beowulf.org/)
Beowulf应该说是最著名的集群技术了。使用Beowulf提供超级计算能力,可以比传统的超级计算机便宜70%。遗憾的是现在数据库还不能很好的支持Beowulf。
Beowulf运行于自由软件操作系统——如Linux或FreeBSD之上,由专用的高速网络连接PC或工作站,为了运行大型计算任务,与硬件平台无关的高性能、高并行的计算机集群技术。运行集群任务的Beowulf节点只通过一个节点连接到外部网络。
1994年夏天,Thomas Sterling和Don Becker建立了一个由以太网连接16个DX4处理器组成的集群,他们把它成为Beowulf,发展这台机器的努力就形成了今天的Beowulf项目。高性能计算机团体的研究者把使用此类技术的集群称为“Beowulf型集群计算机”。
为了提高Beowulf的性能,我们可以使用更高性能的CPU、使用具有更高性价比的网络技术。但是,我们并不需要改变软件系统,这是Beowulf最重要的特性。Beowulf使用公用软件,特别是Linux操作系统、GNU编译器和编程工具、MPI和PVM消息传递库,结合多年来并行算法的实践成果,使软件人员开发的系统软件在Beowulf上有很好的兼容性,而不必在乎到底使用什么CPU和网络技术。
Beowulf型集群计算机有几个精妙而意义重大的特性。首先,所有的集群中的节点作为整体运作,因为单个节点的执行不依赖于外界因素,有利于减弱载入平衡问题。其次,因为网络内的连接独立于外部网络,网络负载就由集群中运行的应用决定,这降低了NOW( Network of Workstation)中潜在的不可预知因素。在NOW中,必须注意网络安全。集群中所有的节点都处于集群的管理员权限,例如,集群的网络连接对于外部世界是不可见的,所以,唯一需要在处理器中鉴别的是系统的完整性。再次,因为集群任务不和用户直接交互,Beowulf比较适合粗粒度的任务。
Beowulf的软件要求
通常要使用Beowulf,需要使用MPI、PVM、socket或SysV的IPC将你的软件分解成并行的任务,并重新编译。如果你只是要将同一个程序按不同的输入文件运行1000遍,使用Shell脚本就行了。另外,多线程的程序在Beowulf上也许无法加速,因为多线程需要共享内存,而按照smp共享内存规范编写的程序在dsm机器上会有性能损失。
Extreme Linux
Extreme Linux 是基于Beowulf的Linux发布版。其目的是使用最新的CPU,构造适于计算科学研究的集群。
集群技术概述
Virtual Server
(本节资料主要来自http://www.linuxvirtualserver.org/,感谢章文嵩给予帮助)
Virtual Server 是由章文嵩提出的一种服务器集群技术,在linux.com和sourceforge.net等网站,以及世界上最大直销PC制造商的网站使用上。用章文嵩自己的话说:
virtual server = director + real_servers
所谓Virtual Server就是多个服务器形成集群,在外部网络看来就好像一台高速服务器似的。客户和服务的关系为:
所有的服务器的IP映射成一个IP
客户端只能看到一个IP地址
不同IP地址的服务器认为他们是与客户直接相连接的
从Virtual Server原理图可以看到,director(图中的load balancer )主要的工作是解决负载均衡的问题。当director检查到达的包时,它需要作如下工作:
新请求: 查找下一个服务器,再客户短语服务器之间建立入口,加入映射表中
建立连接: 向适当的服务器传送包
中断/暂停连接: 从映射表中删除入口
至于具体的服务响应则由隐藏在director后面的服务器提供。这些服务器之间可以通过三种方式连接。
基于IP地址伪装的网络地址转换技术——VS-NAT(Network Address Translation),因为NAT必须通过NAT服务器重写所有发往外部网络的包,所以NAT服务器就成为了瓶颈。
基于IP隧道技术——VS-TUN
直接路由——VS-DR,director只作、根据负载转发任务的工作
三种连接方式的特性比较如下:
property/VS type VS-NAT VS-TUN VS-DR
OS any must tunnel (Linux) any
server mods none tunl lo no arp
server network private (remote or local) on internet (remote or local) local
return packet rate/scalability low(10) high(100's?) high(100's?)
可见,使用IP隧道技术是比较好的解决方案。我们来看看其基本原理(基于IP Tunneling的Virtual Server原理图) 。
director封装并转发从外部网络到内部网络的服务器的包
服务器请求
服务器使用正常的IP地址直接向客户端应答。不需要象NAT那样再通过director回送包
这种方式适合请求小、应答大形式的服务任务,在Web服务上具有很好的效果。
TurboCluster
TurboLinux广为宣传的TurboCluster是完全基于Linux Virtual Server的代码和想法做的,但他们忘了致谢了。:-)
集群技术概述
Nimrod
(本节资料主要来自 http://www.csse.monash.edu.au/~davida/nimrod.html)
Nimrod适用于拥有大量不同初始条件或输入数据的科学计算任务,这种任务被称为参数运算。
Nimrod的核心是如何将计算机构成高可扩展性的分布式并行计算环境。Nimrod包括一个专门研究的元计算时序安排系统,将元计算资源无缝的集成到用户的桌面。用户与界面交互,描述参数计算试验。Nimrod 允许用户在大量输入的条件下运行某一参数计算的程序,此参数计算问题被自动分解,基于文件的程序被Nimrod转化成“元应用(meta application)”调用,并安排时序,传送到本地或远端计算资源上,运算完成后,回收这些不同的运行结果以得出结论。
Nimrod结构
Nimrod使用客户/服务结构。通常Nimrod分为两部分:
根节点
计算节点
“根节点”完成任务分配工作。“根节点”运行大量的“机器人用户”登录到服务器集群中指定的CPU,使用大量预定的开始条件或数据文件执行用户预定的应用。“根节点”是系统失效的唯一地点。那些执行具体运算的节点就是“计算节点”。因此,Nimrod可以支持多种结构,包括并行超级计算,新任务启动机制,文件传输机制,在多个机器上创建任务的认证机制。大多数现有应用程序无需修改就能使用。Nimrod尤其适于广域网络,可以让地理上分隔很远的计算机资源共享和协同工作,构成逻辑上的超级计算机。
用户在其桌面运行Nimrod客户程序,创建和管理参数运算。一个用户可以运行多个客户,同时运行多个参数计算任务。每个用户都在可接受任务的机器上运行自己的远程执行服务器(remote execution server / RES)。RES不仅仅管理应用程序的执行请求,还负责在客户机和服务器之间提供文件传输。用户运行其RES,RES服务器就继承了此用户的存取权限。
Nimrod并不假设需要共享的文件系统和全局的文件名字空间。当任务开始时,运行所需的输入文件会传输给远程系统,输出文件在每个运行分支结束后返回。RES在目的文件系统中为每个任务建立唯一定位。这避免了在一个机器接受多个任务或几台机器共享一个文件系统时,名字空间产生冲突。
Nimrod/G
Nimrod与Globus的结合演变成Nimrod/G项目。
Globus是个国际社团,其目的是:发展那种将地理上分散的计算和信息资源集成为一个整体的下层基础构造。这种计算结构使用高可扩充性的网络联接,可能拥有成百上千的,存放在多个管理域的节点。Globus将包含支持在国家级范围内动态辨认和组合资源,提供此范围内可信的证明、授权和委托的一个并行编程环境。
Nimrod/G的目标是创建支持用户选择确定在元计算环境中他们的试验的时间和花费约束的Nimrod版本。参考其结构图和交互流程图。
enFuzion
TurboLinux公司在Nimrod的基础上推出enFuzion。
集群技术概述
非Linux集群技术
康柏的集群
Digital是集群的鼻祖了(现在是康柏),其VAXCluster拥有很好的性能。
康柏把ProLiant服务器及存储技术,与其在操作系统集成、数据库及应用方面的特长结合在一起,提供了广泛的集群解决方案。 Proliant Cluster 产品系列包括集群产品、基础架构集群产品和面向MSCS、NetWare 、OPS for NT 的数据中心集群,能够满足各种不同规模的企业的需求。
基于Unix平台的集群系统是今年6月上市的TruCluster5.0,它是康柏公司针对关键任务计算环境用户的特殊需求推出的高可用性、高容灾性集群系统解决方案。在康柏提供的集群架构中,集群是由很多台计算机组成的。每个成员单位、每台机器都是集群的一个成员。整个集群可以安装在一个的框架,所有硬件至少配有1倍的冗余。集群内部采用互联方式,通常每一个运行的设备都有一个备份。所以,集群系统中任何一部分发生错误,都不会影响整个系统的正常操作。
在TruCluster集群系统中,只有一份真正的文件系统存在程序里面。集群的文件系统能够把这个程序提供给网络中所有的成员,并保证每一个成员看到程序系统都是一样的。当任何一个成员对该文件进行了修改,其它成员能够立即看到所修改的内容。
TruCluster集群系统具有高容灾性,集群与集群之间通过网络连接,每个集群都拥有特殊的储存功能,并自动生成镜像。当灾难发生在某一个机房时,另一个机房会自动接管“宕”掉的机房,所有的数据资源和文件系统都能够利用镜像转移到“新”的机房中。
微软Windows NT服务器集群
Windows NT服务器具备全部必要的组件支持关键任务应用。其系统建立在32位微型内核的基础上。具有多线程操作、预安排多任务处理和应用及操作系统自身的存储保护等功能。扩展能力强,最多可配置32个处理器、4GB的RAM和1千7百万兆字节的磁盘空间。
Windows NT服务器已经包含了许多建立集群系统的基本组件,主要有Windows NT目录服务下固有的单次登录(Single logon)功能;管理功能的多系统监测和Windows NT性能监测器;通过重新定向器引导请求的功能。
微软开发的集群应用程序接口,它使各种应用都可以充分利用Windows NT 服务器在集群环境下的优势。这一集群产品开发计划分为两个阶段:故障恢复解决方案和多节点解决方案。故障恢复解决方案是两个服务器在一个集群内共享相同的磁盘,以此改善数据的可用性。
多节点解决方案是有两台以上的服务器相互联在一起,提供更高的性能和可靠性。结果是当工作流超出了集群中各系统功能的总和,新的系统将加入到集群中。系统的这种可逐步扩展特点,使用户在必要时可容易地扩展处理能力。
Novell公司的NCS集群技术
Novell公司的集群产品主要是围绕自己的NetWare系列操作系统来开发的。
应用目录服务技术是Novell公司新一代集群产品NCS的一大特点,它将目录服务的容错性、分级性和可管理性延伸到集群中,最多可以支持32个全激活的节点。NCS采用了共享磁盘阵列技术来减少宕机时间,允许一个集群中的其它服务器接管故障服务器上的服务和应用程序。与某个发生故障的集群服务器相关的用户可以透明地被迁移到该集群中的另一个服务器上。NCS直接利用NDS,将所有的集群配置信息存储在目录内。集群服务是使用NDS来存储和发布失效转接方案信息,该信息通过目录可供该集群中的所有服务器使用。NCS能够将任务负载在集群系统中均匀分配,避免任务过多地集中在某个服务器上,造成单点失败。整个集群做为统一资源来使用,能通过一个基于Java的管理工具ConsoleOne对集群作单点管理。