Linux 集群大全 0 J! ^9 T3 y# G$ J2 q9 ^哪种群集适合您?2 i+ N3 A& R7 G$ {
$ F) T1 N2 `3 l/ R
Rawn Shah) f m- ?2 w' D4 }# j+ S$ F' J+ V3 e
LinuxWorld 专栏作家 : r# I; I7 u% V5 A+ B2000 年 5 月% a; n- t3 D6 a0 w, N# `/ _
- ], y% q8 Q' U! g3 d
9 f, D# x3 L, ?3 R$ N$ C( G+ wRawn Shah 作为专家,在 Linux 现有的开放源码和封闭源码集群解决方案方面为您指点迷津。. A/ ?% M1 |6 e% w! f5 k
$ _9 ?; ~! R C, d, h 9 O% U5 R& i+ h" D7 F u p2 R( z: A \& t( ?计算 Linux 中集群项目的数量就象计算硅谷中创业公司的数量一样。不象 Windows NT 已经受其自身的封闭环境阻碍,Linux 有大量的集群系统可供选择,适合于不同的用途和需要。但确定应该使用哪一个集群的工作却没有因此变得简单。( S/ H- R4 j. K. k. S1 ]
0 p4 N% c1 s2 ?( {9 A3 ^& A
问题的部分原因在于术语集群用于不同场合。IT 经理可能关心如何使服务器运行时间更长,或使应用程序运行得更快,而数学家可能更关心在服务器上进行大规模数值计算。两者都需要群集,但是各自需要不同特性的群集。 / e, b$ o- ~. I: V6 F$ I ' i, N/ p' x' x6 R7 _本文调查了不同形式的集群以及许多实现中的一部分,这些实现可以买到,也可以免费软件形式获得。尽管列出的所有解决方案并不都是开放源码,但是大多数软件都遵循分发 Linux 源码的公共惯例,特别是由于那些实现集群的人还常常希望调整系统性能,以满足需要。% g" k2 ?1 J' f8 V& V- g! E
7 d4 @3 d. q7 S) I9 K
硬件 6 |& [" i0 }: U" T, E; ]7 e集群总是涉及到机器之间的硬件连接。在现今大多数情况下,这只是指“快速以太网”网卡和集线器。但在尖端科学领域中,有许多专为集群设计的网络接口卡。 M; r% M& f9 b4 a: L / B5 [$ H3 C! \$ B; I% q1 Z4 h# e它们包括 Myricom 的 Myrinet、Giganet 的 cLAN 和 IEEE 1596 标准可伸缩一致接口 (SCI)。那些卡的功能不但在群集的节点之间提供高带宽,而且还减少延迟(发送消息所用的时间)。对于在节点间交换状态信息以使其操作保持同步情况,那些延迟是至关重要的。' ]$ R/ ]8 f6 Z$ ^
/ F3 \( {6 x {9 Q
Myricom$ R- n: q5 a7 E+ Z
Myricom 提供网卡和交换机,其单向互连速度最高可达到 1.28 Gbps。网卡有两种形式,铜线型和光纤型。铜线型 LAN 可以在 10 英尺距离内以全速进行通信,而在长达 60 英尺距离内以半速进行操作。光纤型 Myrinet 可以在 6.25 英里长的单模光纤或者 340 英尺长的多模光纤上全速运行。Myrinet 只提供直接点到点、基于集线器或基于交换机的网络配置,但在可以连接到一起的交换光纤数量方面没有限制。添加交换光纤只会增加节点间的延迟。两个直接连接的节点之间的平均延迟是 5 到 18 微秒,比以太网快得多。 7 {! O' a5 \* |$ q2 l6 n; _& i9 \# |+ _
集群类型3 n5 s3 M* i6 w& ~
最常见的三种群集类型包括高性能科学群集、负载均衡群集和高可用性群集。 ) X. ^+ W9 d3 b; P6 h5 q : s- G% O a, F( T# }! P* ]+ @科学群集 % _# j( {6 m2 l! B4 B+ I通常,第一种涉及为群集开发并行编程应用程序,以解决复杂的科学问题。这是并行计算的基础,尽管它不使用专门的并行超级计算机,这种超级计算机内部由十至上万个独立处理器组成。但它却使用商业系统,如通过高速连接来链接的一组单处理器或双处理器 PC,并且在公共消息传递层上进行通信以运行并行应用程序。因此,您会常常听说又有一种便宜的 Linux 超级计算机问世了。但它实际是一个计算机群集,其处理能力与真的超级计算机相等,通常一套象样的群集配置开销要超过 $100,000。这对一般人来说似乎是太贵了,但与价值上百万美元的专用超级计算机相比还算是便宜的。 # |& d. V/ u7 ~3 r, h. D8 g( M- w5 h) X7 O
负载均衡群集7 F2 E: m: w4 a# p$ W- w
负载均衡群集为企业需求提供了更实用的系统。如名称所暗示的,该系统使负载可以在计算机群集中尽可能平均地分摊处理。该负载可能是需要均衡的应用程序处理负载或网络流量负载。这样的系统非常适合于运行同一组应用程序的大量用户。每个节点都可以处理一部分负载,并且可以在节点之间动态分配负载,以实现平衡。对于网络流量也是如此。通常,网络服务器应用程序接受了太多入网流量,以致无法迅速处理,这就需要将流量发送给在其它节点上运行的网络服务器应用。还可以根据每个节点上不同的可用资源或网络的特殊环境来进行优化。# O2 c0 _. D8 Y
3 k8 K/ T8 n1 j& X3 k& {& g; H高可用性群集 M y8 g8 T8 I% \$ p
高可用性群集的出现是为了使群集的整体服务尽可能可用,以便考虑计算硬件和软件的易错性。如果高可用性群集中的主节点发生了故障,那么这段时间内将由次节点代替它。次节点通常是主节点的镜像,所以当它代替主节点时,它可以完全接管其身份,并且因此使系统环境对于用户是一致的。0 h8 Y. S" _) d' b
Cplant J( W. g& v. {# D
Sandia National Lab 中的 Computational Plant 是一个大规模整体并行群集,用于实现 TeraFLOP(万亿次浮点运算)计算并构建在商业组件上。整个系统由“可伸缩单元”组成,这些“可伸缩单元”可以划分成适合不同目的(计算、磁盘 I/O、网络 I/O、服务管理)。群集中的每个节点都是一个 Linux 系统,带有专门开发的、提供分区服务的内核级模块。每个分区的功能可以通过装入和卸载内核级模块来修改。 ) y2 Y$ i7 N8 z8 D' V* Z9 b1 Q) q ) A- j& Z) ~3 `' Y. x; o [项目分三个阶段完成,开始阶段是原型,有 128 个基于 433-MHz DEC Alpha 21164 的系统,其中每个都有 192 MB RAM 和 2 GB 驱动器,相互之间用 Myrinet 网卡和 8-端口的 SAN 交换机连接。第 1 阶段将它扩充为 400 个基于 21164 的工作站,这些工作站的运行速度为 500 MHz,有 192 MB RAM,没有存储器,用 16-端口的 SAN 交换机以超立方体结构连接起来,并且运行 Red Hat 5.1。当前的第 2 阶段有 592 台基于 DEC 21264 的机器,它们的运行速度为 500 MHz,有 256 MB RAM,没有驱动器。每个节点都使用 64-位,33-MHz PCI Myrinet 网卡,并且仍使用 16-端口交换机以超立方体结构连接。7 Y ~8 o% e7 Z8 V* Z) A$ ]+ u0 B
0 n$ j- S; W. _/ j/ v5 @
在 Cplant 上运行的应用程序包括解决稀疏线性系统、流体力学和结构力学中计算系统的优化、分子力学的模拟、线性结构力学的有限元分析,以及并行应用程序的动态负载均衡库。 " }# W3 e6 B* {+ F& a9 T& ` ( k6 k( @! R/ w* c& E1 IJESSICA 2 & w7 w3 t3 z# G0 o0 A香港大学的系统研究小组有一个基于 Java 的群集,叫做支持 Java 的单系统映像计算体系结构 (JESSICA),它作为一个中间件层以完成单系统映像的幻想。该层是每个使用分布式共享内存 (DSM) 系统进行通信的节点上运行的所有线程的一个全局线程空间。该项目使用 ThreadMark DSM,但最终将用他们自己创建的 JiaJia Using Migrating-home Protocol (JUMP)。他们使用定制的基于 Java 的 ClusterProbe 软件来管理群集的 50 个节点。 + H4 l; t6 i, }) E' p( |1 D ; G3 u" Y" W6 L- D% S. uPARIS" `$ X+ S. ^. y5 J% H& V9 A
法国的 IRISA 研究所的“大规模数字模拟应用程序的编程并行和分布式系统”(PARIS) 项目提供了几种用于创建 Linux 服务器群集的工具。该项目由三部分组成:群集的资源管理软件、并行编程语言的运行时环境,以及分布式数字模拟的软件工具。 ( @: ~% U9 d. ?. v( x1 N$ t* j2 {4 O* x, ?/ n! T/ ]' f8 w
资源管理软件包括用于共享内存、磁盘和处理器资源的 Globelins 分布式系统,及其 Dupleix 和 Mome 分布式共享内存系统。 & B! {8 {" F9 p/ k& N % g# V; U5 V: H0 H9 A负载均衡群集 ) g$ E1 L. |% \& }# [& t负载均衡群集在多节点之间分发网络或计算处理负载。在这种情况下,区别在于缺少跨节点运行的单并行程序。大多数情况下,那种群集中的每个节点都是运行单独软件的独立系统。但是,不管是在节点之间进行直接通信,还是通过中央负载均衡服务器来控制每个节点的负载,在节点之间都有一种公共关系。通常,使用特定的算法来分发该负载。 9 S; c$ Q& v1 C- N! n& L3 I) I! d/ B" f& W
网络流量负载均衡是一个过程,它检查到某个群集的入网流量,然后将流量分发到各个节点以进行适当处理。它最适合大型网络应用程序,如 Web 或 FTP 服务器。负载均衡网络应用服务要求群集软件检查每个节点的当前负载,并确定哪些节点可以接受新的作业。这最适合运行如数据分析等串行和批处理作业。那些系统还可以配置成关注某特定节点的硬件或操作系统功能:这样,群集中的节点就没有必要是一致的。 ) g: ~9 q0 c$ r: J& w2 B 0 m# h. c9 j8 F, i3 yLinux 虚拟服务器! y* ]% }/ n9 H) |( Z8 a% @7 e: i
“Linux 虚拟服务器”项目已经实现了许多内核补丁,它们为入网 TCP/IP 流量创建了负载均衡系统。LVS 软件检查入网流量,然后根据负载均衡算法,将流量重定向到一组充当群集的服务器。这允许网络应用程序,如 Web 服务器,在节点群集上运行以支持大量用户。 4 \# v1 [# D/ N/ a0 ], f ) r, D; c: b7 t9 r* E& yLVS 支持作为负载均衡服务器直接连接到同一个 LAN 的群集节点,但它还能够以通道传送 IP 包的方式连接到远程服务器。后一种方法包括压缩 IP 包中的均衡请求,这些 IP 信息包从负载均衡服务器直接发送到远程群集节点。尽管 LVS 可以远程支持网站的负载均衡,但它使用的负载均衡算法现在对于虚拟群集中的广域 Web 服务器仍无效。因此,如果 Web 服务器都在同一个 LAN 中,LVS 最好当作负载均衡服务器使用。 + d8 L9 S/ \# V( \1 s K2 z: T # U9 W+ C. T! ]7 X负载均衡系统的几种硬件实现比在通用操作系统,如 Linux,上运行得更快。它们包括来自 Alteon 和 Foundry 的硬件,其硬件逻辑和最少操作系统可以在硬件中执行流量管理,并且速度比纯软件快。它们的价格也很高,通常都在 $10,000 以上。如果需要简单和便宜的解决方案,一个有很多内存 (256 MB) 的中等 Linux 系统将会是一个好的负载均衡系统。 & }' }4 R8 h4 M! c6 x2 ]: y6 V m0 _2 v0 i R! o( sTurboLinux TurboCluster 和 enFuzion ) k* B1 c: n) v$ A2 J: JTurboLinux 有一个产品叫 TurboCluster,它最初以“Linux 虚拟服务器”项目开发的内核补丁为基础。因此,它可以得到大部分优点,但它的缺点也与原来的项目一样。TurboLinux 为此还开发了一些工具,用于监控增加产品实用性的群集行为。一家主要供应商的商业支持也使它对于大型网站更具吸引力。$ ?3 \. r5 O) q/ w4 E+ c
' q3 P4 k$ v9 f# }$ H5 m. K/ l
EnFuzion 支持在节点之间实现自动负载均衡和资源共享,而且可以自动重新安排失败的作业。# O) |6 b3 k2 X% w
) |8 ~* K) M: [6 n% S) g& mEnFuzion 是 TurboLinux 即将推出的科学群集产品,它并不基于 Beowulf。但是,它可以支持上百个节点以及许多不同的非 Linux 平台,包括 Solaris、Windows NT、HP-UX、IBM AIX、SGI Irix 和 Tru64。EnFuzion 非常有趣,因为它运行所有现有软件,并且不需要为环境编写定制的并行应用程序。它支持在节点间实现自动负载均衡和资源共享,而且可以自动重新安排失败的作业。6 a5 @, a) N s6 }
2 k. A; ^) M3 y4 A4 y
Platform Computing 的 LSF 批处理% j# E% X! M: h/ K' U: T* e
Platform Computing 是群集计算领域的老手,现在提供了 Linux 平台上的“负载均衡设施 (LSF) 批处理”软件。LSF 批处理允许中央控制器安排作业在群集中任意数量的节点上运行。在概念上,它类似于 TurboLinux enFuzion 软件,并且支持在节点上运行任何类型的应用程序。! Q/ w! _- B& M" U) Z4 q
; [$ \# D2 L! I0 a" y
这种方法对于群集大小是非常灵活的,因为可以明确选择节点的数量,甚至是运行应用程序的节点。于是,可以将 64 个节点的群集分成更小的逻辑群集,每个逻辑群集都运行自己的批处理应用程序。而且,如果应用程序或节点失败,它可以在其它服务器上重新安排作业。. ?$ A Y, G% e. F1 k
5 ^3 j% [. h: T6 X0 }" P C) WPlatform 的产品在主要 Unix 系统和 Windows NT 上运行。目前,只有它们的 LSF 批处理产品已经移植到 Linux 上。最终,LSF Suite 组件的其余部分也将紧随其后移植到 Linux 上。 & U: R z9 b1 H% ?% [( L$ T5 S. O7 i- f
Resonate Dispatch 系列 3 \# |7 ~: a, y$ Y) j# B: eResonate 有一种基于软件的负载均衡方法,类似于 Linux 虚拟服务器。但是,它支持更多特性,以及一些更好的负载均衡算法。例如,使用 Resonate,可以在每个群集节点装入一个代理,以确定该节点当前的系统负载。然后,负载均衡服务器检查每个节点的代理,以确定哪个节点的负载最少,并且将新的流量发送给它。另外,Resonate 还可以使用它的 Global Dispatch 产品更有效地支持地区性分布式服务器。 # l {; P. D: O+ w* v3 D Z5 q+ _7 v+ p' D' ^Resonate 已经在 Red Hat Linux 上彻底测试了该软件,相信它也可以在其它发行版上运行。Resonate 的软件还可以在其它各种平台上运行,包括 Solaris、AIX、Windows NT,并且它还可以在混合环境中进行负载均衡。- q* J6 {- j& r0 s) v$ Q: t9 \. Z9 p
# c& g6 ~, C% k' k& m
MOSIX2 R+ r6 r3 W: p( p4 z/ ^, I0 z) T
MOSIX 使用 Linux 内核新版本来实现进程负载均衡集群系统。该群集中,任何服务器或工作站可以按指定加入或离开,即添加到群集的总处理能力,或从中除去。根据其文档,MOSIX 使用自适应进程负载均衡和内存引导算法使整体性能最大化。应用程序进程可以在节点之间抢先迁移,以利用最好的资源,这类似于对称多处理器系统可以在各个处理器之间切换应用程序。 7 p" r4 l0 r( r6 H" ^( b$ d5 _5 d ( I7 p; V5 i# ~6 l+ EMOSIX 在应用层是完全透明的,并且不需要重新编译或者重新链接到新的库,因为所有一切都发生在内核级上。可以有几种方法将它配置成多用户共享环境群集。所有服务器可以共享一个池,系统可以是群集的一部分,或者群集可以动态地分成几个子群集,每种方法都有不同的用途。Linux 工作站还可以是群集的一部分,可以是固定的,也可以是临时的,或者只是作为批处理作业提交者。作为临时群集节点,工作站可以在其空闲时用于增加群集处理能力。也允许只以批处理方式使用群集,在这种方式中,群集被配置成通过队列接受批处理作业。然后,守护程序取走作业并将它们发送到群集节点进行处理。 6 U8 @* v" `& l& L ; `9 G$ {4 ^* r( t1 T l; x. YMOSIX 的不利之处是它更改 Linux 内核行为的一些核心部分,于是系统级应用程序将不会按期望运行。 ' T7 J5 O. a4 E5 u% U0 _# G& r d: Y. h" Z/ n8 B$ Q% b$ V1 k
除了高性能科学计算,MOSIX 提供了一个有趣的选项,用于以共同设置创建集群环境。通过使用服务器和工作站上的闲置资源,它可以更快更有效地创建和运行应用程序。由于访问了多台服务器,并且可以动态调整群集大小和更改负载均衡规则,它还可以提供高度的服务器可用性。MOSIX 的不利之处是它更改 Linux 内核行为的一些核心部分,于是系统级应用程序将不会按期望运行。要使用网络应用程序时,而该程序使用基于单个服务器地址的套接字连接,MOSIX 通常也会受到限制。这意味着网络应用程序在一个服务器节点上开始运行时,如果 IP 地址与套接字绑定,那么它必须继续在该节点上运行。显然,MOSIX 还正在开始迁移套接字,因此这很快就变成了争论的焦点。; t5 n' [/ f0 o' P
: y( e+ H, k7 H高可用性群集2 E5 j J' i. q* P
高可用性 (HA) 群集致力于使服务器系统的运行速度和响应速度尽可能快。它们经常使用在多台机器上运行的冗余节点和服务,用来相互跟踪。如果某个节点失败,它的替补将在几秒钟或更短时间内接管它的职责。因此,对于用户而言,群集永远不会停机。/ z4 Q4 g4 Z/ i
: K9 T5 N. [2 D- U9 j! Y某些 HA 群集也可以维护节点间冗余应用程序。因此,用户的应用程序将继续运行,即使他或她使用的节点出了故障。正在运行的应用程序会在几秒之内迁移到另一个节点,而所有用户只会察觉到响应稍微慢了一点。但是,这种应用程序级冗余要求将软件设计成具有群集意识的,并且知道节点失败时应该做什么。但对于 Linux,大多数现在还做不到。因为 Linux 系统没有 HA 集群标准,并且也没有公共 API 可供应用程序开发者构建有群集意识的软件。: E+ C1 s. \* k3 o
0 `% s5 b. t3 y7 I
HA 群集可以执行负载均衡,但通常主服务器运行作业,而系统使辅助服务器保持闲置。辅助服务器通常是主服务器操作系统设置的镜像,尽管硬件本身稍有不同。辅助节点对主服务器进行活动监控或心跳观察,以查看它是否仍在运行。如果心跳计时器没有接收到主服务器的响应,则辅助节点将接管网络和系统身份(如果是 Linux 系统,则是 IP 主机名和地址)。, L- J' u+ f+ o- C' }
- v' X4 Q( O1 `$ T但是,Linux 在这一领域仍有一点忽略。好消息是有一家著名的供应商正在努力尽快研制高可用性群集,因为它是企业级服务器都必需的功能。6 Y. `! ?) b5 X- t* b0 G! x
0 k$ S# v0 P* u0 Z! X1 q
Linux-HA 项目 2 C* q4 o. k1 B9 c" Y& T高可用性 Linux 项目,根据其目标声明,旨在为 Linux 提供高可用性解决方案,以通过社区开发成果提高可靠性、可用性和服务能力。Linux 达到高可用性集群时,这是一种试图给予 Linux 与先进的 Unix 系统,如 Solaris、AIX 和 HP/UX,一样具有竞争力的特性。因此,项目的目标是在 2001 年之前达到 Unix 集群比较报告 (http://www.sun.com/clusters/dh.brown.pdf) 中分析专家组 D. H. Brown 特定功能性级别。- B H% k1 j0 T5 |6 c4 @* q1 E
9 V9 `* R( b" T" i. A项目中有可以维护节点间心跳并接管失败节点的 IP 地址的软件。如果一个节点失败,它使用“伪造冗余 IP”软件包将失败节点的地址添加到工作节点以承担它的职责。于是,可以在几毫秒时间内自动替换失败的节点。实际使用中,心跳通常在几秒范围内,除非在节点之间有专用网络链接。因此,失败系统中的用户应用程序仍需要在新的节点上重新启动。 s1 Y; n U1 u+ C8 f0 {! M 8 L" W; t7 v) y3 q+ f无处不在的集群4 v/ Z2 m# e0 l, A
对于 Linux,有许多集群系统可供选用。同时,那些项目中有几个是非商业性的,甚至是实验性质的。虽然对学术界和某些组织这也没有形成问题,但大公司通常首选著名供应商的商业支持平台。供应商,如 IBM、SGI、HP 和 Sun,提供了用于在 Linux 中构建科学群集的产品和服务,因为群集很流行,并且可以销售大量的服务器设备。一旦商业机构认为其它形式的集群是可靠的,那些相同的服务器供应商或许会围绕着开放源码集群解决方案创建自己的产品。 4 ~) V* \1 ]; q3 e5 O+ S) [/ C7 u v4 Y5 L
Linux 作为服务器平台的重要性依赖于支持大型服务器和服务器群集的能力。这就使它可以与 Sun、HP、IBM 和其它公司的 UNIX 服务器在更高层面上竞争。虽然 Windows NT 和 2000 不支持 Linux 能够支持的集群范围,但是 HA 集群正规方法的可用性以及用于构建有群集意识的 API 也使它能够参与竞争。$ Y# N7 m# `5 R3 i3 j! Q Y
( s& R" u: w4 p* F如果正在考虑构建一个群集,那么您应当仔细检查那些可能性,并将它们与您的需求做比较。您也许会发现想要实现的目标还不能成为一个完整的解决方案,或许会发现已经有了现成的解决方案。不管是哪种情况,请相信许多现有公司将他们的应用程序托付给进行深度计算并提供大量网页的 Linux 系统群集。集群是一种企业系统服务,已经在 Linux 下成功测试过。尽管新的集群将出现,但选择的多样性正是 Linux 超过其它系统,如 Windows NT,的优势。/ Q- E# O' K4 K* M
$ G8 o6 @: t4 w. E! L1 Z" s7 d
关于作者 . g* D3 n+ l: B6 D9 F4 H* XRawn Shah 是居住在亚利桑那州图森市的一位独立顾问。他多年来与多平台问题打交道并撰写相关文章,但常常令他不解的是很少有人知道有用的系统工具。