您需要有足夠的權限方可管理叢集。執行 crm
指令及其子指令的使用者需為 root
使用者或 CRM 擁有者使用者 (通常是使用者 hacluster
)。
不過,user
選項可讓您以一般 (非特權) 使用者的身分執行 crm
指令及其子指令,並在需要時使用 sudo
指令變更使用者 ID。例如,在下面的指令中,crm
將使用 hacluster
做為授權使用者 ID︰
root #
crm
options user hacluster
請注意,您需要採用一種 sudo
不會要求提供密碼的方式設定 /etc/sudoers
。
crm
指令有多個子指令,用於管理資源、CIB、節點、資源代辦及其他。該指令提供包含內嵌式範例的完整說明系統。所有範例都遵循附錄 B 中所述的命名慣例。
使用不含引數 (或只含一個 sublevel 引數) 的 crm,crm 外圍程序將進入互動式模式。此模式由以下提示符指示︰
crm(live/HOSTNAME)
為了容易閱讀,我們的文件在互動式 crm 提示符中省略了主機名稱。只有當您需要在特定節點 (如 alice) 上執行互動式外圍程序時,我們才會包含主機名稱,例如︰
crm(live/alice)
可以使用以下幾種方法來存取說明︰
若要輸出 crm
及其指令行選項的用法︰
root #
crm
--help
若要列出所有可用指令的清單︰
root #
crm
help
若要存取其他說明區段,而不僅僅是指令參考︰
root #
crm
help topics
若要檢視 configure
子指令的延伸說明文字︰
root #
crm
configure help
若要列印 configure
的 group
子指令的語法、用法和範例︰
root #
crm
configure help group
以下指令的作用相同︰
root #
crm
help configure group
幾乎 help
子指令 (不要與 --help
選項混淆) 的所有輸出都會開啟一個文字檢視器。這個文字檢視器可讓您向上或向下捲動,更方便地閱讀說明文字。若要離開該文字檢視器,請按 Q 鍵。
crmsh 不僅對互動式外圍程序支援 Tab 鍵補齊,在 Bash 中也能直接全面支援此功能。例如,輸入 crm help config
→|,該字即會補齊,就像在互動式外圍程序中一樣。
crm
指令本身的使用方式如下︰
直接:
將所有子指令與 crm
結合使用,再按 Enter,便會立即顯示輸出。例如,輸入 crm
help ra
可獲取 ra
子指令 (資源代辦) 的相關資訊。
可以縮寫子指令,只要縮寫後的子指令唯一即可。例如,可以將 status
縮寫為 st
,crmsh 可以識別這種縮寫。
另一項功能是縮寫參數。通常,您會透過 params
關鍵字新增參數。如果 params 區段是第一個且是唯一存在的區段,則您可以省略它。例如,以下行︰
root #
crm
primitive ipaddr ocf:heartbeat:IPaddr2 params ip=192.168.0.55
相當於以下行︰
root #
crm
primitive ipaddr ocf:heartbeat:IPaddr2 ip=192.168.0.55
做為 crm 外圍程序檔:
Crm 外圍程序程序檔包含 crm
的子指令。如需詳細資訊,請參閱第 8.1.4 節 「使用 crmsh 的外圍程序程序檔」。
做為 crmsh 叢集程序檔: 這是中繼資料、對 RPM 套件的參照、組態檔案及使用單一描述性名稱同捆之 crmsh 子指令的集合。可以透過 crm script
指令管理這些內容。
請不要將它們與 crmsh 外圍程序程序檔相混淆︰雖然兩者具有一些共同的目標,但 crm 外圍程序程序檔只包含子指令,而叢集程序檔所包含的遠遠不只是簡單的指令列舉。如需詳細資訊,請參閱第 8.1.5 節 「使用 crmsh 的叢集程序檔」。
做為內部外圍程序進行互動:
輸入 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
指令。使用該指令可以顯示資源代辦的相關資訊並對其進行管理 (如需其他資訊,另請參閱第 6.3.2 節 「受支援的資源代辦類別」)︰
root #
crm
racrm(live)ra#
指令 classes
可列出所有類別和提供者︰
crm(live)ra#
classes
lsb ocf / heartbeat linbit lvm2 ocfs2 pacemaker service stonith systemd
若要取得某個類別 (和提供者) 的所有可用資源代辦的綜覽,請使用 list
指令︰
crm(live)ra#
list
ocf 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#
info
ocf:linbit:drbd 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 外圍程序程序檔提供了將 crmsh 子指令列舉到檔案中的便捷方式。如此,您便可輕鬆註解特定行或稍後重新執行這些行。請注意,crmsh 外圍程序程序檔只能包含 crmsh 子指令,不允許包含任何其他指令。
您需要先建立包含特定指令的檔案,然後才能使用 crmsh 外圍程序程序檔。例如,下面的檔案會列印叢集的狀態並提供所有節點的清單︰
# A small example file with some crm subcommandsstatus
node
list
以井字號 (#
) 開頭的任何行都是註解,系統會將其忽略。如果某行過長,則在結尾插入反斜線 (\
),然後換到下一行。建議縮排屬於特定子指令的行以便於閱讀。
若要使用此程序檔,請使用以下其中一種方法︰
root #
crm
-f example.cliroot #
crm
< example.cli
從所有叢集節點收集資訊和部署任何變更是一項關鍵的叢集管理任務。您無需在不同的節點上手動執行相同的程序 (這很容易出錯),而可以使用 crmsh 叢集程序檔。
請不要將它們與 crmsh 外圍程序程序檔相混淆,第 8.1.4 節 「使用 crmsh 的外圍程序程序檔」中對後者進行了介紹。
對比 crmsh 外圍程序程序檔,叢集程序檔另外會執行如下任務︰
安裝特定任務所需的軟體。
建立或修改任何組態檔案。
收集資訊並報告叢集的潛在問題。
將變更部署到所有節點。
crmsh 叢集程序檔不會取代其他叢集管理工具,而是提供整合的方式用於在叢集中執行上述任務。如需詳細資訊,請參閱http://crmsh.github.io/scripts/。
若要取得所有可用叢集程序檔的清單,請執行︰
root #
crm
script list
若要檢視程序檔的組成部份,請使用 show
指令和叢集程序檔的名稱,例如︰
root #
crm
script show mailto mailto (Basic) MailTo This is a resource agent for MailTo. It sends email to a sysadmin whenever a takeover occurs. 1. Notifies recipients by email in the event of resource takeover id (required) (unique) Identifier for the cluster resource email (required) Email address subject Subject
show
的輸出包含標題、簡短描述與程序。每個程序劃分為依指定順序執行的一系列步驟。
每個步驟包含必要參數與選擇性參數的清單,以及這些參數的簡短描述和預設值。
每個叢集程序檔都可識別一組通用參數。可將這些參數傳遞給任何程序檔︰
參數 | 引數 | 描述 |
---|---|---|
action | INDEX | 如果設定此參數,則只會執行單一動作 (verify 傳回索引) |
dry_run | BOOL | 如果設定此參數,則只會模擬執行 (預設值︰no) |
nodes | LIST | 列出要對其執行程序檔的節點 |
port | NUMBER | 要連接到的埠 |
statefile | FILE | 在以單一步進方式執行時,狀態將會儲存在指定的檔案中 |
sudo | BOOL | 如果設定此參數,crm 將在適當的情況下提示輸入 sudo 密碼並使用 sudo (預設值︰no) |
timeout | NUMBER | 以秒為單位的執行逾時 (預設值︰600) |
user | USER | 以指定使用者的身分執行程序檔 |
在執行某個叢集程序檔之前,請檢查該程序檔將要執行的動作並驗證其參數,以避免出現問題。叢集程序檔可能會執行一系列動作,並且可能會出於各種原因而失敗。因此,在執行程序檔之前驗證參數可幫助避免出現問題。
例如,mailto
資源代辦需要唯一的識別碼和一個電子郵件地址。若要驗證這些參數,請執行︰
root #
crm
script verify mailto id=sysadmin email=tux@example.org 1. Ensure mail package is installed mailx 2. Configure cluster resources primitive sysadmin ocf:heartbeat:MailTo email="tux@example.org" op start timeout="10" op stop timeout="10" op monitor interval="10" timeout="10" clone c-sysadmin sysadmin
verify
將會輸出步驟,並用您的指定參數取代所有預留位置。如果 verify
發現任何問題,會予以報告。如果一切正常,請用 run
取代 verify
指令︰
root #
crm
script run mailto id=sysadmin email=tux@example.org INFO: MailTo INFO: Nodes: alice, bob OK: Ensure mail package is installed OK: Configure cluster resources
使用 crm status
檢查您的資源是否已整合到叢集︰
root #
crm
status [...] Clone Set: c-sysadmin [sysadmin] Started: [ alice bob ]
組態範本已棄用,日後會被移除。組態範本將由叢集程序檔取代,相關資訊請參閱第 8.1.5 節 「使用 crmsh 的叢集程序檔」。
組態範本是可供 crmsh 使用的現成叢集組態。不要將它們與資源範本 (如第 8.4.3 節 「建立資源範本」 所述) 混淆。資源範本適用於叢集而非 crm 外圍程序。
組態範本只需略做調整就能符合特定使用者的需求。當某範本建立組態時,便會有警告訊息發出提示,您稍後可以在進一步自訂時編輯該提示。
以下程序說明如何建立一個簡單但功能齊備的 Apache 組態︰
以 root
身分登入並啟動 crm
互動式外圍程序︰
root #
crm
configure
藉由組態範本建立新的組態︰
切換至 template
子指令︰
crm(live)configure#
template
列出可用的組態範本︰
crm(live)configure template#
list
templates gfs2-base filesystem virtual-ip apache clvm ocfs2 gfs2
指定所需的組態範本。由於現在需要 Apache 組態,因此請選取 apache
範本並將其命名為 g-intranet
︰
crm(live)configure template#
new
g-intranet apache INFO: pulling in template apache INFO: pulling in template virtual-ip
定義參數︰
列出您建立的組態︰
crm(live)configure template#
list
g-intranet
顯示需要由您填寫的必要變更︰
crm(live)configure template#
show
ERROR: 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#
show
primitive 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#
apply
crm(live)configure#
cd ..
crm(live)configure#
show
將變更提交至 CIB︰
crm(live)configure#
commit
如果您瞭解詳細資料,還可以使指令更簡單。您可以在外圍程序中使用以下指令來彙總上述程序︰
root #
crm
configure template \ new g-intranet apache params \ configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"
如果您在內部 crm
外圍程序中,請使用以下指令︰
crm(live)configure template#
new
intranet apache params \ configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"
但是,之前的指令只是藉由組態範本建立其組態,而不會套用或提交至 CIB。
非正式組態用於測試不同的組態案例。如果您已建立幾個非正式組態,則可以逐個進行測試以查看變更的效果。
一般程序如下︰
以 root
身分登入並啟動 crm
互動式外圍程序︰
root #
crm
configure
建立新的非正式組態︰
crm(live)configure#
cib
new myNewConfig INFO: myNewConfig shadow CIB created
如果省略陰影 CIB 的名稱,則系統會建立暫時名稱 @tmp@
。
如果要將目前的即時組態複製至您的非正式組態,請使用以下指令,否則請跳過此步驟︰
crm(myNewConfig)# cib
reset myNewConfig
之前的指令可讓您以後修改任何現有資源時更為方便。
和平常一樣進行變更。建立非正式組態之後,所有變更即會套用至該組態。若要儲存所有變更,請使用以下指令︰
crm(myNewConfig)# commit
如果重新需要使用即時叢集組態,請使用以下指令切換回來︰
crm(myNewConfig)configure#cib
use livecrm(live)#
在將組態變更載入回叢集之前,建議您先使用 ptest
檢閱變更。ptest
指令可顯示提交變更後將發生之動作的圖表。您需要 graphviz
套件才能顯示圖表。以下範例是一份記錄,新增了監控操作︰
root #
crm
configurecrm(live)configure#
show
fence-bob primitive fence-bob stonith:apcsmart \ params hostlist="bob"crm(live)configure#
monitor
fence-bob 120m:60scrm(live)configure#
show
changed primitive fence-bob stonith:apcsmart \ params hostlist="bob" \ op monitor interval="120m" timeout="60s"crm(live)configure#
ptestcrm(live)configure#
commit
若要輸出叢集圖表,請使用指令 crm
configure graph
。該指令會在目前所在的視窗中顯示目前的組態,因此需要 X11。
如果您偏好使用可擴充向量圖形 (SVG),請使用如下指令︰
root #
crm
configure graph dot config.svg svg
Corosync 是大多數 HA 叢集的基礎訊息傳送層。Corosync
子指令提供用於編輯和管理 Corosync 組態的指令。
例如,若要列出叢集的狀態,可以使用 status
︰
root #
crm
corosync 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 #
crm
corosync 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 #
crm
configure
使用以下指令僅為包含兩個節點的叢集設定選項︰
crm(live)configure#
property
no-quorum-policy=stopcrm(live)configure#
property
stonith-enabled=true
系統不支援沒有 STONITH 的叢集。
顯示您的變更︰
crm(live)configure#
show
property $id="cib-bootstrap-options" \ dc-version="1.1.1-530add2a3721a0ecccb24660a97dbfdaa3e68f51" \ cluster-infrastructure="corosync" \ expected-quorum-votes="2" \ no-quorum-policy="stop" \ stonith-enabled="true"
提交您的變更並離開︰
crm(live)configure#
commit
crm(live)configure#
exit
做為叢集管理員,您需要為您叢集中的伺服器上執行的所有資源或應用程式建立叢集資源。叢集資源可包括網站、電子郵件伺服器、資料庫、檔案系統、虛擬機器,以及其他您希望使用者隨時都可以存取的伺服器型應用程式或服務。
有關您可以建立之資源類型的綜覽,請參閱第 6.3.3 節 「資源類型」。
可從本地檔案或網路 URL 載入部分或全部組態。可定義三種不同方法︰
replace
此選項會以新的來源組態取代目前的組態。
update
此選項會嘗試輸入來源組態。它會將新項目新增至目前的組態或更新其現有項目。
push
此選項會將內容從來源輸入到目前組態中 (與 update
相同)。不過,它會移除在新組態中不可用的物件。
若要從檔案 mycluster-config.txt
載入新組態,請使用以下語法︰
root #
crm
configure load push mycluster-config.txt
系統提供了三種適用於叢集的 RA (資源代辦),如需背景資訊,請參閱第 6.3.2 節 「受支援的資源代辦類別」。若要將新資源新增至叢集,請執行以下步驟︰
以 root
身分登入並啟動 crm
工具︰
root #
crm
configure
設定基本資源的 IP 位址︰
crm(live)configure#
primitive
myIP 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
如果您要建立多個具有相似組態的資源,資源範本可以簡化此任務。另請參閱第 6.5.3 節 「資源範本和條件約束」 以瞭解一些基本的背景資訊。請勿將它們與第 8.1.6 節 「使用組態範本」 中所述的「normal」範本相混淆。請使用 rsc_template
指令熟悉相應語法︰
root #
crm
configure 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_template
BigVM 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#
primitive
MyVM1 @BigVM \ params xmfile="/etc/xen/shared-vm/MyVM1" name="MyVM1"
新基本資源 MyVM1 將繼承 BigVM 資源範本的一切。例如,與上面兩個指令具有同等效果的指令為︰
crm(live)configure#
primitive
MyVM1 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#
primitive
MyVM2 @BigVM \ params xmfile="/etc/xen/shared-vm/MyVM2" name="MyVM2" \ op monitor timeout=120s interval=30s
在條件約束中可以參考資源範本,來代表所有由該範本衍生的基本資源。這有助於產生更加簡明、清晰的叢集組態。除了位置條件約束以外,其他所有條件約束中均允許參考資源範本。並存條件約束不可包含一個以上的範本參考。
從 crm
角度看,STONITH 裝置只是另一個資源。若要建立 STONITH 資源,請執行下列步驟︰
以 root
身分登入並啟動 crm
互動式外圍程序︰
root #
crm
configure
使用如下指令取得所有 STONITH 類型清單︰
crm(live)#
ra
list 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)#
ra
info 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)#
configure
crm(live)configure#
primitive
my-stonith stonith:external/ipmi \ params hostname="alice" \ ipaddr="192.168.1.221" \ userid="admin" passwd="secret" \ op monitor interval=60m timeout=120s
設定所有資源只是工作的一部分。即使叢集瞭解所有必需的資源,可能仍然無法正確地對其進行處理。例如,儘量不要在 DRBD 的從屬節點上掛接檔案系統 (實際上,對 DRBD 執行此操作將會失敗)。定義相關條件約束,讓此類資訊適用於叢集。
如需條件約束的詳細資訊,請參閱第 6.5 節 「資源條件約束」。
location
指令定義資源可在、不可在或偏好在哪些節點上執行。
可以為每個資源多次新增此類條件約束。系統會對指定的資源評估所有位置
條件約束。下面的簡單範例中,將在名為 alice
的節點上執行資源 fs1
的優先設定設為 100︰
crm(live)configure#
location
loc-fs1 fs1 100: alice
另外一個範例為包含 pingd 的位置︰
crm(live)configure#
primitive
pingd pingd \ params name=pingd dampen=5s multiplier=100 host_list="r1 r2"crm(live)configure#
location
loc-node_pref internal_www \ rule 50: #uname eq alice \ rule pingd: defined pingd
位置條件約束的另一個使用案例是將基本資源分組為一個資源集。例如,如果多個資源依存於某個 ping 屬性來獲得網路連接,則此功能會十分有用。以前,需要在組態中複製 -inf/ping
規則數次,因而不必要地增加了複雜性。
以下範例將建立一個資源集
loc-alice
,該資源集參考虛擬 IP 位址
vip1
和 vip2
︰
crm(live)configure#
primitive
vip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.5crm(live)configure#
primitive
vip2 ocf:heartbeat:IPaddr2 params ip=192.168.1.6crm(live)configure#
location
loc-alice { vip1 vip2 } inf: alice
在某些情況下,為 location
指令使用資源模式會有效且方便得多。資源模式是兩個斜線之間的規則運算式。例如,使用以下指令可使上述的虛擬 IP 位址全部都相符︰
crm(live)configure#
location
loc-alice /vip.*/ inf: alice
colocation
指令用於定義應在相同或不同主機上執行的資源。
您只能設定 +inf 或 -inf 範圍,即定義必須始終或永不在同一個節點上執行的資源。您也可以使用非 inf 範圍。在該情況下,並存只是一種建議,叢集可以決定不遵循該範圍,以便在有衝突發生時不停止其他資源。
例如,若要永遠都在同一個主機上執行 ID 分別為 filesystem_resource
和 nfs_group
的資源,請使用下面的條件約束︰
crm(live)configure#
colocation
nfs_on_filesystem inf: nfs_group filesystem_resource
對於主要從屬組態,除本地執行資源之外,還必須瞭解目前節點是否為主要節點。
有時,將一組資源放置在同一個節點上 (定義並存條件約束) 會很有用,但前提是這些資源之間不存在硬性相依性。
如果您要將多個資源放置在同一個節點上,但不希望在其中一個資源失敗時執行任何動作,則可以使用指令 weak-bond
。
root #
crm
configure assist weak-bond RES1 RES2
實作 weak-bond
會使用指定的資源自動建立一個虛構資源和並存條件約束。
Order
指令定義動作順序。
有時需要提供資源動作或操作的順序。例如,在裝置可用於系統之前,不能掛接檔案系統。順序條件約束可用於在另一個資源符合特定條件 (例如啟動、停止或升級為主要資源) 的前後啟動或停止服務。
在 crm
外圍程序中使用以下指令可設定一個順序條件約束︰
crm(live)configure#
order
nfs_after_filesystem mandatory: filesystem_resource nfs_group
如果沒有其他條件約束,本節中所用的範例可能不會起作用。所有資源皆必須與 DRBD 資源的主要資源在同一機器上執行,這是基本要求。在任何其他資源啟動之前,DRBD 資源必須成為主要資源。若 DRBD 裝置不是主要資源,嘗試掛接該裝置時必定失敗。以下條件約束必須滿足︰
檔案系統必須始終與 DRBD 資源的主要資源位於同一個節點上。
crm(live)configure#
colocation
filesystem_on_master inf: \ filesystem_resource drbd_resource:Master
NFS 伺服器和 IP 位址必須與檔案系統位於同一個節點上。
crm(live)configure#
colocation
nfs_with_fs inf: \ nfs_group filesystem_resource
NFS 伺服器和 IP 位址將在檔案系統掛接後啟動︰
crm(live)configure#
order
nfs_second mandatory: \ filesystem_resource:start nfs_group
在將 DRBD 資源升級為節點上的主要資源之後,才能在此節點上掛接檔案系統。
crm(live)configure#
order
drbd_first inf: \ drbd_resource:promote filesystem_resource:start
若要判斷資源容錯移轉,請使用 meta 屬性 migration-threshold。如果所有節點上的 failcount 都超出了 migration-threshold,資源將一直處於停止狀態。例如︰
crm(live)configure#
location
rsc1-alice rsc1 100: alice
通常情況下,rsc1 偏好在 alice 上執行。如果失敗,則會檢查 migration-threshold 並將其與 failcount 進行比較。若 failcount >= migration-threshold,則將資源移轉至優先設定次佳的節點。
根據 start-failure-is-fatal
選項的值,啟動失敗會將 failcount 設定為 inf。停止失敗將導致圍籬區隔。如果未定義 STONITH,資源將不會移轉。
如需綜覽,請參閱第 6.5.4 節 「容錯移轉節點」。
當原始節點恢復連接且位於叢集中時,資源可以錯誤回復至該節點。為防止資源錯誤回復到之前執行它的節點,或者要指定讓該資源錯誤回復到其他節點,請變更其資源粘性值。您可以在建立資源時或建立之後指定資源粘性。
如需綜覽,請參閱第 6.5.5 節 「錯誤回復節點」。
某些資源可能有特定的容量要求,例如最低記憶體容量。如果不符合其要求,這些資源可能無法完全啟動,或者執行時效能會降低。
鑒於此,High Availability Extension 允許您指定以下參數︰
特定節點提供的容量。
特定資源要求的容量。
配置資源的整體策略。
如需參數的詳細背景資訊及組態範例,請參閱第 6.5.6 節 「依據負載影響放置資源」。
若要設定資源的要求以及節點提供的容量,可以利用使用率屬性。您可以依據自己的偏好命名使用率屬性,依據組態需要定義任意數量的名稱/值對。在某些情況下,有些代辦 (例如 VirtualDomain
) 會自行更新使用率。
在以下範例中,假設您已擁有叢集節點和資源的基本組態,現在還想要設定特定節點提供的容量和特定資源需要的容量。
crm
新增或修改使用率屬性 #
以 root
身分登入並啟動 crm
互動式外圍程序︰
root #
crm
configure
若要指定節點提供的容量,請使用以下指令,並以您的節點名稱取代佔位符 NODE_1︰
crm(live)configure#
node
NODE_1 utilization memory=16384 cpu=8
透過設定以上的值,我們假設 NODE_1 為資源提供 16GB 的記憶體和 8 個 CPU 核心。
若要指定資源需要的容量,請使用︰
crm(live)configure#
primitive
xen1 ocf:heartbeat:Xen ... \ utilization memory=4096 cpu=4
如此,資源會佔用 NODE_1 的 4096 個記憶體單元和 4 個 CPU 單元。
使用 property
指令設定配置策略︰
crm(live)configure#
property
...
可用的值如下︰
default
(預設值)不考量使用率值。資源依據位置分數配置。如果分數相同,則在各節點上平均分配資源。
utilization
判斷節點的可用容量是否足夠滿足資源的要求時,會參考使用率值。但是,依舊會依據配置給節點的資源數量完成負載平衡。
minimal
判斷節點是否有足夠的可用容量來滿足資源的要求時,會考量使用率值。系統會儘可能將資源集中到少量節點上,以節省其餘節點上的能耗。
balanced
判斷節點是否有足夠的可用容量來滿足資源的要求時,會考量使用率值。系統會嘗試將資源平均分配,以便最佳化資源效能。
提供的配置策略效能最佳,它們雖然沒有使用複雜的啟發式解析程式,卻總能獲得最佳的配置效果。請確保資源的優先程度已正確設定,以便先排程最重要的資源。
在離開 crmsh 之前,提交您的變更︰
crm(live)configure#
commit
以下範例描述一個由三個同級別節點組成的叢集和 4 台虛擬機器︰
crm(live)configure#
node
alice utilization memory="4000"crm(live)configure#
node
bob utilization memory="4000"crm(live)configure#
node
charlie utilization memory="4000"crm(live)configure#
primitive
xenA ocf:heartbeat:Xen \ utilization hv_memory="3500" meta priority="10" \ params xmfile="/etc/xen/shared-vm/vm1"crm(live)configure#
primitive
xenB ocf:heartbeat:Xen \ utilization hv_memory="2000" meta priority="1" \ params xmfile="/etc/xen/shared-vm/vm2"crm(live)configure#
primitive
xenC ocf:heartbeat:Xen \ utilization hv_memory="2000" meta priority="1" \ params xmfile="/etc/xen/shared-vm/vm3"crm(live)configure#
primitive
xenD ocf:heartbeat:Xen \ utilization hv_memory="1000" meta priority="5" \ params xmfile="/etc/xen/shared-vm/vm4"crm(live)configure#
property
placement-strategy="minimal"
這三個節點啟動後,會先將 xenA 配置於一個節點上,接著是 xenD。xenB 和 xenC 會配置在一起,或其中一個與 xenD 配置在一起。
如果一個節點失敗,表示可用的總記憶體太少,無法代管全部資源。如此會確保 xenA 及 xenD 都會予以配置。但 xenB 與 xenC 只有其中一個會予以配置,因為它們的優先程度相同,因此結果尚不確定。若要解決這種不確定的狀況,您需要為其中一個設定較高的優先程度。
若要監控資源,可以使用兩種方法︰使用 op
關鍵字定義監控操作或使用 monitor
指令。下面的範例設定了一個 Apache 資源,並使用 op
關鍵字每隔 60 秒鐘對其執行一次監控操作︰
crm(live)configure#
primitive
apache apache \ params ... \ op monitor interval=60s timeout=30s
下列指令可達到相同目的︰
crm(live)configure#
primitive
apache apache \ params ...crm(live)configure#
monitor
apache 60s:30s
如需綜覽,請參閱第 6.4 節 「資源監控」。
叢集其中一個最常見的元素是需要存放在一起的一組資源。請按照順序啟動它們,停止時採用相反順序。若要簡化此組態,您可以使用群組。以下範例將建立兩個基本資源 (一個 IP 位址和一個電子郵件資源)︰
以系統管理員身分執行 crm
指令。提示變更為 crm(live)
。
設定基本資源︰
crm(live)#
configure
crm(live)configure#
primitive
Public-IP ocf:heartbeat:IPaddr \ params ip=1.2.3.4 id= Public-IPcrm(live)configure#
primitive
Email systemd:postfix \ params id=Email
以正確的順序按照相應的識別碼對基本資源分組︰
crm(live)configure#
group
g-mailsvc Public-IP Email
若要變更群組成員的順序,請在 configure
子指令中使用 modgroup
指令。使用以下指令可將基本資源 Email
移至 Public-IP
前面。(這只用於示範該功能)︰
crm(live)configure#
modgroup
g-mailsvc add Email before Public-IP
若要從群組中移除某個資源 (例如,Email
),請使用以下指令︰
crm(live)configure#
modgroup
g-mailsvc remove Email
如需綜覽,請參閱第 6.3.5.1 節 「群組」。
複製品最初被認為是啟動 IP 資源的 N 個例項並在整個叢集進行分配以達到負載平衡的一種便利方法。結果表明,複製還有其他多種用途,包括與 DLM 整合、圍籬區隔子系統和 OCFS2。只要資源代辦支援,就可以複製任何資源。
如需所複製之資源的詳細資訊,請參閱第 6.3.5.2 節 「複製品」。
若要建立匿名複製品資源,首先要建立一個基本資源,然後使用 clone
指令參考該資源。執行下列操作︰
以 root
身分登入並啟動 crm
互動式外圍程序︰
root #
crm
configure
設定基本資源,例如︰
crm(live)configure#
primitive
Apache ocf:heartbeat:apache
複製基本資源︰
crm(live)configure#
clone
cl-apache Apache
多狀態資源是一種特殊的複製品,此類型允許例項處於兩種執行模式中的其中一種,可以是主動/被動、主要/次要或主要/從屬。
若要建立可設定狀態的複製品資源,首先要建立一個基本資源,然後再建立多狀態資源。多狀態資源至少必須支援升級和降級操作。
以 root
身分登入並啟動 crm
互動式外圍程序︰
root #
crm
configure
設定基本資源。視需要變更間隔︰
crm(live)configure#
primitive
my-rsc ocf:myCorp:myAppl \ op monitor interval=60 \ op monitor interval=61 role=Master
建立多狀態資源︰
crm(live)configure#
ms
ms-rsc my-rsc
除了能夠設定叢集資源外,crm
工具還可讓您管理現有資源。以下小節對此進行了概述。
當管理叢集時,crm configure show
指令會列出叢集組態、全域選項、基本資源等目前 CIB 物件︰
root #
crm
configure show node 178326192: alice node 178326448: bob primitive admin_addr IPaddr2 \ params ip=192.168.2.1 \ op monitor interval=10 timeout=20 primitive stonith-sbd stonith:external/sbd \ params pcmk_delay_max=30 property cib-bootstrap-options: \ have-watchdog=true \ dc-version=1.1.15-17.1-e174ec8 \ cluster-infrastructure=corosync \ cluster-name=hacluster \ stonith-enabled=true \ placement-strategy=balanced \ standby-mode=true rsc_defaults rsc-options: \ resource-stickiness=1 \ migration-threshold=3 op_defaults op-options: \ timeout=600 \ record-pending=true
如果您有許多資源,show
的輸出會十分冗長。為限制輸出,請使用資源名稱。例如,如果只想列出基本資源 admin_addr
的屬性,請將資源名稱附加到 show
後︰
root #
crm
configure show admin_addr primitive admin_addr IPaddr2 \ params ip=192.168.2.1 \ op monitor interval=10 timeout=20
但在某些情況下,您可能希望更精確地限制特定資源的輸出。那麼,您可以使用過濾器。過濾器可將輸出限定到特定元件。例如,若要僅列出節點,可使用 type:node
︰
root #
crm
configure show type:node node 178326192: alice node 178326448: bob
如果您還對基本資源感興趣,請使用 or
運算子︰
root #
crm
configure show type:node or type:primitive node 178326192: alice node 178326448: bob primitive admin_addr IPaddr2 \ params ip=192.168.2.1 \ op monitor interval=10 timeout=20 primitive stonith-sbd stonith:external/sbd \ params pcmk_delay_max=30
此外,若要搜尋以特定字串開頭的物件,請使用以下表示法︰
root #
crm
configure show type:primitive and and 'admin*' primitive admin_addr IPaddr2 \ params ip=192.168.2.1 \ op monitor interval=10 timeout=20
若要列出所有可用類型,請輸入 crm configure show type:
並按 →| 鍵。Bash 補齊功能會為您提供所有類型的清單。
若要啟動新的叢集資源,您需要相應的識別碼。請執行下列步驟︰
以 root
身分登入並啟動 crm
互動式外圍程序︰
root #
crm
切換至資源層級︰
crm(live)#
resource
使用 start
啟動資源,然後按 →| 鍵顯示所有已知資源︰
crm(live)resource#
start
ID
若資源失敗,系統會自動將其重新啟動,但每次失敗都會增加資源的 failcount。如果為資源設定了 migration-threshold
,則當故障次數達到該移轉限定值時,將不再允許節點執行該資源。
開啟外圍程序並以 root
使用者身分登入。
取得所有資源的清單︰
root #
crm
resource list ... Resource Group: dlm-clvm:1 dlm:1 (ocf:pacemaker:controld) Started clvm:1 (ocf:heartbeat:clvm) Started
例如,若要清理資源 dlm
︰
root #
crm
resource cleanup dlm
執行下列步驟可以移除叢集資源︰
以 root
身分登入並啟動 crm
互動式外圍程序︰
root #
crm
configure
執行下列指令以取得資源清單︰
crm(live)#
resource
status
例如,輸出可能如下所示 (myIP 為資源的相應識別碼)︰
myIP (ocf:IPaddr:heartbeat) ...
刪除具有相應識別碼的資源 (此操作還隱含 commit
動作)︰
crm(live)#
configure
delete YOUR_ID
提交變更︰
crm(live)#
configure
commit
雖然資源設定為在發生硬體或軟體失敗事件時自動容錯移轉 (或移轉) 至叢集的其他節點,您也可以使用 Hawk2 或指令行將資源手動移至另一個節點。
請使用 migrate
指令來完成這項任務。例如,若要將資源 ipaddress1
移轉至名為 bob
的叢集節點,請使用以下指令︰
root #
crm
resourcecrm(live)resource#
migrate
ipaddress1 bob
使用標記可以一次參考多個資源,而無需在這些資源之間建立任何並存或順序關係。這個功能在把概念上相關的資源分組在一起時將十分實用。例如,如果有多個資源與某個資料庫相關,您可以建立名為 databases
的標記,並將與該資料庫相關的所有資源新增至此標記︰
root #
crm
configure tag databases: db1 db2 db3
這樣,只需使用一個指令就能啟動所有這些資源︰
root #
crm
resource start databases
同樣,您也可以一次性停止所有這些資源︰
root #
crm
resource stop databases
您可以使用所謂的「程序檔」顯示叢集或節點的健康狀態。程序檔可以執行各種不同的任務,並不局限於顯示狀態。不過,本小節將重點介紹如何獲得健康狀態資訊。
若要獲得 health
指令的所有詳細資料,請使用 describe
︰
root #
crm
script describe health
該指令會顯示一則描述和所有參數及其預設值的清單。若要執行程序檔,請使用 run
︰
root #
crm
script run health
如果您希望只執行整套指令中的一個步驟,可以使用 describe
指令列出步驟類別中的所有可用步驟。
例如,以下指令會執行 health
指令的第一個步驟。輸出會儲存在 health.json
檔案中以供進一步調查︰
root #
crm
script run health statefile='health.json'
您也可以使用 crm cluster health
執行以上指令。
如需程序檔的其他資訊,請參閱 http://crmsh.github.io/scripts/。
cib.xml
的密碼 #如果您的叢集組態包含敏感性資訊 (例如密碼),應該將這些資訊儲存在本地檔案中。這樣,支援報告中就絕對不會記錄或洩漏這些參數。
在使用 secret
之前,最好先執行 show
指令取得所有資源的綜覽︰
root #
crm
configure show primitive mydb ocf:heartbeat:mysql \ params replication_user=admin ...
如果要為上文的 mydb
資源設定密碼,請使用以下指令︰
root #
crm
resource secret mydb set passwd linux INFO: syncing /var/lib/heartbeat/lrm/secrets/mydb/passwd to [your node list]
您可以使用以下指令取得儲存的密碼︰
root #
crm
resource secret mydb show passwd linux
請注意,各節點之間需要同步參數;crm resource secret
指令將會負責該任務。強烈建議您只使用此指令來管理機密參數。
調查叢集歷程是一項複雜的任務。為了簡化此項任務,crmsh 提供了 history
指令及其子指令。假設 SSH 已正確設定。
每個叢集會移動狀態、移轉資源或啟動重要的程序。所有這些動作的相關資訊都可透過 history
子指令擷取。
依預設,所有 history
指令顯示的都是最近一小時內發生的事件。若要變更此時間範圍,請使用 limit
子指令。語法是︰
root #
crm
historycrm(live)history#
limit
FROM_TIME [TO_TIME]
以下是一些有效的範例︰
limit
4:00pm
, limit
16:00
這兩個指令的含意相同,都是指當天下午 4:00。
limit
2012/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#
info
Source: live Period: 2012-01-12 14:10:56 - end Nodes: alice Groups: Resources:
若要只對 crm report
使用特定參數,請執行 help
子指令檢視可用的選項。
若要限定詳細程度,請使用 detail
子指令,同時指定一個層級︰
crm(live)history#
detail
1
數字越大,報告就越詳細。預設值為 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 中的完整範例。