套用至 SUSE Linux Enterprise High Availability Extension 12 SP5

8 設定和管理叢集資源 (指令行)

摘要

若要設定和管理叢集資源,可以使用 crm 外圍程序 (crmsh) 指令行公用程式或 Web 使用者介面 HA Web Konsole (Hawk2)。

本章對指令行工具 crm 做了介紹,並對此工具、樣板的使用方式進行了概述,主要敘述了設定和管理叢集資源方面的資訊︰建立基本與進階類型的資源 (群組與複製品),設定條件約束,指定容錯移轉節點與錯誤回復節點,設定資源監控,啟動、清理或移除資源,以及手動移轉資源。

注意
注意:使用者權限

您需要有足夠的權限方可管理叢集。執行 crm 指令及其子指令的使用者需為 root 使用者或 CRM 擁有者使用者 (通常是使用者 hacluster)。

不過,user 選項可讓您以一般 (非特權) 使用者的身分執行 crm 指令及其子指令,並在需要時使用 sudo 指令變更使用者 ID。例如,在下面的指令中,crm 將使用 hacluster 做為授權使用者 ID︰

root # crm options user hacluster

請注意,您需要採用一種 sudo 不會要求提供密碼的方式設定 /etc/sudoers

8.1 crmsh — 綜覽

crm 指令有多個子指令,用於管理資源、CIB、節點、資源代辦及其他。該指令提供包含內嵌式範例的完整說明系統。所有範例都遵循附錄 B 中所述的命名慣例。

提示
提示:互動式 crm 提示符

使用不含引數 (或只含一個 sublevel 引數) 的 crm,crm 外圍程序將進入互動式模式。此模式由以下提示符指示︰

crm(live/HOSTNAME)

為了容易閱讀,我們的文件在互動式 crm 提示符中省略了主機名稱。只有當您需要在特定節點 (如 alice) 上執行互動式外圍程序時,我們才會包含主機名稱,例如︰

crm(live/alice)

8.1.1 使用說明

可以使用以下幾種方法來存取說明︰

  • 若要輸出 crm 及其指令行選項的用法︰

    root # crm --help
  • 若要列出所有可用指令的清單︰

    root # crm help
  • 若要存取其他說明區段,而不僅僅是指令參考︰

    root # crm help topics
  • 若要檢視 configure 子指令的延伸說明文字︰

    root # crm configure help
  • 若要列印 configuregroup 子指令的語法、用法和範例︰

    root # crm configure help group

    以下指令的作用相同︰

    root # crm help configure group

幾乎 help 子指令 (不要與 --help 選項混淆) 的所有輸出都會開啟一個文字檢視器。這個文字檢視器可讓您向上或向下捲動,更方便地閱讀說明文字。若要離開該文字檢視器,請按 Q 鍵。

提示
提示:在 Bash 和互動式外圍程序中使用 Tab 鍵補齊

crmsh 不僅對互動式外圍程序支援 Tab 鍵補齊,在 Bash 中也能直接全面支援此功能。例如,輸入 crm help config→|,該字即會補齊,就像在互動式外圍程序中一樣。

8.1.2 執行 crmsh 的子指令

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#。若要離開內部外圍程序,請使用指令 quitbyeexit。若需要回到上一個層級,請使用 backupendcd

    輸入 crm 和不帶任何選項的相應子指令並按 Enter,即可直接進入該層。

    內部外圍程序還支援 Tab 鍵對子指令和資源的補齊功能。輸入指令的開頭,然後按 →|crm 便會補齊相應的物件。

除了前面所述的方法之外,crmsh 還支援同步指令執行。使用 -w 選項可以啟動該功能。如果您啟動 crm 時未使用 -w,以後可以將使用者首選的 wait 設定為 yes (options wait yes) 以啟用該功能。如果啟用了此選項,crm 會一直等到轉換完成。每當啟動轉換後,就會顯示一些點來指出進度。同步的指令執行僅適用於 resource start 這樣的指令。

注意
注意:區分管理子指令與組態子指令

crm 工具具有管理功能 (子指令為 resourcenode),可用於進行組態設定 (cibconfigure)。

以下小節概述了 crm 工具的一些重要方面。

8.1.3 顯示 OCF 資源代辦的相關資訊

由於您始終都需要在叢集組態中處理資源代辦,因此 crm 工具包含了 ra 指令。使用該指令可以顯示資源代辦的相關資訊並對其進行管理 (如需其他資訊,另請參閱第 6.3.2 節 「受支援的資源代辦類別」)︰

root # crm ra
crm(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 資源代辦。

8.1.4 使用 crmsh 的外圍程序程序檔

Crmsh 外圍程序程序檔提供了將 crmsh 子指令列舉到檔案中的便捷方式。如此,您便可輕鬆註解特定行或稍後重新執行這些行。請注意,crmsh 外圍程序程序檔只能包含 crmsh 子指令,不允許包含任何其他指令。

您需要先建立包含特定指令的檔案,然後才能使用 crmsh 外圍程序程序檔。例如,下面的檔案會列印叢集的狀態並提供所有節點的清單︰

範例 8.1︰ 簡單 crmsh 外圍程序程序檔
# A small example file with some crm subcommands
status
node list

以井字號 (#) 開頭的任何行都是註解,系統會將其忽略。如果某行過長,則在結尾插入反斜線 (\),然後換到下一行。建議縮排屬於特定子指令的行以便於閱讀。

若要使用此程序檔,請使用以下其中一種方法︰

root # crm -f example.cli
root # crm < example.cli

8.1.5 使用 crmsh 的叢集程序檔

從所有叢集節點收集資訊和部署任何變更是一項關鍵的叢集管理任務。您無需在不同的節點上手動執行相同的程序 (這很容易出錯),而可以使用 crmsh 叢集程序檔。

請不要將它們與 crmsh 外圍程序程序檔相混淆,第 8.1.4 節 「使用 crmsh 的外圍程序程序檔」中對後者進行了介紹。

對比 crmsh 外圍程序程序檔,叢集程序檔另外會執行如下任務︰

  • 安裝特定任務所需的軟體。

  • 建立或修改任何組態檔案。

  • 收集資訊並報告叢集的潛在問題。

  • 將變更部署到所有節點。

crmsh 叢集程序檔不會取代其他叢集管理工具,而是提供整合的方式用於在叢集中執行上述任務。如需詳細資訊,請參閱http://crmsh.github.io/scripts/

8.1.5.1 使用率

若要取得所有可用叢集程序檔的清單,請執行︰

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 的輸出包含標題、簡短描述與程序。每個程序劃分為依指定順序執行的一系列步驟。

每個步驟包含必要參數與選擇性參數的清單,以及這些參數的簡短描述和預設值。

每個叢集程序檔都可識別一組通用參數。可將這些參數傳遞給任何程序檔︰

表格 8.1︰ 通用參數
參數引數描述
actionINDEX如果設定此參數,則只會執行單一動作 (verify 傳回索引)
dry_runBOOL如果設定此參數,則只會模擬執行 (預設值︰no)
nodesLIST列出要對其執行程序檔的節點
portNUMBER要連接到的埠
statefileFILE在以單一步進方式執行時,狀態將會儲存在指定的檔案中
sudoBOOL如果設定此參數,crm 將在適當的情況下提示輸入 sudo 密碼並使用 sudo (預設值︰no)
timeoutNUMBER以秒為單位的執行逾時 (預設值︰600)
userUSER以指定使用者的身分執行程序檔

8.1.5.2 驗證和執行叢集程序檔

在執行某個叢集程序檔之前,請檢查該程序檔將要執行的動作並驗證其參數,以避免出現問題。叢集程序檔可能會執行一系列動作,並且可能會出於各種原因而失敗。因此,在執行程序檔之前驗證參數可幫助避免出現問題。

例如,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.6 使用組態範本

注意
注意:廢棄通知

組態範本已棄用,日後會被移除。組態範本將由叢集程序檔取代,相關資訊請參閱第 8.1.5 節 「使用 crmsh 的叢集程序檔」

組態範本是可供 crmsh 使用的現成叢集組態。不要將它們與資源範本 (如第 8.4.3 節 「建立資源範本」 所述) 混淆。資源範本適用於叢集而非 crm 外圍程序。

組態範本只需略做調整就能符合特定使用者的需求。當某範本建立組態時,便會有警告訊息發出提示,您稍後可以在進一步自訂時編輯該提示。

以下程序說明如何建立一個簡單但功能齊備的 Apache 組態︰

  1. root 身分登入並啟動 crm 互動式外圍程序︰

    root # crm configure
  2. 藉由組態範本建立新的組態︰

    1. 切換至 template 子指令︰

      crm(live)configure# template
    2. 列出可用的組態範本︰

      crm(live)configure template# list templates
      gfs2-base   filesystem  virtual-ip  apache   clvm     ocfs2    gfs2
    3. 指定所需的組態範本。由於現在需要 Apache 組態,因此請選取 apache 範本並將其命名為 g-intranet

      crm(live)configure template# new g-intranet apache
      INFO: pulling in template apache
      INFO: pulling in template virtual-ip
  3. 定義參數︰

    1. 列出您建立的組態︰

      crm(live)configure template# list
      g-intranet
    2. 顯示需要由您填寫的必要變更︰

      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. 啟用偏好的文字編輯器,填寫步驟 3.b 中顯示為錯誤的所有行︰

      crm(live)configure template# edit
  4. 顯示組態並檢查其是否有效 (視步驟 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
  5. 套用組態︰

    crm(live)configure template# apply
    crm(live)configure# cd ..
    crm(live)configure# show
  6. 將變更提交至 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。

8.1.7 使用非正式組態進行測試

非正式組態用於測試不同的組態案例。如果您已建立幾個非正式組態,則可以逐個進行測試以查看變更的效果。

一般程序如下︰

  1. root 身分登入並啟動 crm 互動式外圍程序︰

    root # crm configure
  2. 建立新的非正式組態︰

    crm(live)configure# cib new myNewConfig
    INFO: myNewConfig shadow CIB created

    如果省略陰影 CIB 的名稱,則系統會建立暫時名稱 @tmp@

  3. 如果要將目前的即時組態複製至您的非正式組態,請使用以下指令,否則請跳過此步驟︰

    crm(myNewConfig)# cib reset myNewConfig

    之前的指令可讓您以後修改任何現有資源時更為方便。

  4. 和平常一樣進行變更。建立非正式組態之後,所有變更即會套用至該組態。若要儲存所有變更,請使用以下指令︰

    crm(myNewConfig)# commit
  5. 如果重新需要使用即時叢集組態,請使用以下指令切換回來︰

    crm(myNewConfig)configure# cib use live
    crm(live)# 

8.1.8 組態變更除錯

在將組態變更載入回叢集之前,建議您先使用 ptest 檢閱變更。ptest 指令可顯示提交變更後將發生之動作的圖表。您需要 graphviz 套件才能顯示圖表。以下範例是一份記錄,新增了監控操作︰

root # crm configure
crm(live)configure# show fence-bob 
primitive fence-bob stonith:apcsmart \
        params hostlist="bob"
crm(live)configure# monitor fence-bob 120m:60s
crm(live)configure# show changed
primitive fence-bob stonith:apcsmart \
        params hostlist="bob" \
        op monitor interval="120m" timeout="60s"
crm(live)configure# ptest
crm(live)configure# commit

8.1.9 叢集圖表

若要輸出叢集圖表,請使用指令 crm configure graph。該指令會在目前所在的視窗中顯示目前的組態,因此需要 X11。

如果您偏好使用可擴充向量圖形 (SVG),請使用如下指令︰

root # crm configure graph dot config.svg svg

8.2 管理 Corosync 組態

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

8.3 設定全域叢集選項

全域叢集選項控制叢集在遇到特定情況時的運作方式。一般情況下,可以保留預先定義的值。但是,為了讓叢集的關鍵功能正常運作,還需要在執行基本叢集設定後調整以下參數︰

程序 8.1︰ 使用 crm 修改全域叢集選項
  1. root 身分登入並啟動 crm 工具︰

    root # crm configure
  2. 使用以下指令僅為包含兩個節點的叢集設定選項︰

    crm(live)configure# property no-quorum-policy=stop
    crm(live)configure# property stonith-enabled=true
    重要
    重要:不支援沒有 STONITH 的組態

    系統不支援沒有 STONITH 的叢集。

  3. 顯示您的變更︰

    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"
  4. 提交您的變更並離開︰

    crm(live)configure# commit
    crm(live)configure# exit

8.4 設定叢集資源

做為叢集管理員,您需要為您叢集中的伺服器上執行的所有資源或應用程式建立叢集資源。叢集資源可包括網站、電子郵件伺服器、資料庫、檔案系統、虛擬機器,以及其他您希望使用者隨時都可以存取的伺服器型應用程式或服務。

有關您可以建立之資源類型的綜覽,請參閱第 6.3.3 節 「資源類型」

8.4.1 從檔案載入叢集資源

可從本地檔案或網路 URL 載入部分或全部組態。可定義三種不同方法︰

replace

此選項會以新的來源組態取代目前的組態。

update

此選項會嘗試輸入來源組態。它會將新項目新增至目前的組態或更新其現有項目。

push

此選項會將內容從來源輸入到目前組態中 (與 update 相同)。不過,它會移除在新組態中不可用的物件。

若要從檔案 mycluster-config.txt 載入新組態,請使用以下語法︰

root # crm configure load push mycluster-config.txt

8.4.2 建立叢集資源

系統提供了三種適用於叢集的 RA (資源代辦),如需背景資訊,請參閱第 6.3.2 節 「受支援的資源代辦類別」。若要將新資源新增至叢集,請執行以下步驟︰

  1. root 身分登入並啟動 crm 工具︰

    root # crm configure
  2. 設定基本資源的 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 位址。將位址變更為您的設定。

  3. 顯示並檢閱已進行的變更︰

    crm(live)configure# show
  4. 提交變更,使之生效︰

    crm(live)configure# commit

8.4.3 建立資源範本

如果您要建立多個具有相似組態的資源,資源範本可以簡化此任務。另請參閱第 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

在條件約束中可以參考資源範本,來代表所有由該範本衍生的基本資源。這有助於產生更加簡明、清晰的叢集組態。除了位置條件約束以外,其他所有條件約束中均允許參考資源範本。並存條件約束不可包含一個以上的範本參考。

8.4.4 建立 STONITH 資源

crm 角度看,STONITH 裝置只是另一個資源。若要建立 STONITH 資源,請執行下列步驟︰

  1. root 身分登入並啟動 crm 互動式外圍程序︰

    root # crm configure
  2. 使用如下指令取得所有 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
  3. 從上面的清單中選擇一種 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.
    ...
  4. 使用 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

8.4.5 設定資源條件約束

設定所有資源只是工作的一部分。即使叢集瞭解所有必需的資源,可能仍然無法正確地對其進行處理。例如,儘量不要在 DRBD 的從屬節點上掛接檔案系統 (實際上,對 DRBD 執行此操作將會失敗)。定義相關條件約束,讓此類資訊適用於叢集。

如需條件約束的詳細資訊,請參閱第 6.5 節 「資源條件約束」

8.4.5.1 位置條件約束

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 位址 vip1vip2

crm(live)configure# primitive vip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.5
crm(live)configure# primitive vip2 ocf:heartbeat:IPaddr2 params ip=192.168.1.6
crm(live)configure# location loc-alice { vip1 vip2 } inf: alice

在某些情況下,為 location 指令使用資源模式會有效且方便得多。資源模式是兩個斜線之間的規則運算式。例如,使用以下指令可使上述的虛擬 IP 位址全部都相符︰

crm(live)configure# location  loc-alice /vip.*/ inf: alice

8.4.5.2 並存條件約束

colocation 指令用於定義應在相同或不同主機上執行的資源。

您只能設定 +inf 或 -inf 範圍,即定義必須始終或永不在同一個節點上執行的資源。您也可以使用非 inf 範圍。在該情況下,並存只是一種建議,叢集可以決定不遵循該範圍,以便在有衝突發生時不停止其他資源。

例如,若要永遠都在同一個主機上執行 ID 分別為 filesystem_resourcenfs_group 的資源,請使用下面的條件約束︰

crm(live)configure# colocation nfs_on_filesystem inf: nfs_group filesystem_resource

對於主要從屬組態,除本地執行資源之外,還必須瞭解目前節點是否為主要節點。

8.4.5.3 並存無相依性的資源集

有時,將一組資源放置在同一個節點上 (定義並存條件約束) 會很有用,但前提是這些資源之間不存在硬性相依性。

如果您要將多個資源放置在同一個節點上,但不希望在其中一個資源失敗時執行任何動作,則可以使用指令 weak-bond

root # crm configure assist weak-bond RES1 RES2

實作 weak-bond 會使用指定的資源自動建立一個虛構資源和並存條件約束。

8.4.5.4 順序條件約束

Order 指令定義動作順序。

有時需要提供資源動作或操作的順序。例如,在裝置可用於系統之前,不能掛接檔案系統。順序條件約束可用於在另一個資源符合特定條件 (例如啟動、停止或升級為主要資源) 的前後啟動或停止服務。

crm 外圍程序中使用以下指令可設定一個順序條件約束︰

crm(live)configure# order nfs_after_filesystem mandatory: filesystem_resource nfs_group

8.4.5.5 範例組態的條件約束

如果沒有其他條件約束,本節中所用的範例可能不會起作用。所有資源皆必須與 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

8.4.6 指定資源容錯移轉節點

若要判斷資源容錯移轉,請使用 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 節 「容錯移轉節點」

8.4.7 指定資源錯誤回復節點 (資源粘性)

當原始節點恢復連接且位於叢集中時,資源可以錯誤回復至該節點。為防止資源錯誤回復到之前執行它的節點,或者要指定讓該資源錯誤回復到其他節點,請變更其資源粘性值。您可以在建立資源時或建立之後指定資源粘性。

如需綜覽,請參閱第 6.5.5 節 「錯誤回復節點」

8.4.8 根據負載影響設定資源的配置

某些資源可能有特定的容量要求,例如最低記憶體容量。如果不符合其要求,這些資源可能無法完全啟動,或者執行時效能會降低。

鑒於此,High Availability Extension 允許您指定以下參數︰

  1. 特定節點提供的容量。

  2. 特定資源要求的容量。

  3. 配置資源的整體策略。

如需參數的詳細背景資訊及組態範例,請參閱第 6.5.6 節 「依據負載影響放置資源」

若要設定資源的要求以及節點提供的容量,可以利用使用率屬性。您可以依據自己的偏好命名使用率屬性,依據組態需要定義任意數量的名稱/值對。在某些情況下,有些代辦 (例如 VirtualDomain) 會自行更新使用率。

在以下範例中,假設您已擁有叢集節點和資源的基本組態,現在還想要設定特定節點提供的容量和特定資源需要的容量。

程序 8.2︰ 使用 crm 新增或修改使用率屬性
  1. root 身分登入並啟動 crm 互動式外圍程序︰

    root # crm configure
  2. 若要指定節點提供的容量,請使用以下指令,並以您的節點名稱取代佔位符 NODE_1

    crm(live)configure# node NODE_1 utilization memory=16384 cpu=8

    透過設定以上的值,我們假設 NODE_1 為資源提供 16GB 的記憶體和 8 個 CPU 核心。

  3. 若要指定資源需要的容量,請使用︰

    crm(live)configure# primitive xen1 ocf:heartbeat:Xen ... \
         utilization memory=4096 cpu=4

    如此,資源會佔用 NODE_1 的 4096 個記憶體單元和 4 個 CPU 單元。

  4. 使用 property 指令設定配置策略︰

    crm(live)configure# property ...

    可用的值如下︰

    default (預設值)

    不考量使用率值。資源依據位置分數配置。如果分數相同,則在各節點上平均分配資源。

    utilization

    判斷節點的可用容量是否足夠滿足資源的要求時,會參考使用率值。但是,依舊會依據配置給節點的資源數量完成負載平衡。

    minimal

    判斷節點是否有足夠的可用容量來滿足資源的要求時,會考量使用率值。系統會儘可能將資源集中到少量節點上,以節省其餘節點上的能耗。

    balanced

    判斷節點是否有足夠的可用容量來滿足資源的要求時,會考量使用率值。系統會嘗試將資源平均分配,以便最佳化資源效能。

    注意
    注意:設定資源優先程度

    提供的配置策略效能最佳,它們雖然沒有使用複雜的啟發式解析程式,卻總能獲得最佳的配置效果。請確保資源的優先程度已正確設定,以便先排程最重要的資源。

  5. 在離開 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 只有其中一個會予以配置,因為它們的優先程度相同,因此結果尚不確定。若要解決這種不確定的狀況,您需要為其中一個設定較高的優先程度。

8.4.9 設定資源監控

若要監控資源,可以使用兩種方法︰使用 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 節 「資源監控」

8.4.10 設定叢集資源群組

叢集其中一個最常見的元素是需要存放在一起的一組資源。請按照順序啟動它們,停止時採用相反順序。若要簡化此組態,您可以使用群組。以下範例將建立兩個基本資源 (一個 IP 位址和一個電子郵件資源)︰

  1. 以系統管理員身分執行 crm 指令。提示變更為 crm(live)

  2. 設定基本資源︰

    crm(live)# configure
    crm(live)configure# primitive Public-IP ocf:heartbeat:IPaddr \
       params ip=1.2.3.4 id= Public-IP
    crm(live)configure# primitive Email systemd:postfix \
       params id=Email
  3. 以正確的順序按照相應的識別碼對基本資源分組︰

    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 節 「群組」

8.4.11 設定複製品資源

複製品最初被認為是啟動 IP 資源的 N 個例項並在整個叢集進行分配以達到負載平衡的一種便利方法。結果表明,複製還有其他多種用途,包括與 DLM 整合、圍籬區隔子系統和 OCFS2。只要資源代辦支援,就可以複製任何資源。

如需所複製之資源的詳細資訊,請參閱第 6.3.5.2 節 「複製品」

8.4.11.1 建立匿名複製品資源

若要建立匿名複製品資源,首先要建立一個基本資源,然後使用 clone 指令參考該資源。執行下列操作︰

  1. root 身分登入並啟動 crm 互動式外圍程序︰

    root # crm configure
  2. 設定基本資源,例如︰

    crm(live)configure# primitive Apache ocf:heartbeat:apache
  3. 複製基本資源︰

    crm(live)configure# clone cl-apache Apache

8.4.11.2 建立可設定狀態的/多狀態的複製品資源

多狀態資源是一種特殊的複製品,此類型允許例項處於兩種執行模式中的其中一種,可以是主動/被動、主要/次要或主要/從屬。

若要建立可設定狀態的複製品資源,首先要建立一個基本資源,然後再建立多狀態資源。多狀態資源至少必須支援升級和降級操作。

  1. root 身分登入並啟動 crm 互動式外圍程序︰

    root # crm configure
  2. 設定基本資源。視需要變更間隔︰

    crm(live)configure# primitive my-rsc ocf:myCorp:myAppl \
        op monitor interval=60 \
        op monitor interval=61 role=Master
  3. 建立多狀態資源︰

    crm(live)configure# ms ms-rsc my-rsc

8.5 管理叢集資源

除了能夠設定叢集資源外,crm 工具還可讓您管理現有資源。以下小節對此進行了概述。

8.5.1 顯示叢集資源

當管理叢集時,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 補齊功能會為您提供所有類型的清單。

8.5.2 啟動新的叢集資源

若要啟動新的叢集資源,您需要相應的識別碼。請執行下列步驟︰

  1. root 身分登入並啟動 crm 互動式外圍程序︰

    root # crm
  2. 切換至資源層級︰

    crm(live)# resource
  3. 使用 start 啟動資源,然後按 →| 鍵顯示所有已知資源︰

    crm(live)resource# start ID

8.5.3 清理資源

若資源失敗,系統會自動將其重新啟動,但每次失敗都會增加資源的 failcount。如果為資源設定了 migration-threshold,則當故障次數達到該移轉限定值時,將不再允許節點執行該資源。

  1. 開啟外圍程序並以 root 使用者身分登入。

  2. 取得所有資源的清單︰

    root # crm resource list
      ...
    Resource Group: dlm-clvm:1
             dlm:1  (ocf:pacemaker:controld) Started
             clvm:1 (ocf:heartbeat:clvm) Started
  3. 例如,若要清理資源 dlm

    root # crm resource cleanup dlm

8.5.4 移除叢集資源

執行下列步驟可以移除叢集資源︰

  1. root 身分登入並啟動 crm 互動式外圍程序︰

    root # crm configure
  2. 執行下列指令以取得資源清單︰

    crm(live)# resource status

    例如,輸出可能如下所示 (myIP 為資源的相應識別碼)︰

    myIP    (ocf:IPaddr:heartbeat) ...
  3. 刪除具有相應識別碼的資源 (此操作還隱含 commit 動作)︰

    crm(live)# configure delete YOUR_ID
  4. 提交變更︰

    crm(live)# configure commit

8.5.5 移轉叢集資源

雖然資源設定為在發生硬體或軟體失敗事件時自動容錯移轉 (或移轉) 至叢集的其他節點,您也可以使用 Hawk2 或指令行將資源手動移至另一個節點。

請使用 migrate 指令來完成這項任務。例如,若要將資源 ipaddress1 移轉至名為 bob 的叢集節點,請使用以下指令︰

root # crm resource
crm(live)resource# migrate ipaddress1 bob

8.5.6 分組/標記資源

使用標記可以一次參考多個資源,而無需在這些資源之間建立任何並存或順序關係。這個功能在把概念上相關的資源分組在一起時將十分實用。例如,如果有多個資源與某個資料庫相關,您可以建立名為 databases 的標記,並將與該資料庫相關的所有資源新增至此標記︰

root # crm configure tag databases: db1 db2 db3

這樣,只需使用一個指令就能啟動所有這些資源︰

root # crm resource start databases

同樣,您也可以一次性停止所有這些資源︰

root # crm resource stop databases

8.5.7 取得健康狀態

您可以使用所謂的程序檔顯示叢集或節點的健康狀態。程序檔可以執行各種不同的任務,並不局限於顯示狀態。不過,本小節將重點介紹如何獲得健康狀態資訊。

若要獲得 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/

8.6 設定獨立於 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 指令將會負責該任務。強烈建議您只使用此指令來管理機密參數。

8.7 擷取歷程資訊

調查叢集歷程是一項複雜的任務。為了簡化此項任務,crmsh 提供了 history 指令及其子指令。假設 SSH 已正確設定。

每個叢集會移動狀態、移轉資源或啟動重要的程序。所有這些動作的相關資訊都可透過 history 子指令擷取。

依預設,所有 history 指令顯示的都是最近一小時內發生的事件。若要變更此時間範圍,請使用 limit 子指令。語法是︰

root # crm history
crm(live)history# limit FROM_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# 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

8.8 更多資訊

列印此頁面