級別: 初級 |
自由技術文章撰稿人
2005 年 1 月
集群(一組協同工作的計算機)是充分利用計算資源的一個重要概念,因為它能夠將工作負載從一個超載的系統(或節點)遷移到集群中的另一個系統上。本文將闡述如何使用基于 Knoppix 的 LiveCD 建立一個負載平衡 Linux™ 集群。
超級計算機(Supercomputer)是一個通用術語,指的是比普通計算執行速度快得多的計算機。集群(cluster)指的是一組計算機,它們能夠(還有其他能力)將工作負載從一個超載的單元遷移到集群中的其他計算機上。這一特性稱為負載平衡(load balancing)。在本文中,您將了解到如何建立一個負載平衡集群。
集群通過有效地平衡負載提高了自身的效率,并在超級計算機家族中贏得了一席之地。為了轉移負載,集群中的計算機必須彼此連接起來。
集群中的計算機稱為節點。集群由一個或多個主節點(master node)和若干個從屬節點(drone node)或者從節點(slave node)來管理。在典型的設置中,應用程序在主節點上開始運行。主節點負責根據需要將應用程序遷移到從屬節點上。
在本文中,您將了解到如何使用基于 Knoppix 的 LiveCD 來建立完全屬于您自己的超級計算機。您可能聽說過 LiveCD;它們是可以在安裝之前進行嘗試的、出色而完整的 Linux 系統,從 CD 光驅就能夠完成對它們的引導。從出現 LiveCD 的時候起,一些用戶和項目就一直使用 LiveCD 作為他們的演示平臺,而且,從早期的“DemoLinux”年代至今,LiveCD 已經歷了一段漫長的歲月。
但是首先要了解超級計算集群的一些背景。
什么是超級計算機?
超級計算機通常用于需要執行大量計算、處理大規模數據庫或者二者兼具的科學上和工程上的應用程序。(超級計算機這一術語也可以是指速度慢了很多但仍然讓人感覺很快的系統。)
實際上,大部分超級計算機系統是多臺連接到一起的計算機,使用以下兩種普通的并行處理方法之一來進行并行處理:
在 SMP(也稱為“緊耦合的(tightly coupled)”多處理和“共享所有”的系統)中,處理器共享內存和 I/O總線或者數據通路,由單一的操作系統來控制這些處理器。在大部分 SMP系統中,通常最多有十六個處理器。當執行在線事務處理(OLTP,在這類處理中,很多用戶使用一組簡單的事務來訪問同一數據庫)時,SMP 系統比MPP 更具優勢。這種裝置中的動態工作負載平衡使得 SMP 可以出色地勝任這類任務。
MPP 系統(也稱為“松耦合的(loosely coupled)”或者“無任何共享”的系統)的特性是:有很多處理器,每個處理器都有用于自己的操作系統的內存,可以同時處理同一程序的不同部分。系統使用一個消息接口和一組數據通路來使處理器彼此通信。最多可以有 200 個處理器從事同一任務。建立 MPP 系統可能會較復雜,因為當涉及到包裝系統資源以及在處理器間分配任務時,需要制定很多計劃(記住,沒有東西 是共享的)。MPP 系統的優勢在于用戶用來同時搜索數量極多的數據庫的應用程序。
IBM® Blue Pacific 是高端超級計算機的一個恰當例子。這個擁有 5,800 個處理器、3.9 teraflop 運算能力的系統(有 2.6 萬億字節的內存)是與 Lawrence Livermore National Laboratory 合作構建的,為的是模擬核反應的物理過程。
集群代表的是低端的超級計算,這是一種更可能自行構建(build-it-yourself)的方法。最流行而且最知名的示例之一是 Beowulf Project,它闡述了如何使用現成的 PC 處理器、快速以太網和 Linux 操作系統來手工構建(handcraft)超級計算機。請參閱下面的參考資料一節,以獲得關于 BeoWulf Project 的更多資料。
既然您已經在適當的環境中創建了集群,那么現在我將向您介紹如何開始建立您自己的集群。
不可思議的工具:ClusterKnoppix 和 openMosix
在開始構建您的集群之前,還要做另外一件事情:快速了解一下您將要使用的主要發行版本 —— ClusterKnoppix,以及它所包含的支持集群的內核:openMosix。
主要發行版本:ClusterKnoppix
顧名思義,ClusterKnoppix 是 Knoppix 的衍生版本。ClusterKnoppix 為用戶提供了 Knoppix 的所有益處(豐富的應用程序、run-off-the-CD、不可思議的硬件偵測能力和對多種外部設備的支持)以及 openMosix 集群能力。在參考資料一節,有關于 ClusterKnoppix 和 openMosix 的更多資料的鏈接。
各種其他基于 CD 的 openMosix 發行版本包括 Bootable Cluster CD(BCCD)、ParallelKnoppix、PlumpOS、Quantian 和 CHAOS。不過,ClusterKnoppix 可能是最為流行的“主節點”發行版本,因為它:
跨節點管理程序:openMosix
除了硬件與計算機間的連接之外,您還需要可以管理分布在多個從屬節點上的程序的軟件。
在非集群的計算機中,操作系統允許將應用程序從存儲媒體(比如硬盤和 CD)加載到內存中并開始運行它。操作系統負責被執行應用程序的完成。
我選擇了 openMosix —— 一個設計用于單一系統映像集群的 Linux 內核擴展 —— 因為它允許操作系統(在我們的例子中是 Linux 內核)從任何集群節點將應用程序加載到內存并在集群的任何節點上去運行。所有給定的應用程序都被遷移到可用能力或資源最多的節點上。
一旦安裝了 openMosix,集群中的節點就會開始通信,并且,集群通過優化資源分配,不斷地根據工作負載對自己進行調整。自動發現(Auto Discovery)是 openMosix 的特性之一,它允許在操作集群的同時添加新的節點。
按照 openMosix Project 的說法,openMosix 可以擴展到 1,000 多個節點。
構建集群
為此,我使用了兩臺計算機。主節點是一臺 Pentium™ III 1.7-GHz 計算機,擁有 384 MB 與顯示卡共享的 RAM。從屬節點是一臺 Pentium III 997-MHz 計算機,擁有 256 MB 專用 RAM。兩臺機器都有 CD-ROM 驅動器。兩臺機器上有 RealTek 10/100 Mbps 局域網卡,通過一根標準的交叉網線將它們連接起來。
如果您的家用網絡設置有兩臺(或者更多)使用網線連接起來的計算機,那么您的設置將與我的類似。
您還需要 ClusterKnoppix(撰寫本文時,其最新版本為 clusterKNOPPIX V3.4-2004-05-10-EN-cl)。當從屬結點在網絡上引導起來時,ClusterKnoppix 能夠發現它們,不過您需要支持通過網絡引導的特定的局域網卡和 BIOS。由于復制 CD 的代價很低,而且您需要在所有節點上運行 X,所以最簡單的方法是集群中有多少個節點就使用多少張 ClusterKnoppix CD。
可以為集群中各個的節點使用下面的網絡設置:
我就不再詳述 Linux 中的網絡。有很多信息可以使用;請參閱下面的參考資料。
初始化主節點
openMosix 并不要求將第一個節點初始化為主節點,不過,為了直觀,首先要建立主節點。
boot:
提示符時,按 Enter。給 ClusterKnoppix 留一些時間來檢測和引導硬件。默認情況下,將其引導至 KDE。
ifconfig eth0 192.168.1.10
。route add -net 0.0.0.0 gw 192.168.1.1
。這樣就設置好了網絡。
tyd -f init
。tyd
。然后,您需要初始化從屬節點。
初始化從屬節點
建立一個從屬節點與建立主節點沒有太大區別。重復前面初始化主節點的前三個步驟。嘗試自己使用前面所提到的值來配置從節點的網卡(ifconfig eth0 192.168.1.20
和 ifconfig eth0 192.168.1.20
)。
tyd -f init
。tyd -m 192.168.1.10
。就這樣!您的集群已經就緒。
熟悉跟蹤工具
您需要檢查集群的狀態;ClusterKnoppix 采用了以下跟蹤狀態的工具:
openMosixview
在root shell中輸入這個工具的名稱來打開它。該工具將檢測出集群中節點的數目,并顯示一個精美的、外觀奇特的界面。很快,您就可以看到集群的效率、集群的負載、集群的可用內存、已經使用的內存所占百分比以及其他信息。此時您還不會看到太多的活動,因為幾乎還沒怎么使用集群。用一些時間來讓自己熟悉這個應用程序。
openMosixmigmon
這個應用程序顯示已經從主節點遷移到從屬節點的進程。將您的鼠標移到中間的圓圈周圍的正方形。您將得知進程的名稱和它的 ID。為了將某個進程從主節點“遷移”出去,需要拖動正方形并將其放入較小的圓圈中(從屬節點)。
OpenMosixAnalyzer
這個簡單的應用程序報告了從初始化集群到完成其創建這段時間內集群以及各個節點的負載情況。
mosmon
這個基于命令行的監控器向您實時地顯示集群上的負載、可用的內存、正在被使用的內存以及其他內容??梢圆榭雌涫謨詠砹私馊绾味ㄖ埔晥D。
mtop
那些熟悉 top 的人對這個工具會很感興趣。top 保持對計算機上運行的每個進程的跟蹤。mtop 是支持集群的 top 的變體,也會顯示每個進程,而且會給出運行那個進程的節點的附加信息。
測試集群
既然集群已經準備就緒,那么現在就可以使其超載。為此,您需要借用好心的 CHAOS 發行版本的開發人員編寫的一個腳本:
|
打開一個字處理器,復制這個腳本,并將其保存為 testapp.c。使集群中的所有節點都可以使用該腳本。
為了使用這個腳本,需要在所有節點上執行這些命令。首先要編譯這個 C 程序:
gcc testapp.c -o testapp
然后,執行 ./testapp
。
在所有節點上至少執行此腳本一次。我在每個節點上執行了三次。
執行每個實例后,切換到前面描述的應用程序。注意行為的變化。享受看著您自己構建的集群將進程從一個節點遷移到另一個節點的樂趣吧??茨?,它正在平衡負載!
您剛才都做了些什么?
既然一切都已經就緒,讓我們來回顧一下都做了些什么。
首先,配置機器上的網卡,并為它們指定 IP 地址。然后,為它們提供一個通信用的公共路由。最后,使用 tyd
命令初始化 openMosix 系統。(ClusterKnoppix 借用了 CHAOS 項目的 tyd
,明確地說是“tidy”。)
您可以只在集群中的第一個節點上執行 tyd
而不進行任何切換。這個節點不必是主節點。所有后續節點都是通過 IP 地址后的 -m
開關來添加的。
當初始化第二個節點時,IP 地址必須是第一個節點的地址。不過,當初始化第三個節點時,您可以在節點一和節點二這兩個 IP 地址之間作出選擇。
接下來做什么?
當掌握這項技術之后,除了在兩個節點上都使用 ClusterKnoppix 來建立集群以外,還可以建立一個異構的集群。在這類集群中,除了主節點以外,不需要在從節點上運行 GUI。您可以運行一個支持 openMosix 但又像 Linux 內核一樣小的發行版本。在從屬節點上運行的發行版本的最普遍選擇可能是 CHAOS。它占用的內存很少,這將幫助您為集群節約內存,而且它安全、可靠且速度很快。
還等什么?盡情展示您自己構建的集群吧!
參考資料
關于作者 在過去的 5 年中,Mayank Sharma 一直在從事技術方面的寫作,尤其是免費和開放軟件方面。他幫助創辦了南亞最主要的 FLOSS 月刊 LINUX For You(作為其助理編輯),現在正忙于整理專門論述本地化、培訓和 FLOSS 遷移的基于 Web 的出版物。除了寫作之外,Mayank 還喜歡研究駭客技術;他最新的貢獻是用于Utkarsh 本地化項目的一個安裝器。雖然他正在為計算機科學學位而努力,但對于 Formula One 賽車,他依然興趣不減。 |