Mosix:強大的叢集Linux方案
Linux界現在好像處在瘋狂地熱衷於叢集概念之中。幾乎就在幾個月之前,唯一的解決方案還只能是自己編寫叢集軟體以達到較高的實用性。當然在科學叢集方面,還可以使用Beowulf或者傳送訊息的叢集庫(例如 PVM)。但除了早先的這些解決方案,Linux在專有和商業叢集的方面上是大大落後的。
但現在的發展看起來令人欣慰了很多。SGI的Failsafe已基本移植;Linux High Availability(高效性Linux)計劃已經啟動;Red Hat 推出了Piranha叢集軟體;等等。
同時還出現了一些可行的科學叢集解決方案,其中最值得推薦的是Mosix。Mosix使用的是單一系統圖形(SSI)叢集器。SSI叢集器之所以受到歡迎是因為它們給使用者的感覺像是在一台巨型電腦上工作,而不是一群單個的節點。使用者可以登入到Mosix叢集器上的任何一個節點,並啟動叢集器中任何節點上啟動並執行程式,只要核心中的叢集軟體認為這些程式是可以啟動並執行。如果使用者啟動並執行DNS是正確的,他們只需telnet到cluster.mynet.com,DNS的迴圈功能會讓他們隨機地登入到某個節點及其分支程式上,然後再分支,分支。
裝配Mosix叢集器
有些Mosix叢集器可以達到世界上前50種效能最強的的超級電腦的水平。如果有足夠多閑置的電腦裝置的話,就可以考慮自己動手組裝一個Mosix叢集器。
例如,在如下硬體上安裝Mosix核心:
3台雙CPU電腦,主頻從500MHz到933MHz,記憶體總和為1.5GB左右。
8台單CPU電腦,主頻從MMX266MHz到933MHz,記憶體總和為1.8GB。
而儲存空間,用了Network Appliance F720,約有120GB的磁碟空間,並使檔案系統對所有電腦為可讀。非常重要的一點是,所有機器都必須有統一的使用者ID和群組ID,否則訪問資料時就可能會出現問題。
這些機器通過100/1000Mbit的網路連接起來,中心安置一個光學轉換器。
在這個設計中採用的是用 Network Appliance 儲存伺服器來實現中心儲存的方案,所有叢集器節點都圍繞其中。有些節點用的是1000Mbit 的網卡,有些用的是較舊的100Mbit。Mosix 會測得每個節點之間的等待時間,並在某個節點上負載過高決定將它的程式轉移到其他節點時考慮這個因素。這裡使用的網卡是Phobos公司的產品,轉換器用的是Nbase公司的。
從上述網站下載兩個RPM,並用“rpm -install xxx.rpm”命令進行安裝。其中一個RPM是給2.2.16核心的,其中帶有所有編譯好的 Mosix擴充。另一個則是為監測叢集器所用的一套Mosix使用者空間命令而備的。
重新啟動各節點進入Mosix核心,此時,工作就已接近尾聲了,最後要做的就只是讓每個節點知道其他節點的位置。要做到這點,編輯一個對應檔/etc/mosix.map,在檔案中指定所有其他的節點和它們的IP地址,這與/etc/hosts檔案相似。
檢測一下是否所有節點都能互相看到彼此,運行“mon”監測程式。它將顯示所有工作節點的圖表和各自的負載水平、記憶體消耗,及其他資訊。
<img src="http://linux.chinabyte.com/image/010613mon.jpg">
mon監測程式的運行介面
啟動叢集器
現在就實踐一下吧,可以試著建立一個進程,如distributed.net所說的dnetc RC5破程式。然後再加幾個其他的進程。此時看一下“mon”程式會發現你的電腦的負載很高,而其他則仍很低。但很快,你節點上的負載量會逐漸降低,而其他節點則相應上升,因為你機子上的一些進程被轉移到了其他更佳的節點上了。Mosix會自動調節轉移的時間和節點位置,而無需使用者對此進行控制。
為了對這個新叢集器的強大效能有個具體的概念,筆者在叢集器之外的Linux上寫了一組指令碼,在某個節點上啟動程式並測定該叢集器的運行情況。這些程式由質數運算器、互動式空程式,及共用的記憶體使用量進程組成。
當節點在叢集器(雙CPU PIII 933-MHz,768MB RAM)之外時,該機器最高達到20個質數運算器、40個互動式任務,以及大約30個共用記憶體進程。運行了這些程式後,幾乎連登入都不能運行,再也不能添加額外的負載了。
而在叢集器中的情況就大為不同了,在最大的節點上可以運行450個以上的質數運算器、數百個shell和大約210個共用記憶體任務(記憶體參考模式規定,共用記憶體程式不能轉移到其他節點。)
如果在單個的電腦上要完成這些任務,不知道需要多高的配置,但至少不會低於Sun E6000或HP V2000大型主機的水平,它們的價格達十萬美元之巨。而現在所有這些硬體只需要不到2萬美元,是Linux使我們做到了這一點。
在多個節點上建立單一圖形叢集器只有在程式被轉移到另外節點時仍能看到其裝置和檔案時才是有意義的。Mosix無需中央儲存空間就能做到這一點,具體情況如何呢。
當一個進程轉移到叢集器中的另一個節點時,它的程式碼端仍保留在原來的節點上。每當需要輸入/輸出時,該進程會將請求發送到最初節點的程式碼端上,而後程式碼端在本地進行輸入/輸出處理並返回結果。
當然,這會加大輸入/輸出密集的程式的負擔。為減少這種網路活動,提高整個輸入/輸出的效率,Mosix開發人員開始將
通用檔案系統(Global File System,GFS)移植到Mosix叢集器中。
通用檔案系統是Linux的共用盤叢集器檔案系統。GFS支援客戶機故障時的日誌和恢複。GFS叢集器節點通過Fibre Channel或共用的SCSI 裝置物理共用共同的儲存空間。看起來,檔案系統在每個節點上都像是本地機上的,GFS使檔案訪問在叢集器中保持同步。GFS是完全對稱的,也就是說,所有節點都是均等的,沒有哪個伺服器會是瓶頸或出現任何故障。GFS在維護所有Unix檔案系統時使用讀/寫緩衝。
但是,GFS也存在著一個缺點,它只能運行在較新的SCSI控制器上,而不能在以前的產品上運行。不過對於裝備了新裝置並且確實有叢集必要的使用者來說,GFS是非常好的解決方案。
Mosix GFS執行的時間還不長,但效能確實很好。想想家裡要是有這麼個功能強大的巨型機該是多麼好的感覺。那麼,如果你有好幾台裝了Linux的閑置機器,又想搞個大型主機玩玩的話,就試試Mosix吧。
欲對Mosix有一個全面的瞭解,請訪問網站:http://www.mosix.org/。