|
Linux高性能計算集群 -- Beowulf集群1 集群 1.1 什么是集群 簡單的說,集群(cluster)就是一組計算機,它們作為一個整體向用戶提供一組網絡資源。這些單個的計算機系統就是集群的節點(node)。一個理想的集群是,用戶從來不會意識到集群系統底層的節點,在他/她們看來,集群是一個系統,而非多個計算機系統。并且集群系統的管理員可以隨意增加和刪改集群系統的節點。 1.2 為什么需要集群 集群并不是一個全新的概念,其實早在七十年代計算機廠商和研究機構就開始了對集群系統的研究和開發。由于主要用于科學工程計算,所以這些系統并不為大家所熟知。直到Linux集群的出現,集群的概念才得以廣為傳播。 對集群的研究起源于集群系統的良好的性能可擴展性(scalability)。提高CPU主頻和總線帶寬是最初提供計算機性能的主要手段。但是這一手段對系統性能的提供是有限的。接著人們通過增加CPU個數和內存容量來提高性能,于是出現了向量機,對稱多處理機(SMP)等。但是當CPU的個數超過某一閾值,象SMP這些多處理機系統的可擴展性就變的極差。主要瓶頸在于CPU訪問內存的帶寬并不能隨著CPU個數的增加而有效增長。與SMP相反,集群系統的性能隨著CPU個數的增加幾乎是線性變化的。圖1顯示了這中情況。
集群系統的優點并不僅在于此。下面列舉了集群系統的主要優點: 1. 高可擴展性:如上所述。 2. 高可用性:集群中的一個節點失效,它的任務可以傳遞給其他節點。可以有效防止單點失效。 3. 高性能:負載平衡集群允許系統同時接入更多的用戶。 4. 高性價比:可以采用廉價的符合工業標準的硬件構造高性能的系統。 1.2.1 集群系統的分類 雖然 根據集群系統的不同特征可以有多種分類方法,但是一般我們把集群系統分為兩類:
2.1 什么是高可用性 計算機系統的可用性(availability)是通過系統的可靠性(reliability)和可維護性(maintainability)來度量的。工程上通常用平均無故障時間(MTTF)來度量系統的可靠性,用平均維修時間(MTTR)來度量系統的可維護性。于是可用性被定義為: MTTF/(MTTF+MTTR)*100% 業界根據可用性把計算機系統分為如下幾類:
對于關鍵業務,停機通常是災難性的。因為停機帶來的損失也是巨大的。下面的統計數字列舉了不同類型企業應用系統停機所帶來的損失。
隨著企業越來越依賴于信息技術,由于系統停機而帶來的損失也越拉越大。 2.2 高可用集群 高可用集群就是采用集群技術來實現計算機系統的高可用性。高可用集群通常有兩種工作方式:
關于高可用集群的討論很多,這里就不進行深入的闡述了。 3.1 什么是高性能計算集群 簡單的說,高性能計算(High-Performance Computing)是計算機科學的一個分支,它致力于開發超級計算機,研究并行算法和開發相關軟件。高性能計算主要研究如下兩類問題:
顧名思義,高性能集群就是采用集群技術來研究高性能計算。 3.2 高性能計算分類 高性能計算的分類方法很多。這里從并行任務間的關系角度來對高性能計算分類。 3.2.1 高吞吐計算(High-throughput Computing) 有一類高性能計算,可以把它分成若干可以并行的子任務,而且各個子任務彼此間沒有什么關聯。象在家搜尋外星人( SETI@HOME -- Search for 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始終是引人注目的集群系統。
1 什么是Beowulf集群 Beowulf是現存的最古老的英語史詩: Famed was this Beowulf: far ew the boast of him, son of Scyld, in the Scandian lands. So becomes it a youth to quit 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, liegemen loyal: 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 of Excellence 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集群的定義:
2 Beowulf集群的分類 由于一些特殊的目的如系統性能,有些Beowulf集群系統也采用一些用戶定制的設備(它們通常由一家廠商提供)。為了區分這些特殊的系統,通常把Beowulf分為兩大類: 2.1 第一類Beowulf集群(CLASS I Beowulf) 這一類Beowulf集群全部由COTS設備組成。第一類Beowulf系統的優點是:
當然第一類Beowulf集群的缺點也是非常顯然的。由于所采用的硬件都沒有經過性能優化,所以其很難達到很好的性能。比如,由于以太網的高延遲和低帶寬使得集群系統中消息傳遞很難達到MIMD應用的需求,從而使整個集群系統的計算能力大打折扣。 2.2 第二類Beowulf集群(CLASS II Beowulf) 第二類Beowulf集群是指那些采用了用戶定制設備的Beowulf集群。這類集群系統最大優點是具有很好的性能。例如,采用Myrinet作為集群系統的IPC網絡可以極大地提供進程間消息傳遞延遲和速度。當然它的缺點就是依賴于單個硬件提供商而且價格高昂。 不能說,哪一類集群絕對優于另一類集群。這依賴于你的集群系統的需求和預算。 3 Beowulf集群體系結構 如上所述,現實中存在形形色色的Beowulf集群。雖然它們都是原始Beowulf集群的衍生物,但是它們的體系結構也存在各種各樣微小的差異。本文以IBM eServer Cluster 1300為例來闡述Beowulf集群體系結構和系統組成。
圖1是Cluster 1300上Beowulf集群的系統視圖。無論是管理節點(Master Node)和計算節點都是Intel IA32架構的xSeries PC服務器。它們通過網絡(以太網和Myrinet)相連接。所有的節點都運行Linux操作系統。運行在計算節點上的并行應用程序采用MPI進行完成并行進程間的通信。計算節點通過管理節點和外部LAN相連。整個集群系統都在一套集群管理工具監控之下。
圖 2 是 Cluster 1300上Beowulf集群的組件視圖。它揭示了Beowulf集群的組成部分。通常Beowulf集群由四個層次構成:
本文的下面三個小節將分別介紹這四個層次。而本系列文章的后面兩片將更詳細的介紹它們。 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以太網相比,這類網絡具有低延遲和高帶寬的特性。 還有三類設備雖然不是必須,但是對于集群管理卻是非常重要的:
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和集群系統上的比較:
3.3 Beowulf集群應用 Beowulf集群的應用層次位于硬件和軟件層次之上。它要解決的問題是如何在實際的集群系統中并行化(PARALLEL)應用中的并發(CONCURRENT)部分,從而使集群上的應用達到最好的性能。 在闡述這部分之前,我們需要區分兩個概念: PARALLEL和CONCURRENT。程序的并發(CONCURRENT)部分是指程序中可以獨立計算的部分。程序的并行(PARALLEL)部分是指程序中在同一時間被分別執行的并發(CONCURRENT)部分。 它們的區別是很重要的。并發是程序本身的屬性,而并行是計算機系統的屬性。并行的目的是獲得很好的性能。限制并行性能的因素是計算節點間通信的速度和延遲。大部分的Benchmark都有很高的并行性并且通信和延遲不是什么瓶頸。但是其他應用卻沒有這么簡單。對于這些應用,有時候使并發部分并行執行反而可能使應用性能更低。簡單的說,除非附加的通信時間代價小于并發節約的計算時間,否則并行執行反而會降低效率。
程序員的任務就是決定哪些并發的部分需要并行執行,而哪些不應該并行執行。這些決定最終會影響應用程序的執行效率。圖3描述了實際應用中程序并發部分和通信計算時間比的關系。 在理想的系統中,通信計算時間比應該是恒定的。任何并發部分都應該實現為并行。不幸的是,實際的系統,包括SMP系統,都是圖3所示的那樣。所以在設計Beowulf集群應用時,必須認識到并發帶來的效率依賴于在該系統上通信處理時間比。也正是因為這個原因,雖然可以把應用移植到另一個并發系統上,但是并不能保證應用在被移植的系統上仍然是高效的。一般來說,不存在可移植的且高效的應用程序。 同樣的道理,使用更快的CPU也可能使你的應用變慢。 1 Beowulf集群硬件和網絡體系結構
圖 1是Cluster 1300的硬件和網絡體系結構圖。從圖中可以看出,整個系統由5類計算或網絡設備和5類網絡組成。這5類設備是:
5類網絡是:
本文的以下部分將介紹這些設備和網絡的角色,功能和一般的配置。 2 Beowulf集群中的節點 這一節主要介紹Beowulf集群中的節點,節點的類型和相應的功能。根據功能,我們可以把集群中的節點劃分為6種類型:
雖然由多種類型的節點,但并不是說一臺計算機只能是一種類型的節點。一臺計算機所扮演的節點類型要由集群的實際需求和計算機的配置決定。在小型集群系統中,用戶節點、控制節點、管理節點、存儲節點和安裝節點往往就是同一臺計算機。下面我們分別解釋這些類型節點的作用。 2.1 用戶節點(User Node) 用戶節點是外部世界訪問集群系統的網關。用戶通常登錄到這個節點上編譯并運行作業。 用戶節點是外部訪問集群系統強大計算或存儲能力的唯一入口,是整個系統的關鍵點。為了保證用戶節點的高可用性,應該采用硬件冗余的容錯方法,如采用雙機熱備份。至少應該采用RAID(Redundant Array of Independent Disks)技術保證用戶節點的數據安全性。 2.2 控制節點(Control Node) 控制節點主要承擔兩種任務
通常控制節點是計算網絡中的關鍵點,如果它失效,所有的計算節點都會失效。所以控制節點也應該有硬件冗余保護。 2.3 管理節點(Management Node) 管理節點是集群系統各種管理措施的控制節點:
2.4 存儲節點(Storage Node) 如果集群系統的應用運行需要大量的數據,還需要一個存儲節點。顧名思義,存儲節點就是集群系統的數據存儲器和數據服務器。如果需要存儲TB級的數據,一個存儲節點是不夠的。這時候你需要一個存儲網絡。通常存儲節點需要如下配置:
2.5 安裝節點(Installation Node) 安裝節點提供安裝集群系統的各種軟件,包括操作系統、各種運行庫、管理軟件和應用。它還必須開放文件服務,如FTP或NFS。 2.6 計算節點 計算節點是整個集群系統的計算核心。它的功能就是執行計算。你需要根據你的需要和預算來決定采用什么樣的配置。理想的說,最好一個計算節點一個CPU。但是如果考慮到預算限制,也可以采用SMP。從性價比角度說,兩個CPU的SMP優于3或4個CPU的SMP機器。 因為一個計算節點的失效通常不會影響其他節點,所以計算節點不需要冗余的硬件保護。 2.7 集群中節點的部署 雖然由多種類型的節點,但并不是說一臺計算機只能是一種類型的節點。一臺計算機所扮演的節點類型要由集群的實際需求和計算機的配置決定。在小型集群系統中,用戶節點、控制節點、管理節點、存儲節點和安裝節點往往就是同一臺計算機,這臺計算機通常成為主節點(Master Node)。在這種情況下,集群就是由多個計算節點和一個主節點構成。 在大型的集群系統中如何部署這些節點是個比較復雜的問題,通常要綜合應用需求,拓撲結構和預算等因素決定。 3 Beowulf集群的網絡結構 3.1 集群中的網絡技術 因為計算節點間的通信需求,IPC網絡的性能是Beowulf集群設計中非常重要的話題。由于應用的需求,通常需要高帶寬、速度和低延遲的網絡。Beowulf集群的主要瓶頸通常也在于雙工的網絡通信,延遲和全局同步。 有好幾種網絡技術可以用于IPC網絡。它們是快速以太網、千兆以太網和Myrinet。為了達到高帶寬,通常需要采用交換機。交換機接受從雙絞線傳來的數據包,但是它和集線器不一樣。它不向所有連接的節點廣播這個數據包,它會根據目的地址哪個端口是接受者,然后把這個包傳給接受者。 3.2 Beowulf集群網絡拓撲 如上所述,通常Beowulf集群系統中有5類網絡。其中Service Processor網絡是以太網連接起來的菊花鏈結構,Terminal網絡是計算節點和Terminal Server通過串口線連接起來的星形結構。管理網絡、集群網絡和IPC網絡則是通過交換機相連的。雖然可以把這三個網絡配置在一個網段,但是通常我們把它們分化在三個虛擬網中(VLAN)。圖2是Beowulf集群網絡結構。
3.2.1 管理網絡(Management VLAN) 管理網絡用于訪問IPC網絡交換機、Service Processor網絡和Terminal Server。HTTP、Telnet和SNMP等協議被用來管理這些設備。 3.2.2 集群網絡(Cluster VLAN) 計算節點和存儲節點用這個網絡進行通常的網絡I/O。 3.2.3 IPC網絡(IPC VLAN) 用于計算節點間的高速通信。通常由特殊的高速網絡設備構成。 3.2.4 Service Processor網絡 以太網連接起來的菊花鏈結構,用于系統管理目的。 3.2.5 Terminal網絡 Terminal網絡是計算節點和Terminal Server通過串口線連接起來的星形結構。Terminal Server是外界訪問這個網絡的接口。管理節點通過Terminal Server虛擬出來的終端可以登錄到其他節點上完成必要的管理工作。 3.2.6 KVM網絡 KVM網絡是KVM Switch和各節點連接的星形網絡。其實把KVM網絡稱為一個網絡并恰當。KVM是指Keyboard、Video和Mouse。通過KVM Switch的切換,管理員可以在管理各個節點。 Qty .P/N Description IBM Products Compute Nodes 4 865431Y xSeries 330 1000 256 256/OPEN 24X 4 37L7202 18.2GB Ultra160 HDD 4 10K3806 866Mhz 133MHz 256K 12 33L3144 256MB 133MHz ECC SDRAM RDIMM MEMORY 1 06P4792 C2T Cable Kit
Management Node 1 86564RY xSeries 340,866Mhz,128Mb 1 19k4630 866Mhz 133MHz 256K 4 33L3144 256MB 133MHz ECC SDRAM RDIMM MEMORY 1 37L6091 ServeRAID 4L LVD SCSI Adapter 3 37L7202 18.2GB 7200rpm Ultra160 SCSI Hot-Swap SL H 1 34L1501 Netfinity 10/100 Ethernet PCI Adapter 2 1 34L0301 Netfinity Gigabit Ethernet SX Adapter 1 37L6880 270W Redundant HS Power Supply
Shared Resources 1 9306200 Netbay 22 Half Rack 1 3619702 Netbay 22 Rack Extension Kit 1 9411AG1 Monitor (flatpanel) 1 L6888 Flatpanel rack mount kit 1 09N4291 8x2 Console Switch (KVM Switch) 2 94G7447 Console Cable Set 12ft (to KVM switch) 1 28L3644 Spacesaver Keyboard/trackpoint 1 28L4707 Keyboard tray 2 37L6866 Netbay Universal Voltage PDU 1 01K7209 ASMA Adapter (Wiseman card) 1 36L9973 1M Fibre Channel Cable 1 03K9308 Short Wave GBIC (Gigabit module)
Equinox Products 1 990209 Equinox ELS-16 1 210059 Micro-Transceiver,AUI (DB-15)to 10BaseT 1 790091 ELS Rackmount kit 4 210062 Equinox Serial Adapters 4 690226 10'Serial Cables
Myrinet Networking Products 1 M3-E16 Myrinet2000 3-slot Chassis 1 M3-M Management Module 4 M3S-CB-5M Myricom Myrinet LAN cables 4 M3S-PCI64B-2 Myrinet LAN Card 1 M3SW16-8S Myrinet 8-port Serial modules
Miscellaneous Products 8 3'CAT5 Cables 5 1'CAT5 Cables
Extreme Networks Products 1 13020 Summit24 -Full Layer 3-X
1 Beowulf集群軟件結構
圖1 是Beowulf集群的軟件體系機構。一般來說,Beowulf集群由如下幾個軟件部分組成:
2 操作系統 并不是每種操作系統都適合高性能集群系統。理論上說,硬件的體系結構、操作系統的任務調度方式和IPC的方式是決定應用并行化效果的主要因素。根據這三個因素,我們可以歸納出如下5種實施應用并行化的平臺:
Beowulf集群使用第5種類型平臺。它可以由SMP和PC服務器組成,以Linux為操作系統,以MPI或PVM這種消息傳遞方式作為通信方法。 3 文件系統 文件系統是操作系統的重要組成部分,用于存儲程序和數據。如何在各節點間高效、一致和簡捷的實現數據共享是集群系統對文件系統提出的挑戰。 3.1 集群和文件系統 很明顯,那種僅能管理本地存儲的文件系統(如EXT和FAT)是無法滿足集群系統對文件共享的要求的。在集群環境下,最容易想到,也是最容易實現的文件系統就是分布式文件系統。相當于本地文件系統,分布式文件系統有如下優點:
分布式文件系統可以使集群的節點間簡捷地實現共享。但是為了提供性能,分布式文件系統通常需要使用本地的緩存(Cache), 所以它很難保證數據在集群系統范圍的一致性。而且往往分布式文件系統中只有一份數據,所以很容易發生單點失效。 建立在共享磁盤(Share-Disk)上的并行文件系統可以克服分布式文件系統的這些缺點。通過使用在節點共享的存儲設備,并行文件系統具有很多優點:
3.2 集群中的數據共享形式 下面通過給出幾個集群中使用具體的數據共享的方法。其中rsync是建立在本地文件系統之上,NFS和Inteemezzo屬于分布式文件系統(確切的說,NFS只是網絡文件系統),GFS屬于并行文件系統,而Backend-database則屬于不同于文件共享的另一種形式的共享。
3.2.1 rsync rsync是一種簡單的文件共享實現方式。集群中的每個節點都有一份數據復本,復本間使用rsync進行同步。因為節點需要的數據就在本地,所以這種方法具有很高的可用性,不會出現單點失效現象。 如果需要的共享的數據量很小,而且很少更新時,可以采用這種方式。靜態網頁和小的FTP站點的可以使用這種共享方式。 3.2.2 NFS 這也是一種容易實現的方式。存儲節點通過NFS將自己本地的文件輸出,其他節點則把存儲節點輸出的文件系統mount到本地文件系統。NFS方式的存在兩個很大的缺點:
當然使用多個互為備份的NFS服務器可以改善性能和避免單點失效,但是這樣又會帶來如何實時保持備份服務器間數據一致性的問題。 NFS方式適合于共享訪問數據量不大的小型集群系統。 3.2.3 GFS GFS(Global File System)實現了存儲設備的網絡共享。這些存儲設備可以是共享SCSI(Shared SCSI)和共享通道(Fibre Channel - FC)。GFS包裝這些存儲設備使得它們好像節點本地的文件系統。GFS的主要優點在于:
GFS可以將物理上分離的存儲設備虛擬為一個存儲而且能平衡訪問負載。GFS還實現了文件鎖和實時文件系統。 3.2.4 Intermezzo Intermezzo實現了一個分布式的文件系統。它采用客戶/服務器模式。服務器擁有權威的數據,客戶節點僅有本地緩沖的版本。它們通過普通的網絡進行同步。Intermezzo支持斷開連接下文件操作。在下次恢復連接時,它會集成本地的改動到服務器上。Intermezzo擁有象GFS一樣的可用性和可擴展性。但是它無法保證數據的實時一致性。
3.2.5 Backend Database 基于后端數據庫的共享是完全不同于文件共享的方式。后端數據庫系統解決了數據的一致性、性能、可用性和可擴展性問題。但是數據庫的訪問方法要比文件訪問復雜的多。
4 并行化應用程序 并行化應用程序,使其更高效的運行是使用Beowulf集群系統的最終目的。一般說,并行化應用程序分為三個步驟:
在并行化應用程序的過程中,需要開發環境、并行開發庫和各種工具的支持。這些軟件都是Beowulf集群軟件體系結構中重要的組成部分。 4.1 確定應用程序的并發部分 從實用的角度說,應用程序有兩種類型的并發:計算和I/O。盡管在多數情況下這兩者是正交的,但是也存在一些應用同時需要這兩種并發性。有一些工具可以用來幫助分析應用程序的并發,而且通常這些工具都是專門為Fortran設計的。 4.2 分析并行的效率 分析并行的效率是并行化應用程序中很重要的一個步驟。正確的分析并行的效率可以幫助你在有限的經費下最大化應用的執行效率。往往Beowulf集群的需要和應用的需要有些許的差別。比如,CPU消耗型的應用往往需要的是稍微快一點的CPU和高速低延遲的網絡,而I/O消耗型的應用需要的是稍微慢一點的CPU和快速以太網。 如果沒有分析工具,你只能使用猜測和估計的辦法完成這一步驟。一般來說,如果在應用的一部分中,計算的時間是分鐘級而數據傳輸的時間是秒級,那么這一部分可以并行執行。但是如果并行后計算時間降到秒級,你就需要實際測量一下再做權衡。 另外,對于I/O消耗型的應用,Eadline-Dedkov法則對你做決定有些幫助:如果兩個并行系統具有相同的CPU指標,慢CPU和相應具有低速CPU間通信網絡的系統反而具有較好的性能。 4.3 實現應用程序的并發 有兩種方法去實現應用程序的并發:顯式并發和隱式并發。 4.3.1 顯式并行化 顯式并行化是指由開發者決定程序的并行。開發者通過在程序中增加PVM或MPI消息,或者增加程序執行的線程從而達到程序的并行化。顯式并行化通常難以實現和調試。為了簡化顯式并行化,某些開發庫中增加了一些函數用于簡化標準并行方法的實現。另外也有專門用于調試并行程序的工具。TotoalView(http://www.etnus.com/Products/TotalView/index.html)就是一個源碼級的C、C++和Fortran調試工具。它擁有方便的圖形化界面,可以用于調試多線程、多進程和集群應用程序。 4.3.2 隱式并行化 隱式并行化是由編譯器來決定程序的并行性,高性能Fortran就是這類編譯器。隱式并行化中,程序開發者向編譯器提供一些程序并行的特征,編譯器根據這些特征做出程序并行化的決定。通常編譯器可以給并行應用提供一定程度的效率和移植性,但是不是最好的。 從用戶角度看,集群系統就好像一臺服務器或者PC。很多用戶可以同時使用這個系統。但是當太多的用戶使用集群系統時,系統性能會很差。資源管理就是管理用戶提交的作業,合理給各個作業分配資源從而保證集群系統高效運行。作業管理通常由資源管理器和作業調度策略器組成。 從系統組成角度說,集群系統是由多臺計算機組成的超級計算機。但是從最終用戶看來,集群系統是一臺計算機,也就是說,集群系統的構成對用戶是透明的。所以集群系統的管理的目的就是讓集群系統象一臺計算機一樣利于管理。歸納起來,集群系統管理一般完成如下任務:
1 集群作業管理 從用戶角度看,集群系統就好像一臺服務器或者PC。很多用戶可以同時使用這個系統。但是當太多的用戶使用集群系統時,系統性能會變得很差。資源管理就是管理用戶提交的作業,合理給各個作業分配資源從而確保充分利用集群系統計算能力并盡可能快的得到運算結果。簡單的說,集群資源由實現如下幾個部分:
2 Beowulf集群中的作業管理軟件 有很多種選擇去管理集群系統中的資源。其中PBS資源管理器和Maui作業調度器最適合集群系統。 2.1 PBS PBS(Portable Batch System)是由NASA開發的靈活的批處理系統。它被用于集群系統、超級計算機和大規模并行系統。PBS主要有如下特征:
OpenPBS(http://www.OpenPBS.org/)是PBS的Open Source的實現。商業版本的PBS可以參照:http://www.pbspro.com/。 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 3 集群系統管理 從系統組成角度說,集群系統是由多臺計算機組成的超級計算機。但是從最終用戶看來,集群系統是一臺計算機,也就是說,集群系統的構成對用戶是透明的。所以集群系統的管理的目的就是讓集群系統象一臺計算機一樣利于管理。歸納起來,集群系統管理一般完成如下任務: 3.1 資源管理 簡單地說,資源管理就是分配系統的資源和監控系統資源的使用狀態。這里的資源是個很廣泛的概念,各種硬件設備、數據和程序都可以看成資源:如CPU、存儲、網卡,甚至系統的事件和log。 3.2 事件服務 事件(Event)就是系統的狀態的一次變化。如"CPU的利用率超過90%"就可以理解為一次事件。簡單的說,事件服務就是事件通知服務,也就是當一次事件發生時,通知對這類事件感興趣的個體這個事件發生了。事件服務可以分為Push(也稱為Subscribe-Publish)和Pull方式。系統管理員還應該能夠通過事件服務設置系統對事件的自動響應。 3.3 分布式命令和文件 分布式命令和文件是指讓命令和文件操作同時在整個集群結點或指定的一組結點上并行執行。 分布式命令功能通常通過分布式的Shell來提供。這種Shell一般叫做dsh(distributed shell)或 psh ( parallel shell)。你可以通過rsh或ssh來實現分布式Shell。 分布式文件主要用于指集群中配置文件的同步。集群系統實際上是由多個結點組成,所以對集群系統的一個配置需要發布到每個結點(或一組結點)。比如,需要配置每個結點上的Apache都支持CGI,就需要把/etc/httpd下的配置文件發布到每個結點的/etc/httpd中。簡單地說,集群系統地配置管理就是把一個或多個配置文件發布到指定的結點上。有很多開放源碼的工具可以幫助完成集群系統的分布式文件功能,如rdist和cfengine。 3.4 監控和診斷 對持續運行的集群系統而言,當系統正常運行時,你需要一些工具監控系統各部分的運行狀態,如系統進程、CPU利用率和內存利用率等。在普通的Unix系統上,你可以簡單的用ps和top實現這些功能。但是在集群系統中,你確實需要一些特殊工具,而且最好系統的監控可以支持多種網絡管理協議,如SNMP和WBEM。當集群系統工作不正常時,你則需要另外一些工具來協助系統診斷。如當系統某個不服務時,你可能需要用ping診斷是不是網絡出了問題。而當時多個結點服務時,你則需要并發的ping來診斷是不是網絡錯誤。 3.5 硬件控制 PC機上很簡單的管理功能對于集群系統而言可能會很難做到。比如讓一組結點重啟,就很難手工完成。所以集群系統需要一些特殊的硬件設備完成這些功能。下面是幾個需要硬件支持特殊管理功能:
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。 下表歸納了幾種安裝工具的特點:
3.7 域管理 你可以簡單的把集群系統的域管理理解為結點管理,它主要包括如下簡單的功能:
實際上,我們也把作業管理納入集群系統管理的任務。但是相對于其他系統管理任務而言,作業管理在集群系統中具有更重要的作用,而且通常的集群系統管理軟件也不直接實現作業管理功能。所以我們把作業管理作為集群系統一個重要的軟件部分,而不是集群系統管理的一項任務。 4 幾種集群系統管理軟件 集群系統管理軟件和集群系統一樣形形色色、多種多樣。下面簡要介紹幾種集群系統管理軟件并比較它們實現的功能。 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是一款功能很全面的管理工具,而且還在不斷的發展中。 4.2 XCAT XCAT是用于IBM eServer Cluster 1300上的系統管理軟件。它由Egan Ford開發。它基本上是由shell腳本寫成,相當簡捷。但是它實現了集群系統管理大部分的內容,是個非常出色的管理軟件。 4.3 Mon Mon在Linux平臺上開發,但是也以運行在Solaris上而出名。Mon的服務器和客戶都是基于perl開發的,所以很容易移植到其他UNIX和類UNIX平臺。 下表比較了以上三種集群系統管理軟件:
|











