|
Contents
- Introduction
- The framework of PC cluster
- Install Linux on master and slave
- Configure Master Env.
- Configure Slave Env.
- Configure Gateway and NAT
-
Configure RSH server/client
- RSH Service at slave
-
Configure DHCP server/client (optional)
- DHCP server side
- DHCP client side
- Configure NFS server/client
- NFS server side
- NFS client side
- Configure NIS server/client
- NIS server side
- NIS client side
- Install some usual Parallel Library
- MPI
- PVM (unfinished)
- Other parallel libraries (unfinished)
- Queuing System
- Other notices
- How do I add a new node
- Release note
- Copyright and Announcement
- Disclaimer
- New Version of this document
- Change log of this document
1.
Introduction
PC Cluster越來越受到HPC (high performance
computing) 領域的歡迎,而以下簡單的陳述以Linux架設cluster system的步驟。而這份文件所建制的系統主要是針對高速計算的叢集系統(如:天文科學計算、天氣預報、生物資訊、流體力學、...)。而非提供網際網路服務的Web/Internet Clusters System。此外,這篇文章僅供參考,您必須以自己的實際狀況來調整相關設定,並且建議您先熟悉Linux的相關操作與設定
以及電腦網路的基本概念*1,否則您會常遇到不可預期的狀況。然而小弟對於架設Linux
cluster亦是新手,若文章內容有不宜或遺漏之處,也歡迎各方給予批評,指正與建議,謝謝。(請先閱讀Release
note)
我們將以RedHat 7.3建立一個叢集系統(Cluster System),而他的硬體架構如下:

其特色:
- 其中有一台為master server,其餘為slave (node)
- Master上面有兩張NIC,一張NIC擁有Public IP (140.126.11.44),與Internet連接,另一NIC為Private
IP (192.168.1.254),與cluster連接。其他node用的是private IP。
- 為了安全性考量,一般使用者只允許以ssh登入master
- 一般使用者允許從master以rsh登入其他node
- Master與slave以高速網路(Gigabit Ethernet或
Myrinet)連接
- Master提供NIS服務,作為與各node的帳號分享。Node可與master享有相同的帳號資料庫,以便於管理(建立帳號只需在master建立)
- Master提供NFS服務,作為與各node檔案的分享。
- Node的系統盡量簡化,專司其職,只做運算的工作。
從軟體的角度觀看:

而各主機應包含的service如下:
[Master Server]
-
NIS server
-
NFS server
-
DHCP server (*2非必要)
-
RSH client
-
Queuing system (*3最好安裝)
-
Web server (*4非必要,但最好安裝)
-
FTP server
-
NAT
-
Gateway
[Slave]
-
NIS client
-
NFS client
-
DHCP client
-
RSH server
所以,當您安裝Linux時,記的安裝以上的services以及其相依的套件
我列出兩種安裝的參考順序,而本文件的內容安排是以安裝與設定某服務(service)作為順序,也就是第一種的安裝順序為主。若您參考第二種安裝順序,則只需依照步驟且於文件中選擇對應的章節來閱讀即可:
-
參考順序一:
-
先安裝兩台Linux主機,一台作為master,另一台為slave,且設定其網路環境,使master與slave能透過網路能互相傳遞資料。
-
設定master/slave上的RSH 。
-
設定master/slave上的DHCP (optional)。
-
設定master/slave上的NFS。
-
設定master/slave上的NIS。
-
安裝parallel library (MPICH,PVM...)於master上。
-
安裝Queuing system於master上。
-
其他。
-
參考順序二:
-
先安裝master主機,且設定其網路環境。
-
設定master上的DHCP service (optional)。
-
設定master上的NFS。
-
設定master上的NIS。
-
安裝slave主機,並且於安裝過程中指定NIS server與DHCP client
(後者為您有於master安裝DHCP server才需要)。
-
設定slave上的NFS client。
-
設定master/slave上的RSH。
-
安裝parallel library (MPICH,PVM...)於master上。
-
安裝Queuing system於master上。
-
其他。
| *1. |
關於Linux的基本操作與設定,可以到網中人(Study
area)參考,內有很豐富的資訊。 |
| *2. |
安裝DHCP
server/client後,可以減少master與slave之間的網路相關設定與管理,如:IP, netmask...。而其可以依照個人的管理偏好
,決定是否要安裝。 |
| *3. |
Queuing system可以幫助我們管理cluster中工作(job)的排程,常用的有OpenPBS、DQS...,可依cluster system使用狀況來決定是否需要安裝。 |
| *4. |
有的Queuing system有Web-based的介面可供使用。 |
| |
|
<Page Top>
2.
Install Linux on master and slave
安裝master建議使用custom選項,自訂安裝,並選擇上述必要的套件。
而安裝slave則選擇server選項,盡量將整個slave系統簡化,只留下必須的套件,如ypbind、rsh、NFS client...。 而規劃slave partition時, 只需分割"/"與swap。
[ Configure Master Env. ]
安裝完master後,記得有一些檔案或環境要設定(或者檢查其設定是否正確),尤其是網路的環境設定。請依據您的裝況,自行設定網路的,使其能夠正常運作,以下列出當作master
server時特別需要注意的檔案:
- /etc/hosts
- /etc/host.conf
- /etc/resolv.conf
- /etc/sysconfig/network
- /etc/sysconfig/network-scripts/ifcfg-eth0
- /etc/sysconfig/network-scripts/ifcfg-eth1
- /etc/nsswitch.conf → 於NIS設定時會有更詳盡的解說
以下的參考設定,您可以root權限編輯該檔案或者以圖形介面的工具設定,如:linuxconf、netconf、setup。不過自Red
Hat 7.3之後,linuxconf套件就已經不再包含於光碟中了。
/etc/hosts參考範例:
127.0.0.1
localhost.localdomain localhost
140.126.11.44 saturn.csie.chu.edu.tw saturn
# for internet
192.168.1.254 saturn
saturn # for
private network
192.168.1.1 s1
s1
192.168.1.2 s2
s2
192.168.1.3 s3
s3
192.168.1.4 s4
s4
192.168.1.5 s5
s5
192.168.1.6 s6
s6
192.168.1.7 s7
s7
192.168.1.8 s8
s8
192.168.1.9 s9
s9
192.168.1.10 s10
s10
.
.
. |
master上面有兩張NIC,一張NIC擁有Public IP (140.126.11.44),與Internet連接,另一NIC為Private
IP (192.168.1.254),與cluster連接。所以,在/etc/hosts中必須定義Public IP
(140.126.11.44)與Private IP
(192.168.1.254)。而其他則定義slave的IP與hostname資訊,而其中slave可以不用設定domain。
/etc/host.conf參考範例,它看起來應該像這樣:
order hosts, bind
multi on |
其他資訊,陸續增加中...
[ Configure Slave Env. ]
- 將slave的gateway設為Master的Private IP (即192.168.1.254),若有架設DHCP
server,請於DHCP Server上設定。若無於Master上架設DHCP,可以於 /etc/sysconfig/network
加上 "GATEWAY="140.126.11.254""。
- /etc/hosts.equiv → 於RSH章節中有詳細說明
- 其他的相關設定,會在以下章節提到。
其他資訊,陸續增加中...
<Page Top>
3.
Configure Slave's Gateway and NAT
我們必須設定Routing Table讓master與slave之間可以正常的傳遞資料,並且加入NAT(Network Address
Translation)功能,使slave可以透過master與外部真實網域聯繫。
[ Gateway ]
於此,我們必須先設定master的routing table。先以route指令查看目前routing table的狀況:
[Shell]# route
Kernel IP routing table
Destination Gateway
Genmask Flags Metric Ref Use Iface
140.126.11.0 *
255.255.255.0 U 0
0 0 eth0
127.0.0.0 *
255.0.0.0 U 0
0 0 lo
default CS-GW1.chu.edu.
0.0.0.0 UG 0
0 0 eth0
[Shell]# |
由上表可知,系統對外連線是透過通訊閘(Gateway)CS-GW1.chu.edu.tw。而我們必須於routing
table增加另一個設定,使master可以知道通往192.168.1.0/255.255.255.0(即slave群)的網路封包要網哪一個介面卡來傳送。
以root身分執行:
[Shell]# route
add -net 192.168.1.0 netmask 255.255.255.0 dev eth1
Kernel IP routing table
Destination Gateway
Genmask Flags Metric Ref Use Iface
140.126.11.0 *
255.255.255.0 U 0
0 0 eth0
127.0.0.0 *
255.0.0.0 U 0
0 0 lo
default CS-GW1.chu.edu.
0.0.0.0 UG 0
0 0 eth0
[Shell]# route
Kernel IP routing table
Destination Gateway
Genmask Flags Metric Ref Use
Iface
140.126.11.0 *
255.255.255.0 U 0
0 0 eth0
192.168.1.0 *
255.255.255.0 U 0
0 0 eth1
127.0.0.0 *
255.0.0.0 U 0
0 0 lo
default CS-GW1.chu.edu.
0.0.0.0 UG
0 0 0 eth0 |
您亦可以以netconf程式來設定,進入netconf程式後,選擇"Routing and gateways" →
"routes to alternate local nets" → "Add":
 結束按Accept鍵後,然後離開netconf程式,但此時您必須要新啟動網路,執行"service
network restart",讓新的設定值生效。之後您可以試著連線或ping其他的slave node。
[ NAT ] (Optional) 架設NAT server後,可以使slave
nodes透過master與外部真實網路聯繫。
不過NAT的部分是非必要的,您可以考慮自己的需求,再決定是否要架設。設定了NAT後,後端的slave可以與外部Time
Server(時間伺服器)直接對您的主機時鐘進行同步處理,或者其他的需求要slave能與外部網路直接溝通。 首先我們必須啟動master主機routing的功能,您可以以執行echo "1" >
/proc/sys/net/ipv4/ip_forward,或以netconf來設定。若以echo "1" >
/proc/sys/net/ipv4/ip_forward來設定的話,必須要將此命令加入/etc/rc.d/rc.local中,使其開機時生效。以netconf指令設定則進入選單後,選取"Routing and gateways" →
"Defaults",勾選Enable Routing選項。然後按Accept離開。
 您亦可以以"cat
/proc/sys/net/ipv4/ip_forward"查看目前routing功能是否有被開啟,若開啟則會顯示"1",若無則檔案內則無內容。
接著我們使用Forward封包過濾類型做IP轉送或配合-j MASQ功能作IP偽裝。我們可以以ipchians或iptables來設定IP偽裝的功能,
以ipchains為例,執行"ipchains
-A forward -p all -s 192.168.1.0/24 -d 0.0.0.0/0 -j MASQ"即可。其代表的意義為:
| ipchains |
-A forward |
-p all |
-s 192.168.1.0/24 |
-d 0.0.0.0/0 |
-j MASQ |
| 命令 |
增加一個forward規則 |
指定所有的protocol |
來源為192.168.1.0/24
(虛擬網路) |
目的為任何地方
(真實網路) |
都要IP偽裝 |
而以iptables的設法為"iptables -t nat -A POSTROUTING -o eth0 -s
192.168.1.0/24 -j MASQUERADE"。之後您可以登入任一台slave主機後,試著與外部真實網路連線。此外您必須將此命令加入/etc/rc.d/rc.local中,使其設定能於開機時生效。當然您亦可利用ipchains或iptables來做防火牆的功能,控制連線的類型(protocol)與目的地。 <Page Top>
4.
Configure RSH server/client
在執行一些平行程式,必須以RSH登入至其他slave,然後再執行指定的平行程式,所以,RSH service是必要的,不過RSH若沒設定好,很容易會有安全性的疑慮
,所以請小心設定。
在這個cluster系統中,我們只要將slave啟動RSH service,而master則不需要。
[ RSH Service at slave ]
- 首先請以 "rpm -qa | grep rsh" 確定主機上有安裝RSH相關套件,若無請裝上。
- 因為RSH是以xinetd喚起,所以請編輯/etc/xinetd.d/rsh,將其 "Disable = Yes" 改成 "Disable = No",或者也可以root分份執行setup程式,進入service選項,勾選rsh。 更改後,記的重新reload或restart xinetd。
- 然後,編輯/etc/hosts.equiv
(若不存在,請自行建立),設定此台主機可以由哪些主機以rsh登入,且不必密碼的認證。內容填入master的hostname,空一格(Tab),再加上一個"+"號
,如下:
"+"號表示的是所有的user,都可以以RSH登入此主機,且不必認證。其實它還可以詳細的設定,某些使用者可以從哪些主機以RSH且不必認證而登入。
你可以man hosts.equive 來查看更多的資訊。
-
更重要的一點,一個使用者要能不用認證而以RSH登入某主機,它自己的目錄下必須有一個 .rhosts 來設定,您只要填入您允許的主機,就是saturn hostname即可。
-
最後,您可以測試RSH是否有設定成功,從master主機,執行"rlogin s1"或"rsh s1 ls",看看是否能不用密碼而能順利登入s1主機
或執行ls指令。 若無法順利登入
,請再重新的確認每一步驟。
其他的相關指令還有rsh,rlogin,您可以看manual得到更多的資訊。
-
若有無法連線的問題,請確認您的防火牆設定或rsh是否有允許啟動。
-
此外,千萬不要開放root的RSH權限,否則系統會有很大安全上的麻煩。
<Page Top>
5.
Configure DHCP server/client (optional)
為了簡化master與slave之間的IP與相關設定的管理,可以架設DHCP server/client,而在架設DHCP
server/client之前,建議您先熟悉TCP/IP與電腦網路的相關知識。而其架設參考步驟如下:
[ DHCP server side ]
首先先確定master是否有安裝DHCP的套件,可以以"rpm -aq | grep dhcp"來查詢。若無
,請將從光碟裝安裝。
之後在主機上建立DHCP的主要設定檔案/etc/dhcpd.conf。而/var/lib/dhcp/dhcpd.lease為當有DHCP
client向DHCP server租借IP時的紀錄檔案,管理者可以查看檔案內容來看IP租借的情形。
dhcp.conf的參考設定如下(若檔案不存在,請自行建立):
server-identifier 192.168.1.254;
# DHCP server的IP
default-lease-time 108000;
# 租約期限(秒)
max-lease-time 86400;
# 最大租約期限(秒)
option broadcast-address 192.168.1.255; # 定義broadcast address
option domain-name-servers 140.126.1.1, 140.126.3.9, 140.126.8.1;
#
指定DNS
option routers 192.168.1.254;
# 指定gateway
option subnet-mask 255.255.255.0;
# 指定netmask
host s1 {
# 主機名稱s1
hardware ethernet 00:10:5B:6F:EA:35; # 網路卡的MAC
address,可以以ifconfig查看
fixed-address 192.168.1.1;
# 給固定的IP位址
}
host s2 {
hardware ethernet 00:10:A5:3D:E1:1E;
fixed-address 192.168.1.2;
} |
而有一些部分需要注意:
- 每個敘述後面都要以";"結尾。
- 我們可以把共同的敘述放在頂端的敘述中(global),而各自的敘述則以大括弧包起來定義(section)。
- 在此範例中,我們強迫指定IP給每一台主機,而非給一段IP範圍,自動分配。這樣的目的是避免有的slave出問題,而我們卻不知道是哪一台主機 (因為IP不固定)。
-
記的dhcpd必須伴隨著server啟動而啟動,可以以root身分執行ntsysv或setup來設定,亦可以自行設定/etc/rc.d/rc3.d
或 /etc/rc.d/rc5.d下的symbol link。
- 其他的相關議題,可以參考DHCP的書籍,或至網路上搜尋,在此不累贅敘述。
此外,因為master尚有兩張NIC,所以必須指定哪一個為DHCP要服務的NIC,請修改/etc/rc.d/init.d/dhcpd,找到DHCPDARGS=
(若不存在請自行加入),並修改為:
DHCPDARGS變數為以dhcpd script執行或改變DHCP daemon時的額外參數,你只要把預增加的參數寫至此。而eth1的值代表DHCP
daemon只要以eth1裝置為服務的對象。
設定完後,以root身份重新啟動DHCP server
[Shell]# service hdcpd restart
Shutting DHCP:
[ OK ]
Restarting DHCP:
[ OK ]
[Shell]# |
[ DHCP
client side ]
DHCP client的設定就簡單多了,有兩種方法:
1. 以root身份執行netconf、linuxconf或setup來設定,以root身分執行netconf,進入"Host name and IP network
devices"選項,然後記得填入"host name + domain",並且將NIC的Adaptor enable,並且勾選Dhcp,如下圖:

2. 不過從RedHat 7.3後,linuxconf就不包含在光碟內了,所以我們可以修改
/etc/sysconfig/network-scripts/ifcfg-eth0 的方式來設定:
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes |
然後重新啟動DHCP client的網路
[Shell]# service network restart
Restarting network:
[ OK ]
[Shell]# |
以ifconfig eth0 查看是否有正確租借到IP
[Shell]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:10:5B:6F:EA:35
inet
addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST NOTRAILERS RUNNING
MULTICAST MTU:1500 Metric:1
RX packets:8235 errors:0 dropped:0
overruns:0 frame:0
TX packets:2109 errors:0 dropped:0
overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:573646 (560.2 Kb) TX
bytes:210430 (205.4 Kb)
Interrupt:10 Base address:0xe400 |
當然,DHCP還有其他的設定選項,您可以man dhcp.conf或者到網路上搜尋更多資訊。
<Page Top>
6.
Configure NFS server/client
[ NFS server side ]
先以 rpm -aq | grep nfs 來查詢是否經安裝了NFS的相關套件nfs-utils-0.3.3-5.i386.rpm。而NFS是以RPC(Remote Procedure
Call)為基礎,所以您必須還要裝portmap的套件,並且將之啟動(通常系統內定都已經安裝)。您可以以 ps -aux | grep
portmap 或 service portmap status 來查看portmap是否已經啟動。
而NFS server的相關設定都在 /etc/exports檔案中,參考內容如下:
/home
192.168.1.0/255.255.255.0(rw,no_root_squash)
/usr/local
192.168.1.0/255.255.255.0(rw,no_root_squash) |
我們主要將兩個目錄分享出去,一為/home另一為/usr/local。分享而其敘述中每列有兩個欄位,其格式如:
|
欲分享的目錄 |
可以接受的IP或subnet |
(屬性) |
rw為NFS client可以對NFS Server具讀與寫的權限,相對於rw的選項為ro。此外還有一個重要的參數為root_squash。
當某檔案於NFS server端只能由root存取時,root_squash選項可以為防止於NFS client的root user存取此類的檔案。 換句話說,一個檔案於NFS server為只有root可以存取,而於NFS
server上的exports加上root_squash的選項
,則表示,於NFS client的user,即使是root,亦無法存取該檔案。而相對於root_squash的參數為no_root_sauash。
如此以上的範例第一列為,在192.168.1.0/255.255.255.0的IP範圍中的主機,可以mount主機的/home,一般user具讀寫的權限
,而NFS client的root,可以存取NFS server端的檔案,且其檔案再NFS server端只能由root存取。
再來,重新reload或restart nfsd或者以root的身份執行exportfs -vr,更新設定:
[Shell]#
service nfs restart
Stopping NFS mountd:
[ OK ]
Stopping NFS daemon:
[ OK ]
Stopping NFS services:
[ OK ]
Stopping NFS quotas:
[ OK ]
Starting NFS services:
[ OK ]
Starting NFS quotas:
[ OK ]
Starting NFS mountd:
[ OK ]
Starting NFS daemon:
[ OK ]
[Shell]# |
當然,還是一句老話,您可以man export 5、man nfs或到網路上查看更多的資訊。
[ NFS client side ]
您可以先以showmount -e <hostname>來查詢某主機所開放的NFS mount point
而此時可以像使用本地端的partition一樣來mount,不過必須加一些參數,如下:
| [Shell]# mount -t nfs -o
bg,hard,intr saturn:/home /home2 |
其中,-t為指定filesystem type,在此為nfs,-o為指定options,後面跟著您所要指定的選項,於此我們指定bg與intr兩個參數。剩下的參數為,將saturn主機上的/home目錄掛載到本機上的/home2目錄。以下為-o參數的說明:
- bg、fg
bg參數為,如果NFS企圖第一次掛載(mount)動作預時(timeout),程式會於背景繼續試掛載的動作。若有一個掛載動作於背景執行,其他隨後的掛載動作都會立即的改為於背景執行,且不會於前景(foreground)企圖執行第一次掛載的動作。而fg參數的作用洽與bg參數互補
,並且fg參數為內定值(也就是您沒指定bg參數時,則程式會直接以fg參數套用)。
- soft, hard
這兩個選項決定當NFS Client無法與NFS Server聯繫時的反應。若遠端是以hard
mounting掛載,則NFS client會一值嘗試作未完成的請求(request);若是以soft
mounting時,則會嘗試請求直到嘗試時間超過設定值為止(即timeout)。並且soft為當發生掛載預時匯回報I/O error給呼叫的程式,而hard則為回報"server
not responding"於螢幕(console)上。內定選項為hard。於Linux NFS-HOWTO中的Soft
vs. Hard Mounting章節建議是以hard mounting,而soft比較適合使用在遠端系統掛載為唯讀。
- intr
若為hard mounting,但沒有指定intr選項時,且掛載發生預時(timeout)的狀況時,這個mount動作(process)則可視為當機的狀況。若指定intr,則允許使用中斷信號刪除一個已經timeout的掛載動作。
而參數還不只這些,您可以man nfs來查看更多的參數使用說明。此外,您指定NFS Server的hostname時,必須確定NFS client可以正確的正查到master的IP,您可以查看 /etc/hosts 或DNS是否設定正確
。
若要卸載,以 umount <mounted point> 指令即可:
而您可以讓主機啟動時就mount NFS. 請編輯 /etc/fstab:
LABEL=/
/
ext3 defaults
1 1
LABEL=/boot
/boot ext3
defaults
1 2
none
/dev/pts devpts
gid=5,mode=620
0 0
none
/proc proc
defaults
0 0
none
/dev/shm tmpfs
defaults
0 0
/dev/hda5
swap swap
defaults
0 0
/dev/fd0
/mnt/floppy auto
noauto,owner,kudzu 0 0
saturn:/home /home nfs auto,hard,bg,intr
0 0
saturn:/usr/local /usr/local nfs
auto,hard,bg,intr 0 0 |
藍色字的部分為定義NFS mount的敘述,它的格式如:
|
source dev |
mount point |
FS Type |
Option |
n |
n |
若source dev是遠端的NFS server,則以 <hostname>:<source> 來定義;而最後兩欄的"n
n"為fsck pass。都填上0即可。其他欄位的內容
,可以man fstab來查看。其他NFS相關的使用,您可以參考NFS
HOWTO。關於NFS效能的校調可以參考Optimizing
NFS Performance章節。
<Page Top>
7.
Configure NIS server/client
[ NIS server
side ]
架設NIS server請先確定是否有安裝相關的套件,缺一不可,如下列:ypserv、yppasswdd。參考安裝步驟如下:
- 若一台主機知道你的NIS domain名稱即可透過RPC向ypserv得到NIS中的資料,如此為了安全考量請先設定ypserv
daemon接受服務的主機範圍設定,請修改 /var/yp/securenets,如下:
# allow connections from local
host -- necessary
host 127.0.0.1
# same as 255.255.255.255 127.0.0.1
#
# allow connections from any host
# on the 192.168.1.0 network
255.255.255.0 192.168.1.0 |
請依照自己的現況做適當的修改,或者 man ypserv 8 查看更多的資訊。
- 請確定portmapper有執行,您執行後應該會看到以下的回應(在不同的版本中,有的只有第二行的訊息):
| [Shell]#
rpcinfo -u localhost ypserv program 100004 version 1 ready and
waiting
program 100004 version 2 ready and waiting |
並且啟動ypserv daemon。 - 然後設定自己的domainname,自己取個名稱(此範例取名為space)。而此處所指的NIS
domain與DNS domain是不一樣的:
| [Shell]# domainname space |
- 然後以ypinit初始化NIS server (產生NIS database)
[Shell]# /usr/lib/yp/ypinit -m
At this point, we have to construct a list of the hosts which will
run NIS
servers. saturn.csie.chu.edu.tw is in the list of NIS server hosts.
Please con
tinue to add
the names for the other hosts, one per line. When you are done with
the
list, type a <control D>.
next host to add: saturn.csie.chu.edu.tw
-> 在此輸入NIS server
next host to add: -> 若有第二台NIS slave server才輸入
The current list of NIS servers looks like this:
輸入完畢按"Ctrl+D"離開
saturn.csie.chu.edu.tw
Is this correct? [y/n: y] y
We need a few minutes to build the databases...
Building /var/yp/space/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory `/var/yp/space'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating services.byservicename...
Updating netid.byname...
Updating protocols.bynumber...
Updating protocols.byname...
Updating mail.aliases...
gmake[1]: Leaving directory `/var/yp/space'
saturn.csie.chu.edu.tw has been set up as a NIS master server.
Now you can run ypinit -s saturn.csie.chu.edu.tw on all slave server.
[Shell]# |
- 再來是更新map,請於/var/yp目錄下,以root的身分執行make,而每次在NIS server端有帳號的異動時都要做此初始化的動作.
- 而後請確定以下的daemon是被執行著,portmap、ypserv、yppasswd,否則請起動它。
- 確認NIS server的認證順序,請編輯/etc/nsswitch.conf,而server的設定如下:
passwd: files nis
shadow: files nis
group: files nis
hosts: files nis dns
<其他略>... |
- 重新啟動ypserv與yppasswdd:
[Shell]#
service ypserv
restart
[Shell]# service yppasswdd restart |
- 並且以ntsysv指令將ypserv與yppasswdd伴隨著主機開機而啟動。
[ NIS client
side ]
接下來是設定NIS client,而你必須先確定有安裝ypbind與yp-tools套件
- 先設定NIS domainname
| [Shell]# nisdomainname space
--> domainname要與之前NIS server設定的一樣 |
- 修改 /etc/yp.conf
| domain space server
192.168.1.254 # 填入NIS domain與NIS
server |
並且指定NISDOMAIN於/etc/sysconfig/network,將"NISDOMAIN=space"此敘述寫入檔案
- 修改/etc/passwd,將其檔案末尾加上 "+::::::",而其效用與其他參數您可以查看NIS
HOWTO中的Setting
up a NIS Client using Traditional NIS。
- 更改NIS client的認證順序,請編輯/etc/nsswitch.conf,而client的設定如下:
passwd: nis files
shadow: nis files
group: nis files
hosts: nis files dns
<其他略>... |
- 還有,您必須確認NIS client端的portmap daemon是否有啟動,以及/var/yp目錄是否存在,若無,請修正。而後執行
/usr/sbin/rpcinfo -p localhost 或 /usr/sbin/rpcinfo -u localhost ypbind
看看ypbind是否有被註冊至portmapper。
- 最後檢查ypbind是否有隨著主機啟動而啟動。
- 驗證NIS services是否有正常的運作,可以以 ypcat passwd 或 ypmatch <USERID> passwd
查看
最後,您可以在NIS server端新增一帳號(記得新增帳號後到/var/yp 執行make,更新NIS database),然後再以此帳號登入NIS
client,或者於NIS client以"ypmatch <key> <mapname>"指令驗證是否成功。
若成功,應該會回應一些內容,如我們查詢剛剛新增的帳號:
marty@s1[/home/marty]$
ypmatch user1 passwd
user1:$1$EdqNIyVx$01gW5hafqUD7wIBgqje8B1:511:500:test:/home/user1:/bin/tcsh |
若沒回應,則請檢查上面的每一步驟,尤其常常是/etc/nsswitch.conf忘了設定。而其他更詳盡的資料.建議您參考Linux NIS
HOWTO,有更詳細的說明。
<Page Top>
8.
Install some usual Parallel Library
在安裝設定完master與slave之間的一些重要服務後,我們可以安裝常用的平行函式庫(parallel library),如:MPI,
PVM, ...等等。
[ MPI ]
MPI為Message passing Interface的縮寫,是一個常用的平行函式庫,而他有眾多的版本。常用的有MPICH與LAN/MPI,我們示範安裝MPICH的過程。
- 首先到MPICH的官方網站(http://www-unix.mcs.anl.gov/mpi/mpich/)下載source
code
- 安裝:
[Shell]# tar zxvf
mpich-1.2.4.tar.gz
[Shell]# cd mpich-1.2.4
[Shell]# ./configure --prefix=/usr/local/mpich
[Shell]# make
[Shell]# make install |
其他的configure選項可以以"configure --help"來查看,依照您的所需來指定組態參數。
-
然後編輯 /usr/local/mpich/share/machines.LINUX,裡面定義了有哪些主機可以執行MPI的程式,而各主機有幾顆處理器可供運算使用
。其格式為"hostname:n",n為 其主機的可供算的處理器各數
,若只有一顆處理器可供使用,那就可以不必指定n的值了,其範例如下:
在此例是把master也加入運算的行列。 而要注意的是,其中hostname必須要是master與slave都可以順利正查的到的,也就是可透過/etc/hosts或DNS查詢到主機的IP。
- 可以將/usr/local/mpich/bin加入PATH環境變數中,以方便使用,以及設定其他境變數於~/.cshrc 或 ~/.tcshrc
(bash為~/.bashrc),如下(此為tcsh與csh的設法):
set path = ($path /usr/local/mpich/bin)
setenv MPI_ARCH `/usr/local/mpich/bin/tarch`
setenv MPI_HOME "/usr/local/mpich" |
安裝完後,你可以到/usr/local/mpich/example下編譯一些MPICH所附的簡單範例程式,可以以"make
all"指令來編譯。若順利完成,可以以mpirun指令來執行,範例如下:
marty@saturn[/home/marty/example]$
mpirun -np 2 ./cpi
Waiting for response...
Process 0 on saturn.csie.chu.edu.tw
Process 1 on s1
Enter the number of intervals: (0 quits): 100000000
pi is approximately 3.1415926535900001, Error is 0.0000000000002069
wall clock time = 10.535184
Enter the number of intervals: (0 quits): 1000000000
pi is approximately 3.1415926535905170, Error is 0.0000000000007239
wall clock time = 105.346726
Enter the number of intervals: (0 quits): 0
marty@saturn[/home/marty/example]$ |
這個例子是我是指定兩顆處理器(-np 2)來值執行cpi程式,不過cpi的原始碼有被我改過一些小地方。這樣,MPI大致上是安裝成功了
。其實RedHat的光碟中有附上LAM/MPI的RPM,它的名稱為lam-6.5.6-4.i386.rpm,您可以以RPM的方式直接安裝,或是直接make
source。不過若以RPM方式安裝LAM/MPI會安裝至/usr/local下,所以當您執行mpirun時,您必須注意您所執行的是MPICH或LAM/MPI的mpirun。
[ PVM ] unfinished !!
[ Other parallel libraries ] unfinished !! <Page Top>
9.
Queuing System
[ DQS ]
在您的Cluster系統中,若常常有很多的Job要執行,並且為多人共用的環境,裝一套queuing system來幫您管理工作排程是很不錯的。而在public
domain中,DQS是常被使用的一套queuing system。
DQS官方網站:
下載DQS:
安裝DQS:
[Shell]# tar zxvf
DQS-3.3.2.tar.gz
[Shell]# cd DQS-3.3.2 |
不過DQS於RedHat 7.x 編譯時(make config),會出現錯誤訊息,如:
Makefile.typ:25: ***
missing separator (did you mean TAB instead of 8 spaces?)
此乃因為gcc與make版本的問題,造成"空格(space)"與"TAB"的混淆,所以必須修改一兩個小地方(於RedHat
6.2則不必修改):
修改 ./CONFIG/Makefile 與 ./SRC/Makefile,將開頭有"$(CC) -E"敘述的那行的最後一個">"前方加上"|
unexpand"。./CONFIG/Makefile有一處需修改,./SRC/Makefile則有三處,以下為./CONFIG/Makefile的例子:
all:
echo "#define `../UTIL/config.guess 1`" | sed s/\\./_/g | sed
s/-/_/g > Makefile.h
cp Makefile.proto Makefile.proto.c
$(CC) -E Makefile.proto.c | unexpand >
Makefile.typ
rm -f Makefile.proto.c Makefile.h
make -f Makefile.typ
<以下略...> |
找出$(CC) -E Makefile.proto.c > Makefile.typ,在">"前方加上"|
unexpand",如紅色部分所示。(以上解決方法感謝PCCluster
Forum網友的協助)
然後執行make config (建議以root身分執行)
之後會出現一些問題,其中使用"Simple Installation Process"即可,並且依照您的需要回答以下的問題。make
config 無誤完畢後,請執行./CONFIG/addservice.sh。這個script主要是修改您的/etc/services,並且將DQS所需daemon的資訊加入其中,您亦可手動修改
,加入如下:
dqs33_qmaster 607/tcp
dqs33_dqs_execd 608/tcp
dqs33_dqs_intercell 609/tcp |
而您必須將給個node都要修該/etc/services或執行./CONFIG/addservice.sh,然而我們有架設NIS
server,亦可以用NIS分享/etc/services資訊,只需修改master的/etc/services與/etc/nsswitch即可。
最後
[Shell]#
make
[Shell]# make installall |
而DQS的文件檔案置於source code目錄中的DOC目錄下,可自行複製到Web目錄下以瀏覽。
如此大致上完成安裝的動作,接下來剩下設定的工作了:
-
把/usr/local/DQS/bin加入您的PATH變數中
-
修改<DQS_HOME>/common/conf/resolve_file 與 <DQS_HOME>/common/conf/conf_file,並且讓所有nodes與master上面的resolve與conf_file內容相同,而您亦也可以透過NFS分享此檔案。
-
(從此步驟後,請以root身份執行指令) 於master上以root身分執行qmaster332。
此外您可以ps -aux | grep qmaster332
指令查詢qmaster332是否有啟動,若qmaste332沒有成功的啟動,您可以查看<DQS_HOME>/common/conf/err_file;以下步驟所執行的程式亦可以相同的方法檢查。
另一個檢查qmaster332程式是否正常啟動的方法,可以於執行qmaster332的主機上(master)執行qstat332 -f,正常的話應該會回應一至兩行描述著目前queue的狀況。
-
於master上把各nodes加入trust host,執行qconf332 -ah <hostname>
-
若qmaster332有正常執行,可以於各nodes執行des_execd332。
新增佇列(Queue): 新增Queue,於master上執行"qconf332 -aq"
(queue configuration, add queue),隨後會出現內定的文字編輯器(vi, vim或joe...),而您只要修改Q_name與hostname的值即可
。而hostname您必須填入有執行dqs_execd332的主機名稱(hostname)。修改完後存檔離開。如下:
Q_name
queue_1
hostname s1
.
.
. |
之後應該會出現'the queue "queue_1" has been added by root and
set to DISABLED',而我們可以qstat332 -f
查看佇列的狀況。不過剛剛建立的queue狀態為DISABLE,請執行qmod332 -e <queue_name>,把queue狀態改為ENABLE。
[Shell]#
qstat332 -f
Queue Name
Queue Type Quan Load
State
----------
---------- ---- ----
-----
queue_1
batch 0/1
0.00 dr
DISABLED[Shell]#
qmod332 -e Q2
the queue "queue_1" has been enabled by root
[Shell]# qstat332 -f
Queue Name
Queue Type Quan Load
State
----------
---------- ---- ----
-----
queue_1
batch 0/1
0.00 er
UP |
之後我們可以以qsub332 <script>來測試DQS是否可以正常運作。
最後,將qmaster332與dqs_execd332加入/etc/rc.d/rc.local中,使其能於開機時啟動。但請記得,master必須
執行qmaster332,而node則需要執行dqs_execd。
其他注意事項:
- 其他更多的操作與DQS基本架構的認識,請參考DQS的說明文件。而DQS的文件檔案置於source code目錄中的DOC目錄下。其中DQS
Error Messages (error_msg.htm)中有錯誤訊息與代碼的對照與說明,當您發現錯誤時,可以參考這一份文件。
- DQS依照版本的不同,其執行檔名以及/etc/services所定義的service名稱不盡相同,這是安裝時所需要注意的。
[ OpenPBS ]
Unfinished !! <Page Top>
10.
Other notices
[ How do I add a new node ]
當你想新增一個node時,其實就是把上述設定slave (client)的步驟作一次
。安裝時slave主機可不需要光碟機,只須於master上放置一份RdeHat
7.3的source,再製作一片包含網路功能的Linux開機片(光碟中的UTIL目錄下有製作工具),以此開機片開機後透過網路安裝(NFS、FTP或HTTP)。以下我它列出安裝與其他注意事項:
- 安裝Linux,分割HD時,只需分割"/"與swap。而安裝型態選擇Server 或 Custom 選項,盡量把整個系統簡化
。
但是一些該裝的套件還是得裝,如ypbind、rsh、NFS client...。 設定好網路組態,並且檢查以下檔案的設定是否正確:
/etc/hosts (只需留下localhost即可)
| 127.0.0.1 localhost.localdomain
localhost |
/etc/resolv.conf (若有架設NAT於Master上,可填入外部網路的DNS server)
nameserver 140.126.1.1
nameserver 140.126.3.9
nameserver 140.126.8.1 |
/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=s3
# hostname
NISDOMAIN=space
# NIS domain |
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp |
- 設定NFS client,把該掛載的點掛上,並且加入/etc/fstab。
/etc/fstab (加上藍色部分)
LABEL=/
/
ext3 defaults
1 1
LABEL=/boot
/boot ext3
defaults
1 2
none
/dev/pts devpts
gid=5,mode=620
0 0
none
/proc proc
defaults
0 0
none
/dev/shm tmpfs
defaults
0 0
/dev/hda3
swap
swap defaults
0 0
/dev/cdrom
/mnt/cdrom iso9660 noauto,owner,kudzu,ro
0 0
/dev/fd0
/mnt/floppy auto
noauto,owner,kudzu 0 0 saturn:/home
/home nfs
auto,bg,intr
0 0
saturn:/usr/local /usr/local
nfs auto,bg,intr
0 0 |
- 於安裝時可以設定系統帳號認證的來源,於此您可以將 Enable NIS 選項選取,並且填入NIS domian與NIS
server的IP:

若於安裝的時候沒有設定,您必須自己手動設定。不論為安裝時設定NIS或事後手動設定,都要修改/etc/nsswitch.conf檔案:
/etc/nsswitch.conf (修改以下部分即可)
passwd: nis
files
shadow: nis files
group: nis files
hosts: nis files dns
services: nis files |
/etc/yp.conf (修改以下部分即可)
| domain space server 192.168.1.254 |
並將ypbind daemon隨著主機啟動。
- 設定RSH,編輯/etc/hosts.equiv,並且將 rsh daemon隨著主機啟動。
- 修改master上的MPI machine list (/usr/local/mpich/share/machines.LINUX),新增node
hostname。
- 新增master中,DQS的trusted host;或者新增node資訊於其他Queuing system有定義node的部份。
- 其他該修改的部分,如:其他parallel libraries與queuing system有定義node的相關設定。
這樣就大致完成了。 而當您的每台slave的硬體配備都幾乎一樣時,其實用Ghost軟體來備份或安裝新node是最方便不過的
。而在Server上別忘了加上新node的資訊與NIC的MAC address於DHCP的設定檔 (/etc/dhcpd.conf)
。
<Page Top>
11.
Release note
這一篇文章是紀錄著以Linux架設PC Cluster的文件。 因感目前架設Linux PC Cluster的中文資源太少,所以將自己的架設經驗寫成一篇文章
,供大家參考。
然而課業繁忙,文章中有些細節部份無法詳述,或遺漏者,或不適當的部份,也歡迎網友們指正。 也很歡迎前輩們指點小弟在文中不適之處,以及給予建言。 謝謝! :)
[ Copyright and Announcement ]
關於文章轉載:任何人可以於非有償之目的(商業利益)下,完整的轉錄此文章。且於此條件下,文件的摘錄可以不須事先得到允許,但必須註明出處。
[ Disclaimer ]
本文雖已力求正確,然而無法保證所有操作或設定都可以順利的在您的系統上面進行,您必須依照自己的環境做適當的調整。倘若您依照本文件的說明而使你的系統發生任何問題或資料的損失,作者都將不負任何責任。
[ New Version of this document ]
為求盡善盡美,不論是增加新的章節或修正誤謬的地方,於足夠時間的允許下,我都會持續修改這份文件。但是目前我沒有一個長久的地方可以放置此文件,
如此目前此文件的最新版本都會於
http://www.csie.chu.edu.tw/~cs87668/ 或
http://cs87668.adsldns.org
中的網頁找此文章的連結;然而至少於文章初發表日兩年之內,這個URL還都會是有效的。
[ Change log of this document ]
於版本0.5.2 beta後,我決定加上change log的部分。您可以於此查看。
<Page Top>
|