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/。