管理叢集電腦最重要的工作不是象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
echo Launchnode is ‘hostname‘
pbsdsh /path/to/my_executable
第一行將在輸出檔案列印出機器名字,讓管理員知道是哪台電腦運行此指令碼。後面是拋出啟動並執行程式。