計算機集群

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
德國開姆尼茨工業大學的技術人員在一個大型Linux集群上工作
昇陽電腦Solaris集群英語Solaris Cluster

計算機集群(英語:computer cluster)是一組鬆散或緊密連接在一起工作的計算機。由於這些計算機協同工作,在許多方面它們可以被視為單個系統。與網格計算機不同,計算機集群將每個節點英語Node (computer science)設置為執行相同的任務,由軟件控制和調度。

集群的組件通常通過快速局域網相互連接,每個節點(用作服務器的計算機)運行自己的操作系統實例。在大多數情況下,所有節點使用相同的硬件[1]和相同的操作系統,儘管在某些設置中(例如使用OSCAR英語Open Source Cluster Application Resources),可以在每台計算機或不同的硬件上使用不同的操作系統。[2]

部署集群通常是為了提高單台計算機的性能和可用性,而集群也通常比速度或可用性相當的單台計算機的成本效益要高。[3]

計算機集群的出現是許多計算趨勢匯聚的結果,這些趨勢包括低成本微處理器、高速網絡以及用於高性能分布式計算軟件的廣泛使用。集群使用和部署廣泛,從小型企業集群到世界上最快超級電腦(如IBM的Sequoia)。[4] 在集群出現之前,人們採用具有模塊冗餘的單元容錯主機;但是,集群的前期成本較低,網絡結構速度提高,這助推了人們採用集群這種方式。與高可靠性的大型機集群相比,擴展成本更低,但也增加了錯誤處理的複雜性,因為在集群中錯誤模式對於運行的程序是不透明的。[5]

基本概念

一個簡單、自製的貝奧武夫機群

為了通過組合低成本的商用現成計算機,來獲得更大的計算能力和更好的可靠性,人們研究提出了各種架構和配置。

計算機集群方法通常通過快速局域網連接許多現成的計算節點(例如用作服務器的個人計算機)。[6] 計算節點的活動由「集群中間件」協調,集群中間件是一個位於節點之上的軟件層,讓用戶可以將集群視為一個整體的內聚計算單元(例如通過單系統映像概念)。[6]

計算機集群依賴於一種集中管理方法,該方法把節點用作協調的共享服務器。它不同於其他方法(比如對等計算網格計算),後者也使用許多節點,但具有更多的分布式特性[6]

計算機集群可能是一個簡單的兩節點系統,只連接兩台個人電腦,也可能是一台速度非常快的超級計算機。構建集群的基本方法是貝奧武夫機群,它可以使用少量個人計算機構建,以產生與傳統高性能計算相比經濟划算的替代方案。一個展示概念可行性的早期項目是133節點的Stone Soupercomputer[7] 開發人員使用Linux並行虛擬機英語Parallel Virtual Machine工具包和訊息傳遞介面庫以相對較低的成本實現高性能。[8]

儘管一個集群可能僅由幾台通過簡單網絡連接的個人計算機組成,但集群架構也可用於實現非常高的性能水平。TOP500組織每半年公布的500台最快超級計算機的名單通常包括許多集群,例如,2011年世界上最快的機器是「」,它有分布存儲器英語distributed memory和集群架構。[9]

歷史

一個VAX集群 11/780, 拍攝於約1977年

Greg Pfister指出,集群最初不是由特定的供應商發明的,而是由無法在一台計算機上完成所有工作或需要備份的客戶發明的。 [10] 他估計計算機集群發明於20世紀60年代。 作為並行工作的一種方式,集群計算的正式工程基礎可以說是由IBM吉恩·阿姆達爾發明的,因為他在1967年出版了被認為是關於並行處理的開創性論文:阿姆達爾定律

早期計算機集群的歷史或多或少直接與早期網絡的歷史有關,因為網絡發展的主要動機之一是連接計算資源,創建真正的計算機集群。

第一個被設計成集群的生產系統是20世紀60年代中期的Burroughs B5700英語B5700,它允許多達四台計算機(每個計算機都有一個或兩個處理器)緊密連接到一個公共磁盤存儲系統,以平衡工作負載。與標準的多處理器系統不同,每台計算機都可以在不中斷整體運行的情況下重新啟動。

第一個商業鬆散耦合的集群產品是Datapoint英語Datapoint公司的「附加資源計算機」(Attached Resource Computer,ARC)系統,該系統於1977年開發,使用ARCNET作為集群接口。直到迪吉多電腦公司在1984年為VAX/VMS操作系統(現在稱為OpenVMS)發布了VAXcluster英語VAX集群產品,集群才真正開始。ARC和VAX集群產品不僅支持並行計算,還支持共享文件系統外部設備。其目的是提供並行處理的優勢,同時保持數據的可靠性和唯一性。另外兩個值得注意的早期商業集群是Tandem Computers英語Tandem Himalayan(大約1994年出現的高可用性產品)和IBM S/390 Parallel Sysplex(也在大約1994年出現,主要用於商業用途)。

同時,當商業網絡使用計算機集群在計算機外部的並行性時,超級計算機開始在計算機內部中使用它們。繼CDC 6600在1964年取得成功之後,Cray 1英語Cray 1也於1976年成功發布,並通過向量處理引入了內部並行性。[11] 雖然早期的超級計算機不使用集群而是使用了共享內存,但一些速度最快的超級計算機(如)最終依賴於集群架構。

集群的屬性

含有2台伺服器、N台使用者終端機的一個負載平衡叢集

可以根據不同目的配置計算機集群,從一般用途的業務需求(如Web服務支持),到計算密集型的科學計算。在這兩種情況下,集群都可以使用高可用性方法。請注意,下面描述的屬性並不是排他的,「計算機集群」也可以使用高可用性方法等等。

負載均衡」集群是集群節點共享計算工作負載,以提供更好的總體性能的配置。例如,Web服務器集群可以將不同的查詢分配給不同的節點,因此總體響應時間將得到優化。[12] 然而,負載平衡的方法可能在不同的應用程序之間有很大的不同,例如,用於科學計算的高性能集群的平衡負載算法與Web服務器集群不同,Web服務器集群可能只是使用一種簡單的循環方法,將每個新請求分配到不同節點。[12]

計算機集群用於計算密集型目的,而不是處理面向IO的操作(如Web服務或數據庫)。[13] 例如,計算機集群可能支持車禍或天氣的計算模擬。非常緊密耦合的計算機集群被設計用於可能接近「超級計算」的工作。

「高可用性集群」提高了集群方法的可用性。它們通過擁有冗餘節點來運行,當系統組件出現故障時,這些節點將用於提供服務。高可用性集群實現試圖使用集群組件的冗餘來消除單點故障。許多操作系統都有高可用性集群的商業實現。Linux-HA項目是Linux操作系統常用的一個自由軟件HA包。

優點

集群的設計主要考慮性能,但實際使用中還涉及許多其他因素,包括容錯(能夠容許系統繼續使用故障節點)能力、可擴展性、高性能、不需要頻繁運行維護程序、資源整合(如RAID)和集中管理。集群的優點包括在發生災難時啟用數據恢復、提供並行數據處理和高計算能力。[14][15]

在可伸縮性方面,集群提供了水平添加節點的能力。這意味着可以向集群中添加更多的計算機,以提高其性能、冗餘和容錯。與在集群中擴展單個節點相比,添加節點是一個既節省成本,又可以使集群獲得更高的性能的解決方案。計算機集群的這一大特性允許大量性能較低的計算機執行較大的計算負載。

向集群添加新節點時,可靠性也會增加,這是因為進行維護的時候不需要停下整個集群,只需停下單個節點維護,集群的其餘節點承擔該節點的負載即可。

如果集群包含大量的計算機,那麼可以使用分布式文件系統RAID,這兩種方法可以大大提高集群的可靠性和速度。

設計與配置

典型的貝奧武夫配置。

設計集群的問題之一是各個節點之間的耦合程度。例如,單個計算機作業可能需要節點之間的頻繁通信:這意味着集群共享一個專用網絡,位置密集,可能有同類節點。另一個極端是計算機作業使用一個或幾個節點,並且需要很少或沒有節點間通信,接近網格計算

貝奧武夫機群中,應用程序從不會看到計算節點(也叫「從屬計算機」),只與「主計算機」交互,而「主計算機」是處理從屬計算機的調度和管理的特定計算機。[13] 在典型的實現中,主計算機具有兩個網絡接口,一個用於為從屬設備與專用貝奧武夫網絡通信,另一個用於組織的通用網絡。[13] 從屬計算機通常有同一操作系統、本地內存和磁盤空間的它們自己的版本。但是,專用從屬網絡還可以有大型共享文件服務器,該服務器存儲全局持久數據,從屬設備可以根據需要訪問這些數據。[13]

一個特殊用途的144節點DEGIMA集群被調整為使用多步行並行樹碼運行天體物理N體仿真,而不是通用的科學計算。[16]

由於每一代遊戲機的計算能力不斷增強,一種新的用途出現了,它們被重新用於高性能計算(HPC)集群。遊戲機集群的例子有索尼PlayStation集群微軟Xbox集群。另一個消費類遊戲產品的例子是Nvidia Tesla個人超級計算機工作站,它使用多個圖形加速處理器芯片。除了遊戲機,也可以使用高端顯卡。使用顯卡進行網格計算比使用CPU更經濟,儘管不太精確。但是,當使用雙精度值時,它們變得像CPU一樣精確,並且成本更低。[2]

計算機集群歷來在使用相同操作系統的獨立物理計算機上運行。隨着虛擬化技術的出現,集群節點可以在具有不同操作系統的獨立物理計算機上運行,這些操作系統上面繪製了一個虛擬層,使之看起來相似。[17] 當進行維護時,集群還可以在各種配置上進行虛擬化。一個示例實現是Xen作為Linux-HA的虛擬化管理器。[17]

數據共享與通信

數據共享

一個NECNehalem集群

隨着計算機集群在20世紀80年代的出現,超級計算機也應運而生。早期的超級計算機依賴於共享內存,這是當時這三類計算機的區別之一。迄今為止,集群通常不使用物理共享內存,而許多超級計算機體系結構也放棄了這一點。

不過,在現代計算機集群中,集群文件系統的使用是必不可少的。例如IBM通用並行文件系統英語IBM General Parallel File System、Microsoft的集群共享卷英語Cluster Shared VolumesOracle集群文件系統英語Oracle Cluster File System

消息傳遞與通信

用於集群節點間通信的兩種廣泛使用的方法是MPI(訊息傳遞介面)和PVM(並行虛擬機英語Parallel Virtual Machine)。[18]

早在1989年MPI出現之前,PVM就在橡樹嶺國家實驗室問世了。PVM必須直接安裝在每個集群節點上,並提供一組軟件庫,將節點描繪成一個「並行虛擬機」。PVM為消息傳遞、任務和資源管理以及故障通知提供了一個運行時環境。PVM可以由用C、C++或Fortran等語言編寫的用戶程序使用。[18][19]

20世紀90年代初,在40個組織的討論中產生了MPI。最初的努力得到了ARPA國家科學基金會的支持。MPI的設計沒有重新開始,而是利用了當時商業系統中可用的各種特性。MPI規範催生了具體的實現。MPI實現通常使用TCP/IP和套接字連接。[18] MPI現在是一種廣泛使用的通信模型,它使並行程序能夠用CFortranPython等語言編寫。[19] 因此,與提供具體實現的PVM不同,MPI是已經在諸如MPICHOpen MPI的系統中實現的規範。[19][20]

集群管理

Lubuntu上使用Apache Hadoop,低成本、低能耗的Cubieboard微型集群

使用計算機集群服務器的挑戰之一是管理它的成本,如果集群有N個節點,有時可能高達管理N個獨立機器的成本。[21] 在某些情況下,這為管理成本較低的共享內存架構提供了一個優勢。[21] 由於便於管理,這也使得虛擬機非常流行。[21]

任務調度

當大型多用戶集群需要訪問大量數據時,任務調度就成為一個挑戰。在具有複雜應用環境的異構CPU-GPU集群中,每項作業的性能取決於底層集群的特性。因此,將任務映射到CPU內核和GPU設備有巨大的挑戰。[22] 這是一個正在進行的研究領域;結合和擴展MapReduceHadoop的算法已經被提出和研究。[22]

節點故障管理

當集群中的一個節點出現故障時,可以使用諸如「fencing」(隔離)之類的策略來保持系統的其餘部分可操作。[23][24] Fencing是在節點出現故障時隔離節點或保護共享資源的過程。有兩類隔離方法;一類禁用節點本身,另一類禁用對資源(如共享磁盤)的訪問。[23]

STONITH方法(Shoot The Other Node In The Head)是說禁用或關閉可疑的節點。例如,電源fencing使用電源控制器來關閉無法操作的節點。[23]

資源fencing方法不允許在不關閉節點電源的情況下訪問資源。這可能包括通過SCSI3持久保留fencing,禁用光纖通道端口的光纖通道fencing,或禁用GNBD服務器訪問的GNBD fencing。

軟件開發和管理

並行編程

負載平衡集群(如Web服務器)使用集群架構來支持大量用戶,通常每個用戶請求都被路由到一個特定的節點,實現無需多節點協作的任務並行,因為系統的主要目標是讓用戶快速訪問共享數據。然而,為少數用戶執行複雜計算的"計算機集群"需要利用集群的並行處理能力,在多個節點之間劃分"相同的計算"。[25]

程序的自動並行化英語Automatic parallelization仍然是一個技術挑戰,但是並行編程模型可以通過在不同的處理器上同時執行程序的不同部分來實現更高程度的並行性英語degree of parallelism[25][26]

調試和監控

在集群上開發和調試並行程序需要並行語言原語以及合適的工具,例如高性能調試論壇(HPDF)所討論的那些工具,HPD規範就是這樣產生的。[19][27]TotalView這樣的工具是為了在使用MPIPVM進行消息傳遞的計算機集群上調試並行實現而開發的。

Berkeley NOW(Network of Workstations)系統收集集群數據並將其存儲在數據庫中,而在印度開發的PARMON系統允許對大型集群進行可視化觀察和管理。[19]

當一個節點在長時間的多節點計算中失敗時,可以使用應用程序檢查點英語Application checkpointing來恢復給定的系統狀態。[28] 這在大型集群中是必不可少的,因為隨着節點數量的增加,在繁重的計算負載下節點失敗的可能性也會增加。檢查點可以將系統恢復到穩定狀態,這樣處理就可以在不重新計算結果的情況下繼續進行。[28]

一些實現

GNU/Linux世界提供了各種集群軟件;對於應用程序集群,有distccMPICHLinux Virtual Server, Linux-HA等基於導向器的集群,允許傳入的服務請求分布在多個集群節點上。MOSIXLinuxPMIKerrighedOpenSSI都是集成到內核中的成熟集群,它們可在同類節點之間自動進行進程遷移。OpenSSIopenMosixKerrighed單系統映像實現。

基於Windows Server平台的Microsoft Windows計算機群集Server 2003為高性能計算提供了諸如Job Scheduler、MSMPI庫和管理工具。

gLiteE-sciencE網格計劃英語Enabling Grids for E-sciencE(EGEE)創建的一組中間件技術。

slurm還用於調度和管理一些最大的超級計算機集群(參見top500列表)。

其他方法

儘管大多數計算機集群都是永久性的,但是人們已經嘗試用快閃計算英語flash mob computing來為特定的計算構建短期集群。不過,更大規模的志願計算系統(如基於BOINC的系統)的追隨者更多。

參見

基本概念

分布式計算

具體系統

計算工廠

參考資料

  1. ^ Cluster vs grid computing. Stack Overflow. [2019-02-07]. (原始內容存檔於2019-09-20). 
  2. ^ 2.0 2.1 Graham-Smith, Darien. Weekend Project: Build your own supercomputer. PC & Tech Authority. 2012-06-29 [2017-06-02]. (原始內容存檔於2017-07-04). 
  3. ^ Bader, David; Pennington, Robert. Cluster Computing: Applications. Georgia Tech College of Computing. May 2001 [2017-02-28]. (原始內容存檔於2007-12-21). 
  4. ^ Nuclear weapons supercomputer reclaims world speed record for US. The Telegraph. 2012-06-18 [2012-06-18]. (原始內容存檔於2020-04-13). 
  5. ^ Gray, Jim; Rueter, Andreas. Transaction processing : concepts and techniques. Morgan Kaufmann Publishers. 1993. ISBN 1558601902. 
  6. ^ 6.0 6.1 6.2 Network-Based Information Systems: First International Conference, NBIS 2007: 375. ISBN 3-540-74572-6. 
  7. ^ William W. Hargrove, Forrest M. Hoffman and Thomas Sterling. The Do-It-Yourself Supercomputer. Scientific American 265 (2). 2001-08-16: 72–79 [2011-10-18]. (原始內容存檔於2019-12-10). 
  8. ^ Hargrove, William W.; Hoffman, Forrest M. Cluster Computing: Linux Taken to the Extreme. Linux Magazine. 1999 [2011-10-18]. (原始內容存檔於2011-10-18). 
  9. ^ Yokokawa, Mitsuo; et al. The K computer: Japanese next-generation supercomputer development project. International Symposium on Low Power Electronics and Design (ISLPED): 371–372. 1–3 August 2011 [2019-02-07]. doi:10.1109/ISLPED.2011.5993668. (原始內容存檔於2019-02-13). 
  10. ^ Pfister, Gregory. In Search of Clusters 2nd. Upper Saddle River, NJ: Prentice Hall PTR. 1998: 36. ISBN 0-13-899709-8. 
  11. ^ Hill, Mark Donald; Jouppi, Norman Paul; Sohi, Gurindar. Readings in computer architecture. 1999: 41–48. ISBN 978-1-55860-539-8. 
  12. ^ 12.0 12.1 Sloan, Joseph D. High Performance Linux Clusters. 2004. ISBN 0-596-00570-9. 
  13. ^ 13.0 13.1 13.2 13.3 Daydé, Michel; Dongarra, Jack. High Performance Computing for Computational Science - VECPAR 2004. 2005: 120–121. ISBN 3-540-25424-2. 
  14. ^ IBM Cluster System : Benefits. IBM. [2014-09-08]. (原始內容存檔於2016-04-29). 
  15. ^ Evaluating the Benefits of Clustering. Microsoft. 2003-03-28 [2014-09-08]. (原始內容存檔於2016-04-22). 
  16. ^ Hamada, Tsuyoshi; et al. A novel multiple-walk parallel algorithm for the Barnes–Hut treecode on GPUs – towards cost effective, high performance N-body simulation. Computer Science - Research and Development. 2009, 24: 21–31. doi:10.1007/s00450-009-0089-1. 
  17. ^ 17.0 17.1 Mauer, Ryan. Xen Virtualization and Linux Clustering, Part 1. Linux Journal. 2006-01-12 [2017-06-02]. (原始內容存檔於2019-05-03). 
  18. ^ 18.0 18.1 18.2 Milicchio, Franco; Gehrke, Wolfgang Alexander. Distributed services with OpenAFS: for enterprise and education. 2007: 339–341 [2019-02-07]. ISBN 9783540366348. (原始內容存檔於2019-06-05). 
  19. ^ 19.0 19.1 19.2 19.3 19.4 Prabhu, C.S.R. Grid and Cluster Computing. 2008: 109–112 [2019-02-07]. ISBN 8120334280. (原始內容存檔於2018-11-27). 
  20. ^ Gropp, William; Lusk, Ewing; Skjellum, Anthony. A High-Performance, Portable Implementation of the MPI Message Passing Interface. Parallel Computing. 1996. CiteSeerX 10.1.1.102.9485可免費查閱. 
  21. ^ 21.0 21.1 21.2 Patterson, David A.; Hennessy, John L. Computer Organization and Design. 2011: 641–642. ISBN 0-12-374750-3. 
  22. ^ 22.0 22.1 K. Shirahata; et al. Hybrid Map Task Scheduling for GPU-Based Heterogeneous Clusters. Cloud Computing Technology and Science (CloudCom): 733–740. 30 Nov – 3 Dec 2010 [2019-02-07]. ISBN 978-1-4244-9405-7. doi:10.1109/CloudCom.2010.55. (原始內容存檔於2014-10-11). 
  23. ^ 23.0 23.1 23.2 Robertson, Alan. Resource fencing using STONITH (PDF). IBM Linux Research Center. 2010. [永久失效連結]
  24. ^ Vargas, Enrique; Bianco, Joseph; Deeths, David. Sun Cluster environment: Sun Cluster 2.2. Prentice Hall Professional. 2001: 58 [2019-02-07]. ISBN 9780130418708. (原始內容存檔於2021-02-26). 
  25. ^ 25.0 25.1 Aho, Alfred V.; Blum, Edward K. Computer Science: The Hardware, Software and Heart of It. 2011: 156–166. ISBN 1-4614-1167-X. 
  26. ^ Rauber, Thomas; Rünger, Gudula. Parallel Programming: For Multicore and Cluster Systems. 2010: 94–95. ISBN 3-642-04817-X. 
  27. ^ Francioni, Joan M.; Pancake, Cherri M. A Debugging Standard for High-performance computing. Scientific Programming (Amsterdam, Netherlands: IOS Press). April 2000, 8 (2): 95–108 [2019-02-07]. ISSN 1058-9244. doi:10.1155/2000/971291. (原始內容存檔於2018-12-02). 
  28. ^ 28.0 28.1 Sloot, Peter (編). Computational Science-- ICCS 2003: International Conference: 291–292. 2003. ISBN 3-540-40195-4. 

延伸閱讀

外部連結