套用至 SUSE Linux Enterprise High Availability Extension 12

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

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

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

注意
注意:使用者權限

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

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

root # crm options user hacluster

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

6.1 crmsh — 綜覽

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

提示
提示:區分外圍程序提示符與互動式 crm 提示符

為了方便閱讀所有程式碼和範例,本章使用了以下表示法來區分外圍程序提示符與互動式 crm 提示符:

  • 針對使用者 root 的外圍程序提示符:

    root # 
  • 互動式 crmsh 提示符 (如果終端機支援彩色字元,將顯示為綠色):

    crm(live)# 

6.1.1 使用說明

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

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

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

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

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

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

    root # crm configure help group

    也可以使用:

    root # crm help configure group

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

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

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

6.1.2 執行 crmsh 的子指令

crm 指令本身的使用方式如下:

  • 直接.  將所有子指令與 crm 結合使用,再按 Enter,便會立即顯示輸出。例如,輸入 crm help ra 可獲取 ra 子指令 (資源代辦) 的相關資訊。

  • 做為 crm 外圍程序檔.  在程序檔中使用 crm 及其子指令。可以透過兩種方式來完成:

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

    程序檔可以包含 crm 的任意指令。例如︰

    # A small script file for crm
    status
    node list

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

  • 做為內部外圍程序進行互動.  輸入 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 工具的一些重要方面。

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

由於您始終都需要在叢集組態中處理資源代辦,因此 crm 工具包含了 ra 指令。使用該指令可以顯示資源代辦的相關資訊並對其進行管理 (如需其他資訊,另請參閱第 4.2.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: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 資源代辦。

6.1.4 使用組態樣板

組態樣板是可供 crmsh 使用的現成叢集組態。不要將它們與資源樣板 (如第 6.4.2 節「建立資源樣板」 所述) 混淆。資源樣板適用於叢集而非 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。

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

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

一般程序如下:

  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)# 

6.1.6 組態變更除錯

在將組態變更載入回叢集之前,建議您先使用 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

6.1.7 叢集圖表

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

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

root # crm configure graph dot config.svg svg

6.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

6.3 設定全域叢集選項

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

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

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

    crm(live)configure# property no-quorum-policy=ignore
    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="ignore" \
       stonith-enabled="true"
  4. 提交您的變更並離開:

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

6.4 設定叢集資源

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

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

6.4.1 建立叢集資源

系統提供了三種適用於叢集的 RA (資源代辦),如需背景資訊,請參閱第 4.2.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

6.4.2 建立資源樣板

如果您要建立多個具有相似組態的資源,資源樣板可以簡化此任務。另請參閱第 4.4.3 節「資源樣板和條件約束」 以瞭解一些基本的背景資訊。請勿將它們與第 6.1.4 節「使用組態樣板」 中所述的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    

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

6.4.3 建立 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  

6.4.4 設定資源條件約束

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

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

6.4.4.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 vip1 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

6.4.4.2 並存條件約束

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

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

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

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

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

6.4.4.3 並存無相依性的資源集

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

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

root # crm configure assist weak-bond RES1 RES2

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

6.4.4.4 順序條件約束

Order 指令定義動作順序。

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

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

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

6.4.4.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

6.4.5 指定資源容錯移轉節點

若要判斷資源容錯移轉,請使用 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,資源將不會移轉。

如需綜覽,請參閱第 4.4.4 節「容錯移轉節點」

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

當原始節點恢復連線且位於叢集中時,資源可以錯誤回復至該節點。若不想讓資源錯誤回復至先前執行時所在的節點,或要為資源指定另一個錯誤回復節點,請變更其 resource stickiness 值。您可以在建立資源時或建立之後指定資源粘性。

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

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

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

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

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

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

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

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

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

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

過程 6.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

    如此,資源會佔用 nodeA 的 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 charly utilization memory="4000"
crm(live)configure# primitive xenA ocf:heartbeat:Xen \
    utilization memory="3500" meta priority="10"
crm(live)configure# primitive xenB ocf:heartbeat:Xen \
    utilization memory="2000" meta priority="1"
crm(live)configure# primitive xenC ocf:heartbeat:Xen \
    utilization memory="2000" meta priority="1"
crm(live)configure# primitive xenD ocf:heartbeat:Xen \
    utilization memory="1000" meta priority="5"
crm(live)configure# property placement-strategy="minimal"

這三個節點啟動後,會先將 xenA 配置於一個節點上,接著是 xenD。xenB 和 xenC 會配置在一起,或其中一個與 xenD 配置在一起。

如果一個節點失敗,表示可用的總記憶體太少,無法代管全部資源。如此會確保 xenA 及 xenD 都會予以配置。但 xenB 與 xenC 只有其中一個會予以配置,因為它們的優先程度相同,因此結果尚不確定。若要解決這種不確定的狀況,您需要為其中一個設定較高的優先程度。

6.4.8 設定資源監控

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

如需綜覽,請參閱第 4.3 節「資源監控」

6.4.9 設定叢集資源群組

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

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

  2. 設定基本資源:

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

    crm(live)configure# group g-shortcut Public-IP Email

若要變更群組成員的順序,請在 configure 子指令中使用 modgroup 指令。使用以下指令可將基本資源 Email 移至 Public-IP 前面。(這只用於示範該功能):

crm(live)configure# modgroup g-shortcut add p.lsb-exim before p.public-ip

如果您想從群組中移除某個資源 (例如,Email),請使用以下指令:

crm(live)configure# modgroup g-shortcut remove p.lsb-exim

如需綜覽,請參閱第 4.2.5.1 節「群組」

6.4.10 設定複製品資源

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

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

6.4.10.1 建立匿名複製品資源

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

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

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

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

    crm(live)configure# clone cl-apache Apache 

6.4.10.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

6.5 管理叢集資源

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

6.5.1 啟動新的叢集資源

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

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

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

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

    crm(live)resource# start start ID

6.5.2 清理資源

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

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

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

    root # crm resource list
      ...
    Resource Group: dlm-clvm:1
             dlm:1  (ocf::pacemaker:controld) Started 
             clvm:1 (ocf::lvm2:clvmd) Started
             cmirrord:1     (ocf::lvm2:cmirrord) Started
  3. 移除資源︰

    root # crm resource cleanup dlm-clvm

    例如,如果要停止 DLM 資源,請在 dlm-clvm 資源群組中,以 dlm 取代 RSC

6.5.3 移除叢集資源

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

  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

6.5.4 移轉叢集資源

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

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

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

6.5.5 分組/標記資源

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

root # crm configure tag-db db1 db2 db3

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

root # crm resource start tag-db

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

root # crm resource stop tag-db

6.5.6 使用維護模式

您可能不時地需要對個別叢集元件或整個叢集執行測試或維護任務 — 變更叢集組態、更新個別節點的軟體套件,或者將叢集升級到更高的產品版本。

為此,High Availability Extension 提供了針對多個層級的 maintenance 選項:

向叢集套用維護模式

如果您要將整個叢集置於維護模式,請使用以下指令:

root # crm configure property maintenance-mode=true
向節點套用維護模式

例如,若要將節點 alice 置於維護模式:

root # crm node maintenance alice

Crm status 指令將顯示 alice 處於維護模式,並且系統將不再向該節點配置資源。若要移除節點的維護旗標,請使用:

root # crm node ready alice
向資源套用維護模式

如果要將特定的資源設定為維護模式,請使用 meta 指令。例如,若要將資源 ipaddress 置於維護模式,請輸入:

root # crm meta ipaddress set maintenance true
警告
警告:資料遺失的風險

當服務在叢集控制下執行時,如果您需要執行任何測試或維護任務,請務必遵循以下指南:

  1. 在開始之前,請將個別資源、節點或整個叢集設定為維護模式。這有助於避免一些不利的負面影響,例如,資源不按順序啟動、出現叢集節點間 CIB 不同步或資料遺失的風險。

  2. 執行維護任務或測試。

  3. 完成後,請解除維護模式以開始正常的叢集操作。

如需處於維護模式的資源和叢集會發生之情況的詳細資料,請參閱第 4.7 節「維護模式」

6.5.7 取得健康狀態

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

若要獲得 health 指令的所有詳細資料,請使用 describe

root # crm script describe health

該指令會顯示一則描述和所有參數及其預設值的清單。若要執行程序檔,請使用 run

root # crm script run health verbose=true

如果您希望只執行整套指令中的一個步驟,可以使用 describe 指令列出步驟類別中的所有可用步驟。

例如,以下指令會執行 health 指令的第一個步驟。輸出會儲存在 health.json 檔案中以供進一步調查:

root # crm script run health \
    step='Collect cluster information' \
    statefile='health.json'

如需程序檔的其他資訊,請參閱 http://crmsh.github.io/scripts/

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

6.7 擷取歷程資訊

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

每個叢集會移動狀態、移轉資源或啟動重要的程序。所有這些動作的相關資訊都可透過 history 子指令擷取。您也可以依照過程 5.27, “使用歷程總管檢視轉換” 所述使用 Hawk。

依預設,所有 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 2

數字越大,報告就越詳細。預設值為 0 (零)。

設定上述參數後,請使用 log 顯示記錄訊息。

若要顯示上次轉換,請使用以下指令:

crm(live)history# transition -1
INFO: fetching new logs, please wait ...

此指令會擷取記錄,並執行 dotty (從 graphviz 套件) 以顯示轉換圖表。該外圍程序會開啟您使用 游標鍵瀏覽的記錄檔案。

如果您不想要開啟轉換圖表,請使用 nograph 選項:

crm(live)history# transition -1 nograph

6.8 更多資訊

列印此頁面