linux集群中MPI的並行計算環境簡單配置


一、集群和Linux上的集群解決方案

集群計算機是指用一組聯網的PC或工作站來搭建成的,提供比單個PC(節點)計算性能高得多的計算機。說其是計算機,其實是針對所提供出來的服務而言的,或者說是邏輯上來說的。集群計算機的主要優勢就是成本,相同的計算能力下,其成本只有傳統大型機的十分之一,在全球計算機TOP500中,集群計算機的比重越來越大,近兩年的比重超過了80%。特別是對中小企事業應用,實驗研究和教學有很大的競爭力。

集群系統(Cluster)主要解決下面幾個問題:

1.高可靠性(HA)。利用集群管理軟件,當主服務器故障時,備份服務器能夠自動接管主服務器的工作,並及時切換過去,以實現對用戶的不間斷服務。

2.高性能計算(HP)。充分利用集群中的每一台計算機的資源,實現復雜運算的並行處理,通常用於科學計算領域,比如基因分析,物理與化學分析等。

3.負載平衡。即把負載壓力根據某種算法合理分配到集群中的每一台計算機上,以減輕主服務器的壓力,降低對主服務器的硬件和軟件要求。

在實際應用中,最常見的情況是利用集群解決負載平衡問題,比如用於提供WWW服務。在這里主要展示如何使用LVS(Linux Virtial Server)來實現實用的WWW負載平衡集群系統

關於集群計算機的操作系統,在TOP500中現在主要的操作系統都有身影,但是應用最多的是LINUX操作系統。這首先利益於LINUX的開放源代碼,使得其有很高的可制定性,可以根據不同的硬件和應用環境作出相應的修改,其次,LINUX也有很高的穩定性,而且不乏商業支持。

為了降低程序開發的難度和提高程序的可移植性,目前基於LINUX的集群計算環境主要是通過配置MPI(Message Passing Interface)環境可實現的。這也是目前比較成熟的應用模式。因此,本文主要講解LINUX下的集群環境配置的要求和MPI的配置。

LINUX集群環境的配置主要有以下幾個部分:

<!--[if !supportLists]-->1. <!--[endif]-->MPI並行計算環境的安裝和配置

<!--[if !supportLists]-->2. <!--[endif]-->計算節點之間的無密碼訪問

<!--[if !supportLists]-->3. <!--[endif]-->NFS共享文件系統的配置

//

注:在集群配置過程中,MPI運行環境的安裝和配置是必要的,至於計算節點之間的無密碼訪問和NFS共享,則是在運算效率和文件管理上對高性能計算提出的要求。一般來說,只要具有MPI運行環境可以運算並行計算。

二、linux集群中MPI的並行計算環境的簡單配置

MPI的安裝及簡單測試

MPI有多種實現版本,如MPICH, CHIMP以及OPENMPI。其中MPICH是一種最重要的MPI實現,它可以從網上免費獲得Linux和Windows版本。它的開發和MPI規范的制定是同步的,因此最能反映MPI的變化和發展,MPICH由此成為實現MPI的最成熟和最廣泛使用的版本。本文安裝的MPI軟版本為MPICH-1.2.6。

安裝步驟:

1、從網上下載MPICH壓縮包(mpich.tar.gz)

2、解壓:# tar zxvf mpich.tar.gz

3、進入解壓后的目錄: # cd mpich-1.2.6

4、配置: # ./configure –prefix=/usr/local/mpich

其中/usr/local/mpich為軟件所安裝的目錄

5、編譯 # make

6、安裝 # make install

7、配置該軟件的用戶搜索路徑

Root 用戶下:修改/etc/profile 加入

PATH=$PATH:/usr/local/mpich/bin

MANPATH=$MANPATH:/usr/local/mpich/man

Export PATH MANPATH

普通用戶下:修改~/.bash_profile 加入

export PATH=$PATH:/usr/local/mpich/bin

8、修改/usr/local/mpich/share/machines.LINUX文件,加入集群中可以用來做並行計算的主機名(八節點集群為例)

加入的內容為:

Local:4

Node11:4

Node22:4

(注:冒號后為節點的CPU數或者內核數)

9、MPI環境的簡單測試

在服務器節點上,以mpich 自帶的計算PI值的並行計算程序cpi對所搭建的集群環境做簡單的測試。

步驟:

在/usr/local/mpich/example目錄下

(1) 編譯 # make cpi

(2) 啟動並行計算 # mpirun –np N cpi (其中N 為節點機的個數)

可以看到PI值及誤差和計算時間,說明環境搭建基本成功。至此,所組建的MPI集群基本成。

雖然現在主流的集群配置都是基於MPI的,但是由於MPI的標准和MPI實現的多樣性,特別是商業應用領域中不同的商業封裝的存在,在MPI環境的安裝和配置過程中,要詳細的閱讀相關的幫助文件。以求正確的配置好MPI運行環境。

三、計算節點之間的無密碼訪問

這 一點主要是針對高性能計算來說的。在高性能計算中,計算任務被分割成並行的幾個部分,而這幾個部分之間也是有相互關聯,根據計算任務的不同和任務分割的方 法的不同。計算節點之間的通信量也是不同的。這也是衡量和影響集群計算機性能的主要方面。從邏輯上講,計算節點之間的無密碼訪問可以使計算進程在集群計算 機內自由跳躍,從而提高集群計算的效率。目前主要的訪問機制有RSH和SSH,相對來說SSH的安全性更好些。關於這兩種節點間訪問機制的配置,網上有很多的教程,本文將簡述SSH在節點之間的無密碼訪問。

實現原理

使用一種被稱為"公私鑰"認證的方式來進行ssh登錄. "公私鑰"認證方式簡單的解釋是

首先在客戶端上創建一對公私鑰 (公鑰文件:~/.ssh/id_rsa.pub; 私鑰文件:~/.ssh/id_rsa)

然后把公鑰放到服務器上(~/.ssh/authorized_keys), 自己保留好私鑰

當ssh登錄時,ssh程序會發送私鑰去和服務器上的公鑰做匹配.如果匹配成功就可以登錄了

1.用用戶anyone登錄客戶機器並在客戶端機器上執行"ssh-keygen -t rsa"產生的密鑰文件。


如果文件"~/.ssh/id_rsa"存在,會提示是否覆蓋該文件,此時可選擇"n"不覆蓋該文件而使用已有的id_rsa文件;如果選擇"y"則會重新生成"~/.ssh/id_rsa"文件,接下來會提示輸入passphrase,回車確定使用空的passphrase,再次回車確認(這里也可以輸出passphrase,相當於ssh時登錄的密碼)。然后會重新生成"~/.ssh/id_rsa"文件和"~/.ssh/id_rsa.pub"文件(結果如下)。

如果"~/.ssh/id_rsa"文件和"~/.ssh/id_rsa.pub"文件不存在則會自動創建新的"~/.ssh/id_rsa"文件和"~/.ssh/id_rsa.pub"文件,passphrase設置同上。

2、使用ssh登錄到服務器,編輯服務器上"~/.ssh/authorized_keys"文件,將客戶端機器上的"~/.ssh/id_rsa.pub"文件內容追加到"~/.ssh/authorized_keys"文件中。

此時會要求輸入zhaoy在服務器上的登錄密碼,輸入后即會將客戶端機器上的"~/.ssh/id_rsa.pub"文件內容追加到服務器上的"~/.ssh/authorized_keys"文件中)

3.完成了密鑰的生成和分發之后就可以進行無密碼的SSH登陸了,當然在密鑰的生成和分發過程中,有很多可控的參數。這一點要注意查看相關的MAN和使用GOOGLE來解決。

四、NFS共享文件系統的配置

配置NFS共享文件系統是因為在高性能計算過程中,各計算節點要頻繁對任務進行數據的讀取和存儲。使用NFS一來可以提高I/O讀寫的效率,可以有針對性的提高NFS系統的可靠性。另外有一點需要注意,在配置計算環境時,要盡量使得與節點配置無關的文件處於NFS系統中,這可以提高管理效率,降低文件冗余。還有就是使文件系統在各個節點上有相同的路徑。關於NFS的設置網上和書本中有很多。下面簡單介紹一下。

<!--[if !supportLists]-->1. <!--[endif]-->服務器端的設定

服務器端的設定都是在/etc/exports這個文件中進行設定的,設定格式如下:

欲分享出去的目錄 主機名稱1或者IP1(參數1,參數2) 主機名稱2或者IP2(參數3,參數4)
上面這個格式表示,同一個目錄分享給兩個不同的主機,但提供給這兩台主機的權限和參數是不同的,所以分別設定兩個主機得到的權限。

例如可以編輯/etc/exports為:

/tmp     *(rw,no_root_squash)

/home/public 192.168.0.*(rw)   *(ro)

/home/test  192.168.0.100(rw)

/home/linux  *.the9.com(rw,all_squash,anonuid=40,anongid=40)

設定好后可以使用以下命令啟動NFS:

/etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默認啟動的)

/etc/rc.d/init.d/nfs start

可以通過MAN命令來查看exports的相關參數。

<!--[if !supportLists]-->2. <!--[endif]-->客戶端設定

mount nfs目錄的方法:

mount -t nfs hostname(orIP):/directory /mount/point

具體例子:

Linux: mount -t nfs 192.168.0.1:/tmp /mnt/nfs

關於mount和相關參數可以查看相關的MAN文件。

轉]MPI cluster技術簡介與鳥哥的架設實例

簡易cluster架設

近年來因為數值模式仿真的盛行,所以『平行運算』的架構也就越來越重要了!什么是數值仿真呢?主要就是藉由一些物理理論去開發出來的一些『計算公式』,而這些計算公式藉由程序語言(例如C、Fortran等等)實際的將他編譯成為可執行的程序,最常見的例如中央氣象局不是每天都會預報天氣嗎?這個預報的動作就是利用數值計算去演算出來的。另外,還有空氣品質模式仿真,也是經過運算出來的,除此之外,例如天文、物理、水文等等很多方面的工作,都是利用這種數值仿真的運算的喔!不過,這些程序是很大型的!也就是說,他們在運算的時間是很長的,如果使用單顆 CPU 的話,不論這顆 CPU 的頻率與效能有多高,還是得要運算個好幾個鍾頭的~如此一來,對於像氣象預報這個急需時效性的工作可能就會有所延誤啊!不過,如果我將這個運算的工作同時丟給多顆 CPU 呢?也就是讓多顆 CPU 同時進行這個程序的運算工作,如此一來,將可以大大的減低時間的損耗了~這就是平行運算的簡單說明。在 Linux 平台上面,要達成簡單的平行運算,可以透過 MPI 的函式庫,例如 MPICH 就是一個很有名的 MPI 軟件喔!馬上來給他看看平行運算類型的 Cluster 建置吧! 

原理: 
   :什么是 Cluster 與 Cluster 的優點 
   :Cluster 的主從架構 
   :達成 Cluster 所需要額外功能 ( RSH ) 與軟件 ( MPICH ) 
架設流程: 
   :整體架構 
   :鳥哥的一個實例規范 
   :系統安裝 ( Red Hat 9 ) 
   :防火牆 ( 含 NAT 主機 ) 與網絡設定 
   :NFS 架設規划(相當重要,參考說明) 
   :NIS 架設規划 
   :RSH 設定 
   :安裝 Fortran 90 的編譯程序 PGI pgf90 ( PS. server version ) 
   :安裝 MPICH 
-------------------------------------------------------------------------------- 

原理: 

-------------------------------------------------------------------------------- 

什么是 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 型號,應該會比較好一點喔! 


-------------------------------------------------------------------------------- 

Cluster 的主從架構 

最簡單的 Cluster 其實就是以一種主從架構來進行資料的運算工作的,圖標如下: 

上面的 Master 與 Slave 指的都是 CPU 喔! 

Master 那部機器上面必須要有可以將工作分配給各個 node 去工作的函式庫,也就是 MPI ,他最重要的功能就是將工作給他分配下去的啦!而最重要的軟件就是:(1)MPICH;(2)編譯器(compiler, 例如 Fortran); 

什么是網絡功能呢?如果 master 與 slave 是在同一部機器當中,例如雙 CPU 的主機板,那么這里就不需要網絡功能啦!不過,如果我是使用四台雙 CPU 的 PC 呢?呵呵!那么這四部主機就需要以高速網絡架構進行聯機啦!此外,還需要在這四部主機之間建立可以互通訊息的通訊協議才行,這方面的功能就含有:(1)R Shell, 亦即稱為 RSH;(2)NIS,使 Master 與 Slave 具有相同的帳號群組關系;(3)NFS,使讀取寫入的資料可以在同一個 partition 上面; 

Slave 就是單純的將來自 Master 的任務給他做完就是了! 

整個主從架構大致上就是這樣啦!因此,可以知道的是,我們需要的就是上面那些咚咚啰! 

-------------------------------------------------------------------------------- 

達成 Cluster 所需要額外功能 ( RSH ) 與軟件 ( MPICH ) 

由上面的 Cluster 主從架構當中,我們知道 Master 與 Slave 之間的網絡溝通很重要的一個咚咚,那就是 R Shell 啰!此外,還有將一個工作傳送給不同的 node 來進行計算的任務,就需要 MPICH 這個函式庫來進行!簡單的談一談這兩個玩意兒吧! 

RSH: 
在我們的 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 也必須要設定好一定程度的嚴密防火牆喔! 

MPICH: 
MPI 是 Messages Passing Interface 的縮寫,他本身是一個規格很嚴密的通訊標准,主要的功能是在處理平行運算之間各個 node 的資料交換,請注意, MPI 並不是一套軟件喔!而至於 MPICH 就是符合 MPI 這個標准通訊協議的一套軟件了!因此,我們可以經由 MPICH 這個軟件提供的 MPI 函式庫來達成平行運算的功能喔!也就是說,我們所寫的程序,只要能夠使用 MPICH 提供的函式庫,那么該程序就可以進行平行運算時候所需要的功能了,這就可以避免程序開發者還要去處理通訊節點上面的問題,而可以將程序開發的重心着重在程序本身的問題上面! 
MPICH 是由 Mathematics and Computer Science Division的 Argonne 實驗室所發展,詳細的資料可以參考:http://www-unix.mcs.anl.gov/mpi/mpich/ 

除了這兩個軟件之外,還需要 NIS 與 NFS 喔!所以啦!要建置一個 Cluster 的話,身為系統管理員的您,必須要學會的技能真是相當的多的,至少需要: 

熟悉 Linux 的操作技巧; 
熟悉 Linux 基礎網絡參數設定; 
熟悉 Linux 相關的 Server 架設(這方面請參考鳥哥的私房菜架站篇); 
了解 RSH 的相關功能與設定技巧; 
了解 MPICH 的設定與相關功能; 
熟悉至少一種程序語言。 

還真的是不好學啊!鳥哥也是新手玩弄 Cluster 說~大家一起研究研究吧! 

-------------------------------------------------------------------------------- 

架設流程 

要架設 Cluster 當然就是需要多部的 PC 來聯機啦!不然怎么稱為 Cluster 呢?您說是吧!所以,無論如何,在架設 Cluster 之前,請務必要確認您的『所有硬件以及網絡功能都是完整無缺的!』否則就無法繼續下去啦!另外,建議 Cluster 的所有主機規格盡量相同,可以避免等待的困擾呢!底下就來談一談整個架設流程吧! 

-------------------------------------------------------------------------------- 

整體架構 

整體架構的架設當中,需要的所有軟件為: 

Master 主機安裝需要: 
防火牆的設定(含 NAT 架設); 
RSH 
NIS Server 
NFS Server 
Compiler Install 
MPICH Install 
其它特殊功能 

Slave 主機安裝需要: 
防火牆的設定 
RSH 
NIS Client 
NFS Client 

基本上,幾乎所有的工作都是在 Master 上面做啦! Slave 最大的任務就是進行來自 Master 所要求的計算工作,因此,Slave 能夠越簡單越好~至於 Master 上面,由於我們都是在 Master 主機上面下達工作指令,而總不能老是在屏幕前面下達指令吧!因此上,Master 通常會有兩個網絡接口,分別是對外的 Public IP 與對內的 Priavte IP。而既然 Master 有提供 Public IP 的設定,自然就比較擔心所謂的駭客入侵問題,所以啦,您的 Master 主機,要嗎就不要開放 Public IP ,要嗎就務必要設定很嚴密的防火牆,並且不必要的服務就盡量關閉他~畢竟我們的 Cluster 是要用來做為計算運作的,所以不必要的網絡協議服務,當然就是關閉他啦!底下鳥哥將以自己的一個實際案例進行說明的啦!參考看看吧! 

-------------------------------------------------------------------------------- 

一個實例規范 

在我這個案例當中, Cluster 主要的功能為:進行 MM5 這個氣象模式的運算以及 Models-3/CMAQ 這個空氣品質模式的運算,而由於這兩個咚咚都是使用 PGI Fortran 90 做為 Compiler ,因此,我就必須要進行 PGI 的安裝啦!而我的硬件架構主要是這樣的: 

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 的安裝相信大家應該都要很熟悉了,所以我就不再談安裝的詳細步驟,僅提幾個特別需要注意的地方啰: 

Partition 方面: 
因為我的硬盤實在是在蠻大的,並且在 Slave 上面也是 120 GB 的硬盤,如果不將 Slave 的硬盤使用的話,實在覺得很浪費,因此,一開始我就規划將四部主機的硬盤全部都以 NFS 分享到內部網域當中,而為了避免跟系統的檔案放在一起,因此,我就將硬盤分割出除了必要的 partition 之外,其它的就掛載在 /disk1 這個目錄當中,四部主機的 parition 都相同,分別是: 

/ : 10 GB 
/var : 5 GB 
/tmp : 3 GB 
Swap : 3 GB ( 因為我每部 Linux 主機上面都有 1.5 GB 的內存 ) 
/disk1: 96 GB 


安裝時選擇的套件: 
所有的主機都需要底下的套件安裝(注:因為原本的筆記記錄的很亂,所以如果找不到相同的字眼,那就是我寫錯啦!): 
Administrator Tools 
Development Tools 
Editor 
Enginerring 
Kernel Development 
Network Servers 
Server configure 
Sound and vedio tools 
System Tools 
Text-based 
Windows servers 
不過, Master 需要額外再增加 X Window 方面的支持,例如 KDE 與 X-Window System 這兩個主要的套件要勾選喔! 

系統安裝大致上就是這些吧,如果有疏漏的,請未來在安裝完畢之后,再以原本 Red Hat 9 的光盤來重新安裝他吧!反正 Red Hat 系統都是以 rpm 來安裝的,挺容易安裝的喔!整個安裝完畢后,還花不到幾分鍾呢! 
-------------------------------------------------------------------------------- 

防火牆 ( 含 NAT 主機 ) 與網絡設定 

由於我們的 Cluster 主要是用在數值運算,因此,當然不需要對外開放網絡服務啦!所以,最好就是以私有 IP 來進行網絡的設定是比較好的!此外,最好還是要設定好防火牆的啦!我的網域參數預設是這樣的: 

Network/netmask:192.168.10.0/255.255.255.0 
Master:(對外)140.116.xxx.yyy;(對內)192.168.10.30, Gateway 為對外的 Gateway 喔!並且有設定 NAT 啊! 
Slave:192.168.10.10, 192.168.10.20, 192.168.10.40 三部,Gateway 為 192.168.10.30 

網絡參數的各個檔案是這樣的: 


各個主機的主機名稱請修改:/etc/sysconfig/network 
各個主機的網絡卡設定項目請修改:/etc/sysconfig/network-scripts/ifcfg-eth0 
各個主機的 DNS 查尋系統請修改:/etc/resolv.conf 
各個主機的內部主機名稱查尋系統請修改:/etc/hosts,我的 /etc/hosts 如下: 
127.0.0.1 localhost localhost.localdomain 
192.168.10.10 node1.cluster 
192.168.10.20 node2.cluster 
192.168.10.30 server.cluster 
192.168.10.40 node4.cluster 

而我的每部主機先將所有的網絡服務都給他關掉去,僅剩下 SSH 這個網絡協議存在而已~所以,我利用 Red Hat 提供的 ntsysv 這個指令來選擇開機時激活的項目有: 

atd 
crond 
iptables 
keytable 
network 
random 
sshd 
syslogd 
xinetd 

至於防火牆系統的規划上面,由於 Master 主機 (192.168.10.30) 具有 NAT 的功能,所以必須要修改一下他的防火牆機制,因此,就有兩個不同的防火牆機制 scripts 啰!另外,由於擔心外來的入侵攻擊,因此,在這個 Cluster 的系統當中,我的 iptables 防火牆機制是使用『MAC(網絡卡卡號)』來做為設定的基准,而不是使用 IP 啊!為什么呢?因為反正我僅允許我自己同網域內的幾部計算機連進來而已,當然沒有必要針對 IP 啊!所以啰,就必須要收集四部主機的網絡卡來允許他進入啰。此外,由於我可能並不在 Cluster 前面操作,因此會啟用一兩部主機的網絡卡卡號,好讓他能夠進入 Cluster 呦!底下就將我的防火牆機制給他列出來一下: 

Master: 
#!/bin/bash 
# This program is for iptables' rules 
# VBird 2003/05/02 

# 0. PATH and modules 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
export PATH 
modprobe ip_tables 
modprobe iptable_nat 
modprobe ip_nat_ftp 
modprobe ip_nat_irc 
modprobe ip_conntrack 
modprobe ip_conntrack_ftp 
modprobe ip_conntrack_irc 

# 1. clear the rules and make the policys 
iptables -F 
iptables -X 
iptables -Z 
iptables -F -t nat 
iptables -X -t nat 
iptables -Z -t nat 
iptables -P INPUT DROP 
iptables -P OUTPUT ACCEPT 
iptables -P FORWARD ACCEPT 
iptables -t nat -P PREROUTING ACCEPT 
iptables -t nat -P POSTROUTING ACCEPT 
iptables -t nat -P OUTPUT ACCEPT 


# 2. NAT services 
echo "1" >; /proc/sys/net/ipv4/ip_forward 
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j MASQUERADE 

# 3. Trust network and conditions 
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A INPUT -i lo -j ACCEPT 
iptables -A INPUT -m mac --mac-source XX:YY:ZZ:WWQ -j ACCEPT 
# 上面這一行就是網絡卡的卡號啦! 

Slave: 
Slave 的防火牆機制跟 Master 幾乎一模一樣,只是因為在內部啊,所以不需要激活 NAT 的服務即可!上面的給改一改先~ 

好啦!網絡的設定與防火牆就到這里為止,要記得喔,你的網絡必須要已經能夠正確的激活了!如果還是無法激活網絡,或者是防火牆機制還是有問題,那么對外的那個網絡卡的網絡線還是先給他拔掉吧!比較安全一些些的啦!等到都設定妥當,尤其是防火牆,然后才來激活他吧! 

-------------------------------------------------------------------------------- 

NFS 架設規划 

由於我這里預計要設定 NIS ,並且每部主機的 /disk1 都要分享出去,因此,每部主機都必須要開放 NFS 的服務喔!並且,每一部主機的設定都可以相同吶!這樣比較容易來設定啰~此外,比較不一樣的地方在於 Master 這一部,由於我的 Cluster 所有的帳號都在 NIS 的管制之中,因此,我將 Master 的 /home 也分享出來,並且每部 Slave 主機都掛載 Master 的 /home 才成! 

這個 NFS 在 Cluster 當中是相當重要的,為什么呢?因為我們不是在四部主機上面工作嗎,而這四部主機會去讀取的『資料』其實都是『在本機上面可以看的到的』資料才行,這還包括底下我們會持續介紹的 mpich 這個軟件的函式庫呢!也就是說:『在 Cluster 里面,所有的機器會使用到的資料必須都在相同的目錄當中!』所以,這就是為什么我們要對 /home 進行分享,以及進行 NIS 的設定了!此外,因為我的 Server 這部 Master 機器分享出去的目錄中,已經含有 /disk1 這個 partition,此外,還通通將他掛載在 /cluster/server 底下,因此,可以建議:『未來在安裝所有的 Cluster 需要的套件資料時,例如 Compiler 以及 MPICH 等等,都可以安裝到 /cluster/server 這個目錄底下,以使所有的主機都能夠使用同一個 partition 來源的資料喔!』 

設定程序: 

Master: 

1. 激活 portmap 並且設定開機激活: 
[root @server root]# /etc/rc.d/init.d/portmap 
[root @server root]# chkconfig --level 35 portmap on 

2. 設定 NFS 分享出去: 
[root @server root]# vi /etc/exports 
/home 192.168.10.0/24(rw,async,no_root_squash) 
/disk1 192.168.10.0/24(rw,async,no_root_squash) 
[root @server root]# exportfs -rv 
[root @server root]# /etc/rc.d/init.d/nfs start 
[root @server root]# chkconfig --level 35 nfs on 

3. 設定預計的掛載點: 
[root @server root]# mkdir -p /cluster/node1 
[root @server root]# mkdir -p /cluster/node2 
[root @server root]# mkdir -p /cluster/node4 
[root @server root]# mkdir -p /cluster/server 


Slave: 

1. 激活 portmap 並且設定開機激活: 
[root @node1 root]# /etc/rc.d/init.d/portmap 
[root @node1 root]# chkconfig --level 35 portmap on 

2. 設定 NFS 分享出去: 
[root @node1 root]# vi /etc/exports 
/disk1 192.168.10.0/24(rw,async,no_root_squash) 
[root @node1 root]# exportfs -rv 
[root @node1 root]# /etc/rc.d/init.d/nfs start 
[root @node1 root]# chkconfig --level 35 nfs on 

3. 設定預計的掛載點: 
[root @node1 root]# mkdir -p /cluster/node1 
[root @node1 root]# mkdir -p /cluster/node2 
[root @node1 root]# mkdir -p /cluster/node4 
[root @node1 root]# mkdir -p /cluster/server 

掛載程序: 

Master: 
將底下這些指令測試執行一下,如果成功后,將指令寫入 /etc/rc.d/rc.local 當中 

[root @node1 root]# mount -t nfs -o bg,intr server.cluster:/disk1 /cluster/server 
[root @node1 root]# mount -t nfs -o bg,intr node1.cluster:/disk1 /cluster/node1 
[root @node1 root]# mount -t nfs -o bg,intr node2.cluster:/disk1 /cluster/node2 
[root @node1 root]# mount -t nfs -o bg,intr node4.cluster:/disk1 /cluster/node4 

Slave: 
將底下這些指令測試執行一下,如果成功后,將指令寫入 /etc/rc.d/rc.local 當中 

[root @server root]# mount -t nfs server.cluster:/home /home 
[root @server root]# mount -t nfs -o bg,intr server.cluster:/disk1 /cluster/server 
[root @server root]# mount -t nfs -o bg,intr node1.cluster:/disk1 /cluster/node1 
[root @server root]# mount -t nfs -o bg,intr node2.cluster:/disk1 /cluster/node2 
[root @server root]# mount -t nfs -o bg,intr node4.cluster:/disk1 /cluster/node4 

呵呵!這樣就設定成功了!我們每一部主機『看起來』就好象有 400 GB 的硬盤空間啊!可怕了吧! 

-------------------------------------------------------------------------------- 

NIS 架設規划 

NIS 的設定也是很簡單,不過主要還是需要分為 NIS Server 與 NIS Client 兩部份來設定的!請注意,在設定之前,就已經要將 NFS 搞定喔!這些流程都是有一定程度的相關性的呢! 

Master: 
在 Master 上面需要進行的工作很多喔!首先,一定要修改 ypserv.conf 以及其它相關的檔案的吶! 

1. 激活 time 與 time-udp 這兩個預先要激活的 daemon 
[root @server root]# chkconfig --level 35 time on 
[root @server root]# chkconfig --level 35 time-upd on 
[root @server root]# /etc/rc.d/init.d/xinetd restart 

2. 建立 NIS 的領域名稱 (我這里是設定為 cluster ): 
[root @server root]# nisdomainname cluster 
[root @server root]# echo "/bin/nisdomainname cluster" >;>; /etc/rc.d/rc.local 
[root @server root]# echo "NISDOMAIN=cluster" >;>; vi /etc/sysconfig/network 

3. 建立 NIS 設定檔: 
[root @server root]# vi /etc/ypserv.conf (在這個檔案內增加三行即可) 
127.0.0.0/255.255.255.0 : * : * : none 
192.168.10.0/255.255.255.0: * : * : none 
* : * : * : deny 
[root @server root]# touch /etc/netgroup 

4. 激活 NIS: 
[root @server root]# /etc/rc.d/init.d/ypserv start 
[root @server root]# /etc/rc.d/init.d/yppasswdd start 
[root @server root]# chkconfig --level 35 ypserv on 
[root @server root]# chkconfig --level 35 yppasswdd on 

5. 制作數據庫:(每次有更動使用者信息時,就必須要進行這個步驟!) 
[root @server root]# /usr/lib/yp/ypinit -m 
[root @server root]# chkconfig --level 35 ypserv on 
[root @server root]# chkconfig --level 35 yppasswdd on 

Slave: 
至於 NIS Client 則是需要設定 yp.conf 這個檔案呢! 

1. 建立 NIS 的領域名稱 (我這里是設定為 cluster ): 
[root @node1 root]# nisdomainname cluster 
[root @node1 root]# echo "/bin/nisdomainname cluster" >;>; /etc/rc.d/rc.local 
[root @node1 root]# echo "NISDOMAIN=cluster" >;>; vi /etc/sysconfig/network 

2. 建立 NIS 查尋的主機名稱: 
[root @node1 root]# vi /etc/yp.conf 
domain cluster 
ypserver server.cluster 

3. 修改密碼驗證方式: 
[root @node1 root]# vi /etc/passwd (在這個檔案的最底下新增如下一行) 
+:::::: 
[root @node1 root]# vi /etc/nsswitch.conf 
passwd: files nis nisplus 
shadow: files nis nisplus 
group: files nis nisplus 
hosts: files nis dns 

4. 激活 NIS: 
[root @server root]# /etc/rc.d/init.d/ypbind start 
[root @server root]# chkconfig --level 35 ypbind on 

呵呵!不啰唆!馬上就設定妥當啦! 

-------------------------------------------------------------------------------- 
RSH 設定 

這個 RSH 已經提過了,主要的功能是提供 Master 可以使用 R 指令(如 rsh, rlogin, rcp 等等)來進行 slave 端主機的操控的!所以啦, RSH daemon 主要是在 slave 機器上面架設的喔!與 Master 就無關啦!Master 只要能夠執行 R command 即可!雖然是如此,不過,在我的測試當中,最好 Master 也激活 RSH 比較好一些些啰!在底下的設定當中,我們假設 Server 上面的所有使用者都可以使用 R command 呢!設定的方法很簡單啊! 

Slave & Master: 
底下的設定在 Master 與 Slave 上面都需要動作喔!設定一樣即可! 
1. 激活 RSH 啰! 
[root @node1 root]# chkconfig --level 35 rsh on 
[root @node1 root]# /etc/rc.d/init.d/xinetd restart 

2. 編輯可使用 R command 的主機設定文件: 
[root @node1 root]# vi /etc/hosts.equiv 
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 上面進行即可喔!) 

1. 建立 pgi fortran 在 /cluster/server/program/pgi 底下: 
[root @server root]# cd /usr/local/src 
[root @server src]# mkdir pgi-fortran; cd pgi-fortran 
[root @server pgi-fortran]# tar -zxvf /root/software/linux86-HPF.tar.gz 
[root @server pgi-fortran]# ./install 
接下來會有一些問題,請依序回答您的問題喔! 
至於授權嘛!請建立吧! 
最重要的地方,是在第三個問題,他會問你要安裝的目錄,請選擇 
/cluster/server/program/pgi 

2. 修改個人參數:由於 RSH 不以 root 工作,所以我以使用者 test 來測試: 
[root @serer root]# vi /home/test/.bashrc 
# 加入這幾行關於 PGI 的咚咚: 
PGI=/cluster/server/program/pgi 
export PGI 
PATH=$PGI/linux86/binPATH 

3. 設定查尋路徑: 
[root @server root]# vi /etc/man.config 
# 加入這一行: 
MANPATH /cluster/server/program/pgi/man 



這樣就好了嗎?!沒錯!確實是這樣就完成了!很是簡單吧! ^_^要注意的是: 

記得 pgf90 必須要讓所有的 node 都能夠讀的到,所以一定要安裝在 Server 的分享出去的目錄當中,我這里的例子就是安裝在 /cluster/server/program/gpi 這個目錄當中啰! 
執行檔要能夠執行,當然是必須要讓目錄在 PATH 這個變量底下,而我的 pgf90 是在 /cluster/server/program/pgi/linux86/bin 底下,所以,您的 PATH 必須要含有這個目錄才行! 

大概就是如此啰! 

-------------------------------------------------------------------------------- 

安裝 MPICH 

前面我們提過了,安裝 MPICH 是平行運算里面最重要的一項工作了!因為我們就是靠他來幫我們達成運作的啊!那么怎么來安裝呢?又是簡單得不得了啊!首先,請先下載 mpich 吧!下載的網址在底下,我是以 mpich 1.2.5-1a 來測試的喔! 

http://www-unix.mcs.anl.gov/mpi/mpich/download.html 


假設您將 mpich 下載在 /root/software 里面,並且預計要安裝到 /cluster/server/program/mpich 當中,而且僅安裝 Fortran 而已的話,可以這樣做: 


1. 建立 mpich 在 /cluster/server/program/mpich 底下: 
[root @server root]# cd /usr/local/src 
[root @server src]# tar -zxvf /root/software/mpich.tar.gz 
[root @server src]# cd mpich-1.2.5 
[root @server mpich-1.2.5]# ./configure --enable-debug \ 
>; -fc=pgf77 -f90=pgf90 \ 
>; --prefix=/cluster/server/program/mpich 
[root @server mpich-1.2.5]# make && make install 

2. 建立可以利用的主機狀態: 
[root @server mpich-1.2.5]# cd /cluster/server/program/mpich/share 
[root @server share]# vi machines.LINUX 
node1.cluster:2 
node2.cluster:2 
node4.cluster:2 
server.cluster:2 
# 這個檔案當中,格式為 <主機名稱>;:<主機的 CPU 個數>; 

3. 建立需要的變量:(又是以 test 為准喔!) 
[root @server root]# vi /home/test/.bashrc 
# 加入這一些資料: 
PATH=$PATH:/cluster/server/program/mpich/bin 
export PATH 
MPI_HOME=/cluster/server/program/mpich 
MPI_ARCH=$MPI_HOME/bin/tarch 
export MPI_ARCH MPI_HOME 
[root @server root]# vi /etc/man.config 
# 加入這一行: 
MANPATH /cluster/server/program/mpich/man 

呵呵!這樣就已經完成了 MPICH 的安裝與設定了!就跟你說很簡單吧!但是呢,要測試可就得需要特別留意了,因為 root 預設是不許使用 RSH 的,所以測試一定要使用一般身份的使用者,這里我以 test 這個人做為測試的使用者喔!所以,請以 test 的身份登入主機,並且,這個 test 必須要在所有的主機上面都可以被查詢的到才行(請參考 NIS 的設定喔!)。 

[test @server test]$ cp -r /cluster/server/program/mpich/examples/ . 
[test @server test]$ cd examples 
[test @server examples]$ make pi3f90 
[test @server examples]$ mpirun -np 8 pi3f90 
# 上面那個 -np 后面接的就是使用 CPU 的個數啦!因為我有 8 個 node , 
# 所以當然就以最大的 CPU 個數來測試看看,如果要看到底 CPU 有沒有激活的話, 
# 可以先登入各個 slave 的主機,然后執行『 top -d 1 』來觀察 CPU 的使用率, 
# 再執行上面這個程序,就能夠知道 CPU 有沒有運作了! 

呵呵!沒想到 PGI 的試用版本就能夠提供多顆 CPU 的 Cluster 運作,真是給他很高興!這樣既然可以測試成功了,自然就可以去向 PGI 的官方網站注冊了!注冊費用不低,但是挺值得的啊!

-------------------------------------------------------------------------------- 
重點回顧 

Cluster 可以是並行計算的一種,主要除了雙 CPU 系統外,也可以用在多主機架構下的一種增快數值計算的方式; 
並行計算的 Cluster 主要是藉由主從的架構去運行的,其主要的設定都在 Master 上面設定的, Slave 主要是計算功能而已, 
Cluster 上面相當重要的地方在於 NFS 的設定,因為 Master/Slaves 都需要讀取同樣的資料,所以 NFS 分享的檔案資料就極其重要了; 
除了 NFS 之外,還需要 MPI 這個並行計算的函式庫之安裝,有了 MPI ,Cluster 才能真的運作起來; 
在 Cluster 當中,所有的主機之指令的溝通主要亦經過 RSH 的運作; 

-------------------------------------------------------------------------------- 

參考資源 

Marty's Linux Cluster 架設日志:http://web.csie.chu.edu.tw/~cs87668/cluster.htm 
張裕麟先生的小文章:http://www.se.ntou.edu.tw/~ylchang/MyDocuments/MPICH-ins.txt 
國家高速計算機中心:http://binfo.ym.edu.tw/edu/seminars/200201.files/frame.htm 
MPICH官方網站:http://www-unix.mcs


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM