
若要設定和管理叢集資源,可以使用 crm 外圍程序 (crmsh) 指令行公用程式,或者 Web 使用者介面 HA Web Konsole (Hawk)。
本章對指令行工具 crm 做了介紹,並對此工具、樣板的使用方式進行了概述,主要敘述了設定和管理叢集資源方面的資訊:建立基本與進階類型的資源 (群組與複製品),設定條件約束,指定容錯移轉節點與錯誤回復節點,設定資源監控,啟動、清理或移除資源,以及手動移轉資源。
您需要有足夠的權限方可管理叢集。執行 crm 指令及其子指令的使用者需為 root 使用者或 CRM 擁有者使用者 (通常是使用者 hacluster)。
不過,user 選項可讓您以一般 (非特權) 使用者的身分執行 crm 指令及其子指令,並在需要時使用 sudo 指令變更使用者 ID。例如,在下面的指令中,crm 將使用 hacluster 做為授權使用者 ID:
root #crmoptions user hacluster
請注意,您需要採用一種 sudo 不會要求提供密碼的方式設定 /etc/sudoers。
crm 指令有多個子指令,用於管理資源、CIB、節點、資源代辦及其他。該指令提供包含內嵌式範例的完整說明系統。所有範例都遵循附錄 B 中所述的命名慣例。
為了方便閱讀所有程式碼和範例,本章使用了以下表示法來區分外圍程序提示符與互動式 crm 提示符:
針對使用者 root 的外圍程序提示符:
root # 互動式 crmsh 提示符 (如果終端機支援彩色字元,將顯示為綠色):
crm(live)# 可以使用以下幾種方法來存取說明:
若要輸出 crm 及其指令行選項的用法:
root #crm--help
若要列出所有可用指令的清單:
root #crmhelp
若要存取其他說明區段,而不僅僅是指令參考:
root #crmhelp topics
若要檢視 configure 子指令的延伸說明文字:
root #crmconfigure help
若要列印 configure 子指令的語法、用法和範例:
root #crmconfigure help group
也可以使用:
root #crmhelp configure group
幾乎 help 子指令 (不要與 --help 選項混淆) 的所有輸出都會開啟一個文字檢視器。這個文字檢視器可讓您向上或向下捲動,更方便地閱讀說明文字。若要離開該文字檢視器,請按 Q 鍵。
crmsh 不僅對互動式外圍程序支援 Tab 鍵補齊,在 Bash 中也能直接全面支援此功能。例如,輸入 crm help config→|,該字即會補齊,就像在互動式外圍程序中一樣。
crm 指令本身的使用方式如下:
直接.
將所有子指令與 crm 結合使用,再按 Enter,便會立即顯示輸出。例如,輸入 crm help ra 可獲取 ra 子指令 (資源代辦) 的相關資訊。
做為 crm 外圍程序檔.
在程序檔中使用 crm 及其子指令。可以透過兩種方式來完成:
root #crm-f script.cliroot #crm< script.cli
程序檔可以包含 crm 的任意指令。例如︰
# A small script file for crmstatusnodelist
以井字號 (#) 開頭的任何行都是備註,系統會將其忽略。如果某行過長,則在結尾插入反斜線 (\),然後換到下一行。建議縮排屬於特定子指令的行以便於閱讀。
做為內部外圍程序進行互動.
輸入 crm 可進入內部外圍程序。提示變更為 crm(live)。執行 help 可獲取可用子指令的綜覽。由於內部外圍程序有幾種不同層級的子指令,您可以輸入一個子指令並按 Enter「進入」此層級。
例如,如果輸入 resource,便會進入資源管理層級。提示變更為 crm(live)resource#。若要離開內部外圍程序,請使用指令 quit、bye 或 exit。若需要回到上一個層級,請使用 back、up、end 或 cd。
輸入 crm 和不帶任何選項的相應子指令並按 Enter,即可直接進入該層。
內部外圍程序還支援 Tab 鍵對子指令和資源的補齊功能。輸入指令的開頭,然後按 →|,crm 便會補齊相應的物件。
除了前面所述的方法之外,crmsh 還支援同步指令執行。使用 -w 選項可以啟動該功能。如果您啟動 crm 時未使用 -w,以後可以將使用者首選的 wait 設定為 yes (options wait yes) 以啟用該功能。如果啟用了此選項,crm 會一直等到轉換完成。每當啟動轉換後,就會顯示一些點來指出進度。同步的指令執行僅適用於 resource start 這樣的指令。
crm 工具具有管理功能 (子指令為 resource 和 node),可用於進行組態設定 (cib、configure)。
以下小節概述了 crm 工具的一些重要方面。
由於您始終都需要在叢集組態中處理資源代辦,因此 crm 工具包含了 ra 指令。使用該指令可以顯示資源代辦的相關資訊並對其進行管理 (如需其他資訊,另請參閱第 4.2.2 節「受支援的資源代辦類別」):
root #crmracrm(live)ra#
指令 classes 可列出所有類別和提供者:
crm(live)ra#classeslsb ocf / heartbeat linbit lvm2 ocfs2 pacemaker service stonith systemd
若要取得某個類別 (和提供者) 的所有可用資源代辦的綜覽,請使用 list 指令:
crm(live)ra#listocf AoEtarget AudibleAlarm CTDB ClusterMon Delay Dummy EvmsSCC Evmsd Filesystem HealthCPU HealthSMART ICP IPaddr IPaddr2 IPsrcaddr IPv6addr LVM LinuxSCSI MailTo ManageRAID ManageVE Pure-FTPd Raid1 Route SAPDatabase SAPInstance SendArp ServeRAID ...
若要檢視資源代辦的綜覽,請使用 info:
crm(live)ra#infoocf:drbd:linbit This resource agent manages a DRBD* resource as a master/slave resource. DRBD is a shared-nothing replicated storage device. (ocf:linbit:drbd) Master/Slave OCF Resource Agent for DRBD Parameters (* denotes required, [] the default): drbd_resource* (string): drbd resource name The name of the drbd resource from the drbd.conf file. drbdconf (string, [/etc/drbd.conf]): Path to drbd.conf Full path to the drbd.conf file. Operations' defaults (advisory minimum): start timeout=240 promote timeout=90 demote timeout=90 notify timeout=90 stop timeout=100 monitor_Slave_0 interval=20 timeout=20 start-delay=1m monitor_Master_0 interval=10 timeout=20 start-delay=1m
按 Q 鍵可離開檢視器。
crm
前面的範例中使用了 crm 指令的內部外圍程序。但是,您不一定要使用該外圍程序。如果將相應的子指令新增至 crm,也可獲得同樣的結果。例如,在外圍程序中輸入 crm ra list ocf 可列出所有 OCF 資源代辦。
組態樣板是可供 crmsh 使用的現成叢集組態。不要將它們與資源樣板 (如第 6.4.2 節「建立資源樣板」 所述) 混淆。資源樣板適用於叢集而非 crm 外圍程序。
組態樣板只需略做調整就能符合特定使用者的需求。當某樣板建立組態時,便會有警告訊息發出提示,您稍後可以在進一步自定時編輯該提示。
以下程序說明如何建立一個簡單但功能齊備的 Apache 組態:
以 root 身分登入並啟動 crm 互動式外圍程序:
root #crmconfigure
藉由組態樣板建立新的組態:
切換至 template 子指令:
crm(live)configure#template
列出可用的組態樣板:
crm(live)configure template#listtemplates gfs2-base filesystem virtual-ip apache clvm ocfs2 gfs2
指定所需的組態樣板。由於現在需要 Apache 組態,因此請選擇 apache 樣板並將其命名為 g-intranet:
crm(live)configure template#newg-intranet apache INFO: pulling in template apache INFO: pulling in template virtual-ip
定義參數:
列出您建立的組態:
crm(live)configure template#listg-intranet
顯示需要由您填寫的必要變更:
crm(live)configure template#showERROR: 23: required parameter ip not set ERROR: 61: required parameter id not set ERROR: 65: required parameter configfile not set
啟用偏好的文字編輯器,填寫步驟 3.b 中顯示為錯誤的所有行:
crm(live)configure template#edit
顯示組態並檢查其是否有效 (視步驟 3.c 中輸入的組態而定,可能會顯示粗體文字):
crm(live)configure template#showprimitive virtual-ip ocf:heartbeat:IPaddr \ params ip="192.168.1.101" primitive apache ocf:heartbeat:apache \ params configfile="/etc/apache2/httpd.conf" monitor apache 120s:60s group g-intranet \ apache virtual-ip
套用組態:
crm(live)configure template#applycrm(live)configure#cd ..crm(live)configure#show
將變更提交至 CIB:
crm(live)configure#commit
如果您瞭解詳細資料,還可以使指令更簡單。您可以在外圍程序中使用以下指令來彙總上述程序:
root #crmconfigure template \ new g-intranet apache params \ configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"
如果您在內部 crm 外圍程序中,請使用以下指令:
crm(live)configure template#newintranet apache params \ configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"
但是,之前的指令只是藉由組態樣板建立其組態,而不會套用或提交至 CIB。
非正式組態用於測試不同的組態案例。如果您已建立幾個非正式組態,則可以逐個進行測試以查看變更的效果。
一般程序如下:
以 root 身分登入並啟動 crm 互動式外圍程序:
root #crmconfigure
建立新的非正式組態:
crm(live)configure#cibnew myNewConfig INFO: myNewConfig shadow CIB created
如果省略陰影 CIB 的名稱,則系統會建立暫時名稱 @tmp@。
如果要將目前的即時組態複製至您的非正式組態,請使用以下指令,否則請跳過此步驟:
crm(myNewConfig)# cib reset myNewConfig之前的指令可讓您以後修改任何現有資源時更為方便。
和平常一樣進行變更。建立非正式組態之後,所有變更即會套用至該組態。若要儲存所有變更,請使用以下指令:
crm(myNewConfig)# commit如果重新需要使用即時叢集組態,請使用以下指令切換回來:
crm(myNewConfig)configure#cibuse livecrm(live)#
在將組態變更載入回叢集之前,建議您先使用 ptest 檢閱變更。ptest 指令可顯示提交變更後將發生之動作的圖表。您需要 graphviz 套件才能顯示圖表。以下範例是一份記錄,新增了監控操作:
root #crmconfigurecrm(live)configure#showfence-bob primitive fence-bob stonith:apcsmart \ params hostlist="bob"crm(live)configure#monitorfence-bob 120m:60scrm(live)configure#showchanged primitive fence-bob stonith:apcsmart \ params hostlist="bob" \ op monitor interval="120m" timeout="60s"crm(live)configure#ptestcrm(live)configure#commit
若要輸出圖形 5.2 「Hawk — 叢集圖表」 所示的叢集圖表,請使用指令 crm configure graph。該指令會在目前所在的視窗中顯示目前的組態,因此需要 X11。
如果您偏好使用可擴充向量圖形 (SVG),請使用如下指令:
root #crmconfigure graph dot config.svg svg
Corosync 是大多數 HA 叢集的基礎訊息傳送層。Corosync 子指令提供用於編輯和管理 Corosync 組態的指令。
例如,若要列出叢集的狀態,可以使用 status:
root #crmcorosync status Printing ring status. Local node ID 175704363 RING ID 0 id = 10.121.9.43 status = ring 0 active with no faults Quorum information ------------------ Date: Thu May 8 16:41:56 2014 Quorum provider: corosync_votequorum Nodes: 2 Node ID: 175704363 Ring ID: 4032 Quorate: Yes Votequorum information ---------------------- Expected votes: 2 Highest expected: 2 Total votes: 2 Quorum: 2 Flags: Quorate Membership information ---------------------- Nodeid Votes Name 175704363 1 alice.example.com (local) 175704619 1 bob.example.com
diff 指令非常有用:它可以比較所有節點上的 Corosync 組態 (如果未另行指定),並印各自的差異:
root #crmcorosync diff --- bob +++ alice @@ -46,2 +46,2 @@ - expected_votes: 2 - two_node: 1 + expected_votes: 1 + two_node: 0
如需詳細資訊,請參閱http://crmsh.nongnu.org/crm.8.html#cmdhelp_corosync。
全域叢集選項控制叢集在遇到特定情況時的運作方式。一般情況下,可以保留預先定義的值。但是,為了讓叢集的關鍵功能正常運作,還需要在執行基本叢集設定後調整以下參數:
crm 修改全域叢集選項 #
以 root 身分登入並啟動 crm 工具:
root #crmconfigure
使用以下指令僅為包含兩個節點的叢集設定選項:
crm(live)configure#propertyno-quorum-policy=ignorecrm(live)configure#propertystonith-enabled=true
系統不支援沒有 STONITH 的叢集。
顯示您的變更:
crm(live)configure#showproperty $id="cib-bootstrap-options" \ dc-version="1.1.1-530add2a3721a0ecccb24660a97dbfdaa3e68f51" \ cluster-infrastructure="corosync" \ expected-quorum-votes="2" \ no-quorum-policy="ignore" \ stonith-enabled="true"
提交您的變更並離開:
crm(live)configure#commitcrm(live)configure#exit
做為叢集管理員,您需要為您叢集中的伺服器上執行的所有資源或應用程式建立叢集資源。叢集資源可包括網站、電子郵件伺服器、資料庫、檔案系統、虛擬機器,以及其他您希望使用者隨時都可以存取的伺服器型應用程式或服務。
有關您可以建立之資源類型的綜覽,請參閱第 4.2.3 節「資源類型」。
系統提供了三種適用於叢集的 RA (資源代辦),如需背景資訊,請參閱第 4.2.2 節「受支援的資源代辦類別」。若要將新資源新增至叢集,請執行以下步驟:
以 root 身分登入並啟動 crm 工具:
root #crmconfigure
設定基本資源的 IP 位址:
crm(live)configure#primitivemyIP ocf:heartbeat:IPaddr \ params ip=127.0.0.99 op monitor interval=60s
以上指令設定名為 myIP 的「原始」IP 位址。您需要選擇類別 (此處為 ocf)、提供者 (heartbeat) 和類型 (IPaddr)。此外,此基本資源還需要其他參數,例如 IP 位址。將位址變更為您的設定。
顯示並檢閱已進行的變更:
crm(live)configure#show
提交變更,使之生效:
crm(live)configure#commit
如果您要建立多個具有相似組態的資源,資源樣板可以簡化此任務。另請參閱第 4.4.3 節「資源樣板和條件約束」 以瞭解一些基本的背景資訊。請勿將它們與第 6.1.4 節「使用組態樣板」 中所述的「normal」樣板相混淆。請使用 rsc_template 指令熟悉相應語法:
root #crmconfigure rsc_template usage: rsc_template <name> [<class>:[<provider>:]]<type> [params <param>=<value> [<param>=<value>...]] [meta <attribute>=<value> [<attribute>=<value>...]] [utilization <attribute>=<value> [<attribute>=<value>...]] [operations id_spec [op op_type [<attribute>=<value>...] ...]]
例如,以下指令會建立一個名為 BigVM 的新資源樣板,該樣板由 ocf:heartbeat:Xen 資源及一些預設值與操作衍生而來:
crm(live)configure#rsc_templateBigVM ocf:heartbeat:Xen \ params allow_mem_management="true" \ op monitor timeout=60s interval=15s \ op stop timeout=10m \ op start timeout=10m
定義新的資源樣板後,您可以在基本資源中使用該樣板,或者在順序、並存或 rsc_ticket 條件約束中參考該樣板。若要參考資源樣板,請使用 @ 符號:
crm(live)configure#primitiveMyVM1 @BigVM \ params xmfile="/etc/xen/shared-vm/MyVM1" name="MyVM1"
新基本資源 MyVM1 將繼承 BigVM 資源樣板的一切。例如,與上面兩個指令具有同等效果的指令為:
crm(live)configure#primitiveMyVM1 ocf:heartbeat:Xen \ params xmfile="/etc/xen/shared-vm/MyVM1" name="MyVM1" params allow_mem_management="true" \ op monitor timeout=60s interval=15s \ op stop timeout=10m \ op start timeout=10m
如果您想覆寫某些選項或操作,只需將它們新增到您的 (基本資源) 定義即可。例如,下面的新基本資源 MyVM2 使監控操作的逾時加倍,而其他內容則保留不變。
crm(live)configure#primitiveMyVM2 @BigVM \ params xmfile="/etc/xen/shared-vm/MyVM2" name="MyVM2" \ op monitor timeout=120s interval=30s
在條件約束中可以參考資源樣板,來代表所有由該樣板衍生的基本資源。這有助於產生更加簡明、清晰的叢集組態。除了位置條件約束以外,其他所有條件約束中均允許參考資源樣板。並存條件約束不可包含一個以上的樣板參考。
從 crm 角度看,STONITH 裝置只是另一個資源。若要建立 STONITH 資源,請執行下列步驟:
以 root 身分登入並啟動 crm 互動式外圍程序:
root #crmconfigure
使用如下指令取得所有 STONITH 類型清單:
crm(live)#ralist stonith apcmaster apcmastersnmp apcsmart baytech bladehpi cyclades drac3 external/drac5 external/dracmc-telnet external/hetzner external/hmchttp external/ibmrsa external/ibmrsa-telnet external/ipmi external/ippower9258 external/kdumpcheck external/libvirt external/nut external/rackpdu external/riloe external/sbd external/vcenter external/vmware external/xen0 external/xen0-ha fence_legacy ibmhmc ipmilan meatware nw_rpc100s rcd_serial rps10 suicide wti_mpc wti_nps
從上面的清單中選擇一種 STONITH 類型並檢視可能的選項清單。使用以下指令:
crm(live)#rainfo stonith:external/ipmi IPMI STONITH external device (stonith:external/ipmi) ipmitool based power management. Apparently, the power off method of ipmitool is intercepted by ACPI which then makes a regular shutdown. If case of a split brain on a two-node it may happen that no node survives. For two-node clusters use only the reset method. Parameters (* denotes required, [] the default): hostname (string): Hostname The name of the host to be managed by this STONITH device. ...
使用 stonith 類別、您在步驟 3 中所選的類型,以及所需的相應參數來建立 STONITH 資源,例如:
crm(live)#configurecrm(live)configure#primitivemy-stonith stonith:external/ipmi \ params hostname="alice" ipaddr="192.168.1.221" \ userid="admin" passwd="secret" \ op monitor interval=60m timeout=120s
設定所有資源只是工作的一部分。即使叢集瞭解所有必需的資源,可能仍然無法正確地對其進行處理。例如,儘量不要在 DRBD 的從屬節點上掛接檔案系統 (實際上,對 DRBD 執行此操作將會失敗)。定義相關條件約束,讓此類資訊適用於叢集。
如需條件約束的詳細資訊,請參閱第 4.4 節「資源條件約束」。
location 指令定義資源可在、不可在或偏好在哪些節點上執行。
可以為每個資源多次新增此類條件約束。系統會對指定的資源評估所有位置條件約束。下面的簡單範例中,將在名為 alice 的節點上執行資源 fs1 的優先設定設為 100:
crm(live)configure#locationloc-fs1 fs1 100: alice
另外一個範例為包含 pingd 的位置:
crm(live)configure#primitivepingd pingd \ params name=pingd dampen=5s multiplier=100 host_list="r1 r2"crm(live)configure#locationloc-node_pref internal_www \ rule 50: #uname eq alice \ rule pingd: defined pingd
位置條件約束的另一個使用案例是將基本資源分組為一個資源集。例如,如果多個資源依存於某個 ping 屬性來獲得網路連接,則此功能會十分有用。以前,需要在組態中複製 -inf/ping 規則數次,因而不必要地增加了複雜性。
以下範例將建立一個資源集
loc-alice,該資源集參考虛擬 IP 位址
vip1 和 vip2︰
crm(live)configure#primitivevip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.5crm(live)configure#primitivevip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.6crm(live)configure#locationloc-alice { vip1 vip2 } inf: alice
在某些情況下,為 location 指令使用資源模式會有效且方便得多。資源模式是兩個斜線之間的規則運算式。例如,使用以下指令可使上述的虛擬 IP 位址全部都相符:
crm(live)configure#locationloc-alice /vip.*/ inf: alice
colocation 指令用於定義應在相同或不同主機上執行的資源。
您只能設定 +inf 或 -inf 範圍,即定義必須始終或永不在同一個節點上執行的資源。您也可以使用非 inf 範圍。在該情況下,並存只是一種建議,叢集可以決定不遵循該範圍,以便在有衝突發生時不停止其他資源。
例如,若要永遠都在同一個主機上執行 ID 分別為 filesystem_resource 和 nfs_group 的資源,請使用下面的條件約束:
crm(live)configure#colocationnfs_on_filesystem inf: nfs_group filesystem_resource
對於主要從屬組態,除本地執行資源之外,還必須瞭解目前節點是否為主要節點。
有時,將一組資源放置在同一個節點上 (定義並存條件約束) 會很有用,但前提是這些資源之間不存在硬性相依性。
如果您要將多個資源放置在同一個節點上,但不希望在其中一個資源失敗時執行任何動作,則可以使用指令 weak-bond。
root #crmconfigure assist weak-bond RES1 RES2
實作 weak-bond 會使用指定的資源自動建立一個虛構資源和並存條件約束。
Order 指令定義動作順序。
有時需要提供資源動作或操作的順序。例如,在裝置可用於系統之前,不能掛接檔案系統。順序條件約束可用於在另一個資源符合特定條件 (例如啟動、停止或升級為主要資源) 的前後啟動或停止服務。
在 crm 外圍程序中使用以下指令可設定一個順序條件約束:
crm(live)configure#ordernfs_after_filesystem mandatory: filesystem_resource nfs_group
如果沒有其他條件約束,本節中所用的範例可能不會起作用。所有資源皆必須與 DRBD 資源的主要資源在同一機器上執行,這是基本要求。在任何其他資源啟動之前,DRBD 資源必須成為主要資源。若 DRBD 裝置不是主要資源,嘗試掛接該裝置時必定失敗。以下條件約束必須滿足:
檔案系統必須始終與 DRBD 資源的主要資源位於同一個節點上。
crm(live)configure#colocationfilesystem_on_master inf: \ filesystem_resource drbd_resource:Master
NFS 伺服器和 IP 位址必須與檔案系統位於同一個節點上。
crm(live)configure#colocationnfs_with_fs inf: \ nfs_group filesystem_resource
NFS 伺服器和 IP 位址將在檔案系統掛接後啟動︰
crm(live)configure#ordernfs_second mandatory: \ filesystem_resource:start nfs_group
在將 DRBD 資源升級為節點上的主要資源之後,才能在此節點上掛接檔案系統。
crm(live)configure#orderdrbd_first inf: \ drbd_resource:promote filesystem_resource:start
若要判斷資源容錯移轉,請使用 meta 屬性 migration-threshold。如果所有節點上的 failcount 都超出了 migration-threshold,資源將一直處於停止狀態。例如:
crm(live)configure#locationrsc1-alice rsc1 100: alice
通常情況下,rsc1 偏好在 alice 上執行。如果失敗,則會檢查 migration-threshold 並將其與 failcount 進行比較。若 failcount >= migration-threshold,則將資源移轉至優先設定次佳的節點。
根據 start-failure-is-fatal 選項的值,啟動失敗會將 failcount 設定為 inf。停止失敗將導致圍籬區隔。如果未定義 STONITH,資源將不會移轉。
如需綜覽,請參閱第 4.4.4 節「容錯移轉節點」。
當原始節點恢復連線且位於叢集中時,資源可以錯誤回復至該節點。若不想讓資源錯誤回復至先前執行時所在的節點,或要為資源指定另一個錯誤回復節點,請變更其 resource stickiness 值。您可以在建立資源時或建立之後指定資源粘性。
如需綜覽,請參閱第 4.4.5 節「錯誤回復節點」。
某些資源可能有特定的容量要求,例如最低記憶體容量。如果不符合其要求,這些資源可能無法完全啟動,或者執行時效能會降低。
鑒於此,High Availability Extension 允許您指定以下參數:
特定節點提供的容量。
特定資源要求的容量。
配置資源的整體策略。
如需參數的詳細背景資訊及組態範例,請參閱第 4.4.6 節「依據負載影響放置資源」。
若要設定資源的要求以及節點提供的容量,可以利用使用率屬性。您可以依據自己的偏好命名使用率屬性,依據組態需要定義任意數量的名稱/值對。在某些情況下,有些代辦 (例如 VirtualDomain) 會自行更新使用率。
在以下範例中,假設您已擁有叢集節點和資源的基本組態,現在還想要設定特定節點提供的容量和特定資源需要的容量。
crm 新增或修改使用率屬性 #
以 root 身分登入並啟動 crm 互動式外圍程序:
root #crmconfigure
若要指定節點提供的容量,請使用以下指令,並以您的節點名稱取代佔位符 NODE_1:
crm(live)configure#nodeNODE_1 utilization memory=16384 cpu=8
透過設定以上的值,我們假設 NODE_1 為資源提供 16GB 的記憶體和 8 個 CPU 核心。
若要指定資源需要的容量,請使用:
crm(live)configure#primitivexen1 ocf:heartbeat:Xen ... \ utilization memory=4096 cpu=4
如此,資源會佔用 nodeA 的 4096 個記憶體單元和 4 個 CPU 單元。
使用 property 指令設定配置策略:
crm(live)configure#property...
可用的值如下:
default (預設值)不考量使用率值。資源依據位置分數配置。如果分數相同,則在各節點上平均分配資源。
utilization
判斷節點的可用容量是否足夠滿足資源的要求時,會參考使用率值。但是,依舊會依據配置給節點的資源數量完成負載平衡。
minimal
判斷節點是否有足夠的可用容量來滿足資源的要求時,會考量使用率值。系統會儘可能將資源集中到少量節點上,以節省其餘節點上的能耗。
balanced
判斷節點是否有足夠的可用容量來滿足資源的要求時,會考量使用率值。系統會嘗試將資源平均分配,以便最佳化資源效能。
提供的配置策略效能最佳,它們雖然沒有使用複雜的啟發式解析程式,卻總能獲得最佳的配置效果。請確保資源的優先程度已正確設定,以便先排程最重要的資源。
在離開 crmsh 之前,提交您的變更:
crm(live)configure#commit
以下範例描述一個由三個同級別節點組成的叢集和 4 台虛擬機器:
crm(live)configure#nodealice utilization memory="4000"crm(live)configure#nodebob utilization memory="4000"crm(live)configure#nodecharly utilization memory="4000"crm(live)configure#primitivexenA ocf:heartbeat:Xen \ utilization memory="3500" meta priority="10"crm(live)configure#primitivexenB ocf:heartbeat:Xen \ utilization memory="2000" meta priority="1"crm(live)configure#primitivexenC ocf:heartbeat:Xen \ utilization memory="2000" meta priority="1"crm(live)configure#primitivexenD ocf:heartbeat:Xen \ utilization memory="1000" meta priority="5"crm(live)configure#propertyplacement-strategy="minimal"
這三個節點啟動後,會先將 xenA 配置於一個節點上,接著是 xenD。xenB 和 xenC 會配置在一起,或其中一個與 xenD 配置在一起。
如果一個節點失敗,表示可用的總記憶體太少,無法代管全部資源。如此會確保 xenA 及 xenD 都會予以配置。但 xenB 與 xenC 只有其中一個會予以配置,因為它們的優先程度相同,因此結果尚不確定。若要解決這種不確定的狀況,您需要為其中一個設定較高的優先程度。
若要監控資源,可以使用兩種方法:使用 op 關鍵字定義監控操作或使用 monitor 指令。下面的範例設定了一個 Apache 資源,並使用 op 關鍵字每隔 60 秒鐘對其執行一次監控操作:
crm(live)configure#primitiveapache apache \ params ... \ op monitor interval=60s timeout=30s
下列指令可達到相同目的:
crm(live)configure#primitiveapache apache \ params ...crm(live)configure#monitorapache 60s:30s
如需綜覽,請參閱第 4.3 節「資源監控」。
叢集其中一個最常見的元素是需要存放在一起的一組資源。請按照順序啟動它們,停止時採用相反順序。若要簡化此組態,您可以使用群組。以下範例將建立兩個基本資源 (一個 IP 位址和一個電子郵件資源):
以系統管理員身分執行 crm 指令。提示變更為 crm(live)。
設定基本資源:
crm(live)#configurecrm(live)configure#primitivePublic-IP ocf:IPaddr:heartbeat \ params ip=1.2.3.4 id=p.public-ipcrm(live)configure#primitiveEmail lsb:exim \ params id=p.lsb-exim
以正確的順序按照相應的識別碼對基本資源分組:
crm(live)configure#groupg-shortcut Public-IP Email
若要變更群組成員的順序,請在 configure 子指令中使用 modgroup 指令。使用以下指令可將基本資源 Email 移至 Public-IP 前面。(這只用於示範該功能):
crm(live)configure#modgroupg-shortcut add p.lsb-exim before p.public-ip
如果您想從群組中移除某個資源 (例如,Email),請使用以下指令:
crm(live)configure#modgroupg-shortcut remove p.lsb-exim
如需綜覽,請參閱第 4.2.5.1 節「群組」。
複製品最初被認為是啟動 IP 資源的 N 個例項並在整個叢集進行分配以達到負載平衡的一種便利方法。結果表明,複製還有其他多種用途,包括與 DLM 整合、圍籬區隔子系統和 OCFS2。只要資源代辦支援,就可以複製任何資源。
如需所複製之資源的詳細資訊,請參閱第 4.2.5.2 節「複製品」。
若要建立匿名複製品資源,首先要建立一個基本資源,然後使用 clone 指令參考該資源。執行下列操作︰
以 root 身分登入並啟動 crm 互動式外圍程序:
root #crmconfigure
設定基本資源,例如:
crm(live)configure#primitiveApache lsb:apache
複製基本資源:
crm(live)configure#clonecl-apache Apache
若要建立可設定狀態的複製品資源,首先要建立一個基本資源,然後再建立多狀態資源。多狀態資源至少必須支援升級和降級操作。
以 root 身分登入並啟動 crm 互動式外圍程序:
root #crmconfigure
設定基本資源。視需要變更間隔:
crm(live)configure#primitivemy-rsc ocf:myCorp:myAppl \ op monitor interval=60 \ op monitor interval=61 role=Master
建立多狀態資源:
crm(live)configure#msms-rsc my-rsc
除了能夠設定叢集資源外,crm 工具還可讓您管理現有資源。以下小節對此進行了概述。
若要啟動新的叢集資源,您需要相應的識別碼。請執行下列步驟:
以 root 身分登入並啟動 crm 互動式外圍程序:
root #crm
切換至資源層級:
crm(live)#resource
使用 start 啟動資源,然後按 →| 鍵顯示所有已知資源:
crm(live)resource#startstart ID
若資源失敗,系統會自動將其重新啟動,但每次失敗都會增加資源的 failcount。如果已對該資源設定 migration-threshold,則一旦失敗次數達到該移轉限定值,就不再允許該節點執行該資源。
開啟外圍程序並以 root 使用者身分登入。
取得所有資源的清單:
root #crmresource list ... Resource Group: dlm-clvm:1 dlm:1 (ocf::pacemaker:controld) Started clvm:1 (ocf::lvm2:clvmd) Started cmirrord:1 (ocf::lvm2:cmirrord) Started
移除資源︰
root #crmresource cleanup dlm-clvm
例如,如果要停止 DLM 資源,請在 dlm-clvm 資源群組中,以 dlm 取代 RSC。
執行下列步驟可以移除叢集資源:
以 root 身分登入並啟動 crm 互動式外圍程序:
root #crmconfigure
執行下列指令以取得資源清單:
crm(live)#resourcestatus
例如,輸出可能如下所示 (myIP 為資源的相應識別碼):
myIP (ocf::IPaddr:heartbeat) ...
刪除具有相應識別碼的資源 (此操作還隱含 commit 動作):
crm(live)#configuredelete YOUR_ID
提交變更:
crm(live)#configurecommit
雖然資源設定為在發生硬體或軟體失敗事件時自動容錯移轉 (或移轉) 至叢集的其他節點,您也可以使用 Hawk 或指令行將資源手動移至另一個節點。
請使用 migrate 指令來完成這項任務。例如,若要將資源 ipaddress1 移轉至名為 bob 的叢集節點,請使用以下指令:
root #crmresourcecrm(live)resource#migrateipaddress1 bob
使用標記可以一次參考多個資源,而無需在這些資源之間建立任何並存或順序關係。這個功能在把概念上相關的資源分組在一起時將十分實用。例如,如果有多個資源與某個資料庫相關,您可以建立名為 tag-db 的標記,並將與該資料庫相關的所有資源新增至此標記:
root #crmconfigure tag-db db1 db2 db3
這樣,只需使用一個指令就能啟動所有這些資源:
root #crmresource start tag-db
同樣,您也可以一次性停止所有這些資源:
root #crmresource stop tag-db
您可能不時地需要對個別叢集元件或整個叢集執行測試或維護任務 — 變更叢集組態、更新個別節點的軟體套件,或者將叢集升級到更高的產品版本。
為此,High Availability Extension 提供了針對多個層級的 maintenance 選項:
如果您要將整個叢集置於維護模式,請使用以下指令:
root #crmconfigure property maintenance-mode=true
例如,若要將節點 alice 置於維護模式:
root #crmnode maintenance alice
Crm status 指令將顯示 alice 處於維護模式,並且系統將不再向該節點配置資源。若要移除節點的維護旗標,請使用:
root #crmnode ready alice
如果要將特定的資源設定為維護模式,請使用 meta 指令。例如,若要將資源 ipaddress 置於維護模式,請輸入:
root #crmmeta ipaddress set maintenance true
當服務在叢集控制下執行時,如果您需要執行任何測試或維護任務,請務必遵循以下指南:
在開始之前,請將個別資源、節點或整個叢集設定為維護模式。這有助於避免一些不利的負面影響,例如,資源不按順序啟動、出現叢集節點間 CIB 不同步或資料遺失的風險。
執行維護任務或測試。
完成後,請解除維護模式以開始正常的叢集操作。
如需處於維護模式的資源和叢集會發生之情況的詳細資料,請參閱第 4.7 節「維護模式」。
您可以使用所謂的「程序檔」顯示叢集或節點的健康狀態。程序檔可以執行各種不同的任務,並不局限於顯示狀態。不過,本小節將重點介紹如何獲得健康狀態資訊。
若要獲得 health 指令的所有詳細資料,請使用 describe:
root #crmscript describe health
該指令會顯示一則描述和所有參數及其預設值的清單。若要執行程序檔,請使用 run:
root #crmscript run health verbose=true
如果您希望只執行整套指令中的一個步驟,可以使用 describe 指令列出步驟類別中的所有可用步驟。
例如,以下指令會執行 health 指令的第一個步驟。輸出會儲存在 health.json 檔案中以供進一步調查:
root #crmscript run health \ step='Collect cluster information' \ statefile='health.json'
如需程序檔的其他資訊,請參閱 http://crmsh.github.io/scripts/。
cib.xml 的密碼 #如果您的叢集組態包含敏感性資訊 (例如密碼),應該將這些資訊儲存在本地檔案中。這樣,支援報告中就絕對不會記錄或洩漏這些參數。
在使用 secret 之前,最好先執行 show 指令取得所有資源的綜覽:
root #crmconfigure show primitive mydb ocf:heartbeat:mysql \ params replication_user=admin ...
如果要為上文的 mydb 資源設定密碼,請使用以下指令:
root #crmresource secret mydb set passwd linux INFO: syncing /var/lib/heartbeat/lrm/secrets/mydb/passwd to [your node list]
您可以使用以下指令取得儲存的密碼:
root #crmresource secret mydb show passwd linux
請注意,各節點之間需要同步參數;crm resource secret 指令將會負責該任務。強烈建議您只使用此指令來管理機密參數。
調查叢集歷程是一項複雜的任務。為了簡化此項任務,crmsh 提供了 history 指令及其子指令。假設 SSH 已正確設定。
每個叢集會移動狀態、移轉資源或啟動重要的程序。所有這些動作的相關資訊都可透過 history 子指令擷取。您也可以依照過程 5.27, “使用歷程總管檢視轉換” 所述使用 Hawk。
依預設,所有 history 指令顯示的都是最近一小時內發生的事件。若要變更此時間範圍,請使用 limit 子指令。語法是:
root #crmhistorycrm(live)history#limitFROM_TIME [TO_TIME]
以下是一些有效的範例:
limit4:00pm, limit16:00
這兩個指令的含意相同,都是指當天下午 4:00。
limit2012/01/12 6pm
2012 年 1 月 12 日下午 6:00
limit"Sun 5 20:46"
本年本月第 5 個週日下午 8:46
如需更多範例以及如何建立時間範圍的資訊,請參閱 http://labix.org/python-dateutil。
Info 子指令可顯示 crm_report 涉及的所有參數:
crm(live)history#infoSource: live Period: 2012-01-12 14:10:56 - end Nodes: alice Groups: Resources:
若要只對 crm_report 使用特定參數,請執行 help 子指令檢視可用的選項。
若要限定詳細程度,請使用 detail 子指令,同時指定一個層級:
crm(live)history#detail2
數字越大,報告就越詳細。預設值為 0 (零)。
設定上述參數後,請使用 log 顯示記錄訊息。
若要顯示上次轉換,請使用以下指令:
crm(live)history#transition-1 INFO: fetching new logs, please wait ...
此指令會擷取記錄,並執行 dotty (從 graphviz 套件) 以顯示轉換圖表。該外圍程序會開啟您使用 ↓ 和 ↑ 游標鍵瀏覽的記錄檔案。
如果您不想要開啟轉換圖表,請使用 nograph 選項:
crm(live)history#transition-1 nograph
crm man 頁面。
在 http://crmsh.github.io/documentation 中瀏覽上游專案文件。
參閱Highly Available NFS Storage with DRBD and Pacemaker 中的完整範例。