管理叢集計算機最重要的工作不是象PC機那樣啟動,關閉計算機這麼簡單,也不需要做磁盤整理。筆者認為管理叢集計算機最重要的是資源的組合劃分,任務的配置設定,節點性能的監控和負載。每個節點的資源(包括記憶體,磁盤,處理器,網絡)通過網絡消息傳遞組合起來,這有點象作業系統将處理器,記憶體,磁盤,各種卡通過資料總線組合起來變成我們概念中單一的計算機。另外一個很重要的工作就是對節點性能的監控,這和PC機上作業系統監控硬體有點類似。這裡簡單介紹一下管理工具C3的使用方法。
1. 叢集指令行工具C3
前面安裝OSCAR時候我們已經詳細介紹過了C3這個工具的一些情況,C3主要包含以下幾個指令行:
• cexec: 調用linux的指令工具,可以在所有節點上運作任何linux的指令
• cget: 從叢集的任何節點擷取檔案
• ckill: 在指定的節點上殺死一個特定的使用者程序
• cpush: 分布檔案和目錄到叢集中
• cpushimage: 使用systemimage工具更新所有節點上的鏡像
• crm: 從所有節點删除檔案或者目錄
• cshutdown: 關閉或者重新啟動所有節點
• cnum: 傳回節點範圍數值,依賴于節點基本名
• cname: 傳回節點名字,帶範圍數字
• clist: 傳回配置檔案中所有節點資訊
cexec指令可以讓所有節點同時并行運作一個指令,像操作一台機器一樣。同時一個串行的cexec指令也在其中,它是用作确定指令運作和調試用的,為了避免誤用它名字是cesecs而不是cexec。
在是以節點的/etc/c3.conf檔案中定義了一些節點資訊,比如一個64節點的叢集配置内容為:
cluster cartman {
cartman-head:node0 #head node
node[1-64] #compute nodes
}
第一行是叢集名字cartman,後面該叢集的配置用{}包括。第二行顯示這個叢集的伺服器節點是node0機器,後面是所有客戶機節點範圍。再如配置檔案:
cluster kenny {
node0 #head node
dead placeholder #change command line to 1 indexing
node[1-32] #first set of nodes
exclude 30 #offline nodes in the range
exclude [5-10]
node100 #single node definition
dead node101 #offline node
dead node102
node103
其中有兩種offline狀态:exclude和dead,exclude指定離線的機器,dead指定無效的機器。如果有特殊的範圍寫成:1-5,9,11代表1,2,3,4,5,9,11。在運作指令行的時候可以指定機器範圍,也可以預設使用配上,比如要在所有節點上運作ls –l 指令可以
$cexec ls –l
又比如在1-5節點上運作ls –l則指令是:
$cexec 1-5 ls –l
其它的節點範圍指定也可以使用,比如1-5,9,11下面的指令比上面指令多顯示9,11兩個節點。
$cexec 1-5,9,11 ls –l
當然你也可以指定叢集的名字,在叢集的所有節點上面運作指令:
$cexec cartman: ls -l
如果要在指定名字的叢集中啟動某些節點上的指令則其格式是
$cexec cartman:1-5 ls –l
C3可以運作linux中的大部分指令,它使用ssh來連接配接節點在上面運作指令。有了C3我們可以很友善地控制我們的叢集,無需每台機器都telnet然後運作我們的指令。
使用PBS排程你的作業
搭建完成你的OSCAR叢集後,維護工作除了管理監控以外很重要的一點是如何排程你的作業。一個大型的叢集系統可能有上千個節點,會同時運作多個作業,完成不同的任務,如果不作很好的規劃很有可能造成任務之間互相争奪叢集的資源,最後即沒有充分利用資源也無法按時完成。在我們安裝的叢集上有個叫PBS的工具就是專門排程叢集任務的工具。
PBS(Portable Batch System)是由NASA開發的靈活的批處理系統。它被用于叢集系統、超級計算機和大規模并行系統。PBS還有除了排程作業以外還能夠管理叢集的資源,如果對它作個簡單總結,PBS主要有如下特征:
l 易用性:為所有的資源提供統一的接口,易于配置以滿足不同系統的需求,靈活的作業排程器允許不同系統采用自己的排程政策。
l 移植性:符合POSIX 1003.2标準,可以用于shell和批處理等各種環境。
l 适配性:可以适配與各種管理政策,并提供可擴充的認證和安全模型。支援廣域網上的負載的動态分發和建立在多個實體位置不同的實體上的虛拟組織。
l 靈活性:支援互動和批處理作業。
PBS其實可以靈活地使用,它即可以被用來在單一節點的或大型叢集上控制任務,也可以在多個系統之間均衡負載,還可以在多個節點的計算機上運作并行或串行的任務。以上這些在實際應用中也可以混合。
PBS主要分成三個部分:
l PBS server:它運作在叢集的伺服器節點上,由它來控制事務并啟動運作任務。
l maui scheduler:Maui排程程式根據資料總管得到各個結點上的資源狀況和系統的作業資訊生成一個優先級清單。
l mom背景程序:每個節點上有一個mom背景程序,由這個程序真正啟動和停止每個節點上的任務。
PBS的幾個主要部件位于每個節點的{$OSCAR_HOME}/sbin目錄中,到該目錄你可以找到
Pbs_server是PBS的伺服器,pbs_mom是mom背景程序,pbs_sched是排程程式。一般啟動linux以後pbs_server伺服器和pbs_mom背景守候程序就起來了,你使用ps指令可以檢視:
#ps –ef | grep pbs_
pbs_server有幫助文檔可以查man pbs_server,仔細看過以後你會發現它有很多配置選項,比如指定預設節點的,也就是如果pbs找不到你指定的節點或者沒有指定節點則使用,則使用default_node參數指定。可以使用pbs工具qmgr來改變server的設定:
Qmgr:s s default_node=big (s s表示set server)指定了default_node的值
使用PBS主要是以指令方式來定你的作業,它的指令的詳細參考在linux裡面可以使用man幫助檢視,如果你要檢視PBS關于資源限制的資料可以浏覽pbs_resources幫助,如果想檢視PBS伺服器的配置可以浏覽pbs_server_attribute幫助。所有的指令可以在{$OSCAR_HOME}/pbs/bin中找到,下面列出了幾個PBS常用的指令及其功能:
qsub:此指令是向PBS送出你的任務。
Qdel:此指令是删除PBSd的作業。
qstat [-n]:顯示目前作業狀态和關聯的節點。
pbsnodes [-a]:顯示節點的狀态。
Pbsdsh:分布式處理發射台。
在這裡舉個簡單的例子讓讀者有點感性的認識,下面的送出作業是在節點X上起Y個VP中運作my_script.sh腳本,注意送出任務一定要有個運作任務的腳本。
$ qsub -N my_jobname -e my_stderr.txt -o my_stdout.txt -q workq -l
nodes=X:ppn=Y:all,walltime=1:00:00 my_script.sh
-N選項指定任務名字,-e指定标準錯誤輸出檔案,-o指定标準輸出檔案,-q 是隊列名字,-l是後面是指定資源限制,這裡指定了節點,VP個數,最大運作時間。節點定位需要詳細介紹一下,nodes參數的等号後面是以“+”号相連的節點定義,每個定義之間的屬性以“:”分開。一般是 node number:node name (略寫):ppn= (VP個數):all (或者resource)。舉個例子,比如2:red:ppn=2表示在節點名字有red的2台機器上,每個機器啟動2個VP來運作任務。VP是虛拟的處理器,預設情況下一個CPU啟動一個VP,但是你可以啟動多個VP在一個CPU上面,PBS是以VP為處理機關的而不是真實的硬體CPU。
上面的指令送出一個任務以後,我們看它運作的腳本my_script.sh:
#!/bin/sh