http://linux.vbird.org/linux_server/0600cluster.php近年來因為數值模式模擬的盛行,所以『平行運算』的架構也就越來越重要了!什麼是數值模擬呢?主要就是藉由一些物理理論去開發出來的一些『計算公式』,而這些計算公式藉由程式語言(例如C、Fortran等等)實際的將他編譯成為可執行的程式,最常見的例如中央氣象局不是每天都會預報天氣嗎?這個預報的動作就是利用數值計算去演算出來的。另外,還有空氣品質模式模擬,也是經過運算出來的,除此之外,例如天文、物理、水文等等很多方面的工作,都是利用這種數值模擬的運算的喔!不過,這些程式是很大型的!也就是說,他們在運算的時間是很長的,如果使用單顆 CPU 的話,不論這顆 CPU 的頻率與效能有多高,還是得要運算個好幾個鐘頭的~如此一來,對於像氣象預報這個急需時效性的工作可能就會有所延誤啊!不過,如果我將這個運算的工作同時丟給多顆 CPU 呢?也就是讓多顆 CPU 同時進行這個程式的運算工作,如此一來,將可以大大的減低時間的損耗了~這就是平行運算的簡單說明。在 Linux 平台上面,要達成簡單的平行運算,可以透過 MPI 的函式庫,例如 MPICH 就是一個很有名的 MPI 軟體喔!馬上來給他看看平行運算類型的 Cluster 建置吧!
原理:
什麼是 Cluster 與 Cluster 的優點
什麼是 Cluster 呢?目前常見的 Cluster (叢集)架構有兩種,一種是 Web / Internet cluster system,這種架構主要是將資料放置在不同的主機上面,亦即由多部主機同時負責一項服務;而另外一種則是所謂的平行運算了!平行運算其實就是將同一個運算的工作,交給整個 Cluster 裡面的所有 CPU 來進行同步運算的一個功能。由於使用到多個 CPU 的運算能力,所以可以加快運算的速度。目前比較常見於平行運算功能的,通常需要在超級電腦上面才看的到,這些超級電腦主要是用在天文、軍事、物理等需要很精密的、大量的運算的工作中,而考慮到穩定性,則通常是用在 Unix 系統上面的硬體架構上。不過,目前由於 PC 上面的 CPU 的運算功能越來越強大了~因此,當然很多程式開發者就動腦筋到 PC 上面來製作平行電腦的系統囉!我們這篇短文主要在介紹的就是『平行運算』這一類的 Cluster 了!
由於 Cluster 主要是用在平行運算上面的,而所謂的平行運算是使用到多顆 CPU 的運算功能,因此可以讓您的大型運算的程式很快的執行完畢!因此,如果你的工作環境當中,常常會使用到很耗 CPU 運算功能的程式時,就可以嘗試使用 Cluster 來進行工作囉!應該可以節省您不少的時間吶!此外,我們這篇短文主要是在 X86 架構下的 PC 來架設 Cluster 的喔!
不過,也需要特別留意的是,由於我們的 Cluster 是將一個工作平均分給所有的 node (註:一顆 CPU 在一個 Cluster 架構下,就稱為一個 node 囉!),所以,萬一您做成的 Cluster 系統當中,所有的 node 並非完全相同的運算等級,那麼先做完工作的 node 將會暫停工作,會等到所有的 node 都進行完畢後,才會在進行下一動~所以啦!強烈的建議在同一個 cluster 的架構中,盡量所有的 CPU 都使用相同的 CPU 型號,應該會比較好一點喔!
在我們的 Linux 主機上面工作,通常使用 BASH 這個 shell 來傳達給 kernel 工作的訊息,以使主機正確的工作;而如果在不同的主機之間,那就可以使用 R Shell 來進行指令的下達喔,如此一來,我們就可以直接在 A 機器,向 B 機器下達工作的指令,而不需要登入 B 機器呢~那就是 RSH 的主要功能啦!最常見的 RSH 指令就是 rcp 與 rsh 了!有興趣的朋友應該知道以 man 來查尋一下該指令的用法囉!
需要附帶一提的是,這個 RSH 是『相當危險』的一個服務喔!由於我們可以直接登入 RSH 主機,並且在上面進行指令的下達,為了避免還要輸入密碼的問題,因此通常 RSH 已經將信任主機設定好了,不過,由於 RSH 會啟動一些 port 來監聽 Clients 的需求,而偏偏這些 port 與 daemon 都還挺危險的,因此,『Cluster 最好是設定在內部網域當中,並使用私有 IP ,比較能夠避免危險』喔!此外,那個 Master 也必須要設定好一定程度的嚴密防火牆喔!
基本上,幾乎所有的工作都是在 Master 上面做啦! Slave 最大的任務就是進行來自 Master 所要求的計算工作,因此,Slave 能夠越簡單越好~至於 Master 上面,由於我們都是在 Master 主機上面下達工作指令,而總不能老是在螢幕前面下達指令吧!因此上,Master 通常會有兩個網路介面,分別是對外的 Public IP 與對內的 Priavte IP。而既然 Master 有提供 Public IP 的設定,自然就比較擔心所謂的駭客入侵問題,所以啦,您的 Master 主機,要嗎就不要開放 Public IP ,要嗎就務必要設定很嚴密的防火牆,並且不必要的服務就盡量關閉他~畢竟我們的 Cluster 是要用來做為計算運作的,所以不必要的網路協定服務,當然就是關閉他啦!底下鳥哥將以自己的一個實際案例進行說明的啦!參考看看吧!
Master : 為雙 CPU 主機,使用 AMD MP 的 CPU ,並且有一顆 120 GB 的硬碟,此外,由於我的數值模式需要 PGI Fortran ,所以就必須要安裝 Server 版的 PGI Fortran 喔!
Slave : 共有三部 Slave ,每一部均為雙 CPU 的 AMD MP 的 CPU ,並且有一顆 120 GB 的硬碟;
連接 Master 與 Slave 的為 10/100/1000 的 Switch ,當然,四部主機(1 x master + 3 x slave)都是安裝 Intel 的 1GB 網路卡喔!
硬體連接有點像這樣:
那麼底下就來談一談怎麼安裝他吧!
系統安裝( Red Hat 9 )
我的這個系統使用的是最新的 Red Hat 出版的 Red Hat 9 ,會用這個玩意兒最大的原因是因為 Red Hat 是目前支援的 Linux 軟體最多的一個 Linux Distribution 了,安裝他之後,就比較不會欠東欠西的,此外,很多的軟體都是以 Red Hat 做為測試的平台,因此我就選擇他來做為我的系統平台啊!另外,需要留意的是,由於 Slave 並不需要使用到圖形介面的功能,他單純是用在計算上面,因此我沒有在 slave 上面安裝圖形介面的打算~至於 Master 則安裝了 KDE 這個咚咚喔!好了,Linux 的安裝相信大家應該都要很熟悉了,所以我就不再談安裝的詳細步驟,僅提幾個特別需要注意的地方囉:
server.cluster +
特別注意,由於 RSH 預設就是不支援 root 使用 R command ,所以您必須要到 master 上面去,並以一般身份使用者進行 R command 的測試才行喔!不要直接以 root 工作,會無法成功的啦!(顯示 permission deny 的啦!)
Master:
由於 RSH Server 上面的設定中,您的 User 家目錄必須要存在一個名為 .rhosts 的檔案,原本我的 Server 上面就有一個名為 test 的使用者,而並且為了讓我未來新建立的使用者都能夠使用 R command ,所以我在 Master 這部機器上面做了這樣的動作喔:
[root @server root]# vi /home/test/.rhosts
server.cluster
[root @server root]# vi /etc/skel/.rhosts
server.cluster
[root @server root]# chmod 644 /etc/skel/.rhosts
這樣就妥當的設定好了 RSH 囉!
安裝 Fortran 90 的編譯程式 PGI pgf90 ( PS. server version )
我由 PGI 的官方網站下載了最新的 PGI Server 套件,請特別留意的是,由於 PGI 有兩種模式,一種是工作站(Workstation)一種則是伺服器(Server)模式,其中,工作站僅能提供單一主機來操作,無法進行 Cluster 的功能的!因此,請務必要下載 Server 的版本,並且是支援 Linux 版本的喔!不要搞混了! PGI Fortran Server version 的下載網址在這個地方:http://www.pgroup.com/downloads.htm,請自行下載吧!比較需要留意的是,從上面這個網站下載的版本僅是分享軟體的版本,您安裝之後可以具有 15 天的免費使用期限,超過期限之後,又需要重新安裝一次,很是麻煩的啦!如果您的 Cluster 是用來進行學術研究的,那麼在測試完成之後,可能需要去他的網站註冊,這個註冊的費用差異可就很大了~因為未來我的 Cluster 需要一直不斷的運作,因此是需要去註冊的啦!並且,我只會用到 Fortran 這個編譯器,因此,我就直接使用 PGIHPF 這個版本來測試安裝而已,而不是使用全部 ( 含 PGI Fortran 與 C ) 的版本喔!因為註冊的價差差了兩~三萬台幣啊!安裝 Fortran 真是很簡單的啦!假設您將 linux86-HPF.tar.gz 放置在 /root/software 底下,則:(註:以下的動作僅只要在 Master 上面進行即可喔!)
# 再執行上面這個程式,就能夠知道 CPU 有沒有運作了! ^_^
呵呵!沒想到 PGI 的試用版本就能夠提供多顆 CPU 的 Cluster 運作,真是給他很高興!這樣既然可以測試成功了,自然就可以去向 PGI 的官方網站註冊了!註冊費用不低,但是挺值得的啊!
其他主機相關設定:
除了一些基本的 Cluster 設定之外,您的主機其實可能還需要其他的設定項目的!最常見的可能就是 X-Window System 的 server/slave 架構了!您總不希望老是呆在 cluster 前面吧?!粉吵的呢!這個時候,或許就會希望可以在 Client 端連接上 Server 的 X Server 囉!
X-Window Server/Slave 架構
架設一個很簡單的 X Server 真的是很容易,容易到讓你會很想笑出來~在上面的環境設定好了之後,請注意:『您的主機應該是在 run-level 為三的文字模式底下,也就是沒有 X Window 存在』才對!這個時候,要設定完成 X Server ,僅要修改一個檔案,並且啟動一支程式即可!先說明一下我的環境:
X Server 主機的 IP 是 192.168.10.30,作業系統是 Red Hat 9;
X Client 的 IP 是 192.168.10.100 ,作業系統同時是 Linux 與 Windows 2000 。
X Server 的設定:
由於我們需要啟動監聽來自 X Client 的要求,這個時候需要重新做一下設定:
1. 先備份原先的設定檔:
如果您的 X Client 同樣是 Linux ,那麼:『在這目前這個 Client 端連接到 X Server 端執行 X 視窗』的功能,只要進行幾個步驟就可以了!
0. 請務必要在 X Window 當中,進入 X Window 的方式有:
[root @client root]# startx
或
[root @client root]# init 5
1. 在 X Window 的畫面當中,啟用一個 shell ,然後輸入:
[root @client root]# xhost + 192.168.10.30
192.168.10.30 being added to access control list
[root @client root]# init 3 (離開 X Window)
2. 在文字介面下輸入:
[root @client root]# X -query 192.168.10.30
.....(進入 X Window 囉!)
X Client 的設定(在 Windows 上面):
如果您的 X Client 是在 Windows 上面,那麼就必須要額外的來執行其他的軟體了!目前您可以選擇購買 Exceed 這個連線軟體,或者是先『試用』 X-Win 這個軟體!都是用在 Windows 上面模擬連接到 Linux X Server 用的軟體啦!我這裡是以 X-Win 這套程式做為介紹的,您可以在各大學的 FTP 網站上面捉到這個軟體,當然,也可以在我這裡下載 5.4 版。
重要的地方在於 Query 這個選項,以及 192.168.10.30 這個 IP 指向喔!都設定好之後,給他 Save 一下,會出現:
上面的圖示當中,給他按下確定吧!然後呢?在右下角的 X 小圖示中 (
) 按一下 X 之後,就會出現剛剛我們建立的 My Linux X Server 這個選項,給他選擇下去的啦,呵呵!就會出現囉:
很棒吧!這樣就能在 Windows 上面連線進入 Linux 使用他的 X Window 功能囉!
後記:雖然架設一個 X Server/Client 是很簡單的一件事,不過,如果您的機器並不是在 LAN 裡面的話,而是在 Internet 上面進行 Server/Client 的 X 系統架構的連結,請特別留意的是,由於 X Window 的圖形介面需要一直傳輸圖形到您的工作機上面來,如此一來,將會損耗掉大部分的頻寬喔!在我的實際案例當中,發現到我的 X Server/Client 之間流量傳輸達到 2000 Kbits/second, 亦即是 250KBytes/second ,還記得流量的算法吧?!如果是 ADSL 撥接架構的話,目前已經蠻常見 下載/上傳 = 1.5M/386K 的傳輸速度,不過,即使下載達到 1.5M 了,不過在我的案例中竟然高達了 2.0M 的傳輸!呵呵!瞭解吧!所以囉,這個 X Window 的 Server/Client 架構請務必在內部網路架設就好,不要想連上 Internet 啊!會等的快睡著.....
重點回顧
Cluster 可以是平行計算的一種,主要除了雙 CPU 系統外,也可以用在多主機架構下的一種增快數值計算的方式;