日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

鸟哥的Linux私房菜(服务器)- 簡易 Cluster 架設

發布時間:2025/3/21 linux 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 鸟哥的Linux私房菜(服务器)- 簡易 Cluster 架設 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡易?Cluster?架設 最近更新日期:2003/05/20  
近年來因為數值模式模擬的盛行,所以『平行運算』的架構也就越來越重要了!什麼是數值模擬呢?主要就是藉由一些物理理論去開發出來的一些『計算公式』,而這些計算公式藉由程式語言(例如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 ?
其他主機相關設定 ?
  :X-Window Server/Slave 架構 ?
重點回顧 ?
參考資源 ?

原理:

  • 什麼是 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
       
    • 安裝時選擇的套件:
      所有的主機都需要底下的套件安裝(註:因為原本的筆記記錄的很亂,所以如果找不到相同的字眼,那就是我寫錯啦!):
      • Administrattion Tools
      • Development Tools
      • Editors
      • Engineering and Scientific
      • FTP Server
      • Kernel Development
      • Network Servers
      • Server configuration Tools
      • Sound and vedio
      • System Tools
      • Text-based Internet
      • Windows File 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:WW:QQ:PP?-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 start?
      [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 start?
      [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 @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
       
    • Slave:
    • 將底下這些指令測試執行一下,如果成功後,將指令寫入 /etc/rc.d/rc.local 當中
      [root @node1 root]#?mount -t nfs??????????? server.cluster:/home? /home?
      [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
       
    呵呵!這樣就設定成功了!我們每一部主機『看起來』就好像有 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/bin:$PATH?
     ?
    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 設定之外,您的主機其實可能還需要其他的設定項目的!最常見的可能就是 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. 先備份原先的設定檔:?
      [root @server root]#?cd /etc/X11/gdm?
      [root @server gdm]#?mv gdm.conf gdm.conf.bak?
       ?
      2. 編輯設定檔,只要底下兩行即可!?
      [root @server gdm]#?vi gdm.conf?
      [xdmcp]?
      Enable=1?
       ?
      3. 啟動 gdm :?
      [root @server gdm]#?gdm?
      [root @server gdm]#?netstat -uln?
      udp??????? 0????? 0 0.0.0.0:177???????????? 0.0.0.0:*?
      # 如果有出現上面這行就對了!?
      [root @server gdm]#?echo "/usr/bin/gdm" >> /etc/rc.d/rc.local?
      # 上面這行在設定開機時啟動 gdm 囉!
       
    • X Client 的設定(在 Linux 上面):
      如果您的 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 版。

      http://linux.vbird.org/download/#x-win54?
       

    • 在 Windows 上的安裝步驟,就是執行他即可啊!然後一直給他下一步就是了!
       
    • 執行 X-Win32 這個程式,在出現如下的圖示後,按下 Evaluation 這個試用按鈕;
      ?
       
    • 按下確認按鈕;
      ?
       
    • 在右下角的小圖示當中,例如:?給他按下那個 X 囉,就會出現如下的圖示:
      ?
       
    • 按下 Add 之後,會出現如下的圖示:
      ?
       
    • 上面選擇 XDMCP 這個項目,然後選擇 Next 之後,會出現:
      ?
       
    • 重要的地方在於 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 系統外,也可以用在多主機架構下的一種增快數值計算的方式;
  • 平行計算的 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.anl.gov/mpi/mpich/
from:?http://linux.vbird.org/linux_server/0600cluster.php

總結

以上是生活随笔為你收集整理的鸟哥的Linux私房菜(服务器)- 簡易 Cluster 架設的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。