跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Linux Enterprise High Availability Extension 文件 / 管理指南 / 組態和管理 / 設定資源條件約束
適用範圍 SUSE Linux Enterprise High Availability Extension 15 SP5

7 設定資源條件約束

設定所有資源只是工作的一部分。即使叢集知道所有需要的資源,也可能無法正確處理這些資源。使用資源條件約束可指定能在哪些叢集節點上執行資源、以何順序載入資源,以及特定資源相依於其他哪些資源。

7.1 條件約束類型

系統中的條件約束分為三種類型:

資源位置

位置條件約束定義資源可以、不可以或偏好在哪些節點上執行。

資源並存

並存條件約束告知叢集哪些資源可以或不可以在同一個節點上執行。

資源順序

順序條件約束定義動作的順序。

重要
重要:條件約束與特定資源類型的限制
  • 不要為資源群組的成員建立並存條件約束。應該建立指向整個資源群組的並存條件約束。其他所有類型的條件約束可安全地用於資源群組的成員。

  • 不要對包含複製品資源或者已套用可升級複製品資源的資源使用任何條件約束。條件約束必須套用於複製品或可升級複製品資源,而不能套用於子資源。

7.2 分數和 infinity

定義條件約束時,還需要處理分數。所有類型的分數對於叢集的工作方式而言都是不可或缺的。實際上,從移轉資源到決定要將已降級叢集中的哪個資源停止,所有這些操作都是透過操作分數來實現。系統會對每個資源都計算分數,針對某個資源分數為負數的所有節點都不能執行該資源。計算完針對資源的分數之後,叢集會選擇分數最高的節點。

INFINITY 目前定義為 1,000,000。與其相關的加法或減法計算遵循以下三項基本規則:

  • 任何值 + INFINITY = INFINITY

  • 任何值 - INFINITY = -INFINITY

  • INFINITY - INFINITY = -INFINITY

定義資源條件約束時,您還要指定每個條件約束的分數。分數表示您要指定給此資源條件約束的值。系統會先套用分數較高的條件約束,然後再套用分數較低的條件約束。透過為指定資源建立不同分數的其他位置條件約束,即可指定資源將容錯移轉至之目標節點的順序。

7.3 資源範本和條件約束

如果您定義了一個資源範本 (請參閱第 6.8 節 「建立資源範本」),則可以在以下類型的條件約束中參考該範本:

  • 順序條件約束

  • 並存條件約束

  • rsc_ticket 條件約束 (適用於 Geo 叢集)

不過,並存條件約束不得包含對同個範本的多個參考。資源集不得包含對範本的參考。

條件約束中參考的資源範本代表由該範本衍生的所有基本資源。也就是說,這些條件約束將適用於所有參考了資源範本的基本資源。在條件約束中參考資源範本是另外一種使用資源集的方式,這種方式能夠大大簡化叢集設定。如需有關資源集的詳細資料,請參閱第 7.7 節 「使用資源集定義條件約束」

7.4 新增位置條件約束

位置條件約束決定了資源在哪些節點上可以執行、優先執行或禁止執行。舉例而言,位置條件約束可以設為與特定資料庫相關的所有資源都在同一個節點上執行。可以為每個資源多次新增此類條件約束。系統會對指定的資源評估所有位置條件約束。

可以使用 Hawk2 或 crmsh 來新增位置條件約束。

7.4.1 使用 Hawk2 新增位置條件約束

程序 7.1︰ 新增位置條件約束
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增條件約束 › 位置

  3. 輸入唯一的條件約束 ID

  4. 資源清單中選取要為之定義條件約束的一個或多個資源。

  5. 輸入分數。分數表示您要指定給此資源條件約束的值。正值表示資源可以在您下一步中指定的節點上執行。負值表示資源不應在該節點上執行。系統會先套用分數較高的條件約束,然後再套用分數較低的條件約束。

    有些常用的值也可以透過下拉式方塊設定:

    • 若要強制資源在該節點上執行,請按一下箭頭圖示並選取 Always。這會將分數設為 INFINITY

    • 若要禁止資源在該節點上執行,請按一下箭頭圖示並選取 Never。如此會將分數設定為 -INFINITY,表示資源不得在該節點上執行。

    • 若要將分數設定為 0,請按一下箭頭圖示並選取 Advisory。這樣便會停用條件約束。如果您想設定資源發現,又不想對資源進行條件約束,即可採用這個辦法。

  6. 選取一個節點

  7. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

Hawk2 - 位置條件約束
圖 7.1︰ Hawk2 - 位置條件約束

7.4.2 使用 crmsh 新增位置條件約束

location 指令定義資源可在、不可在或偏好在哪些節點上執行。

下面的簡單範例中,將在名為 fs1 的節點上執行資源 alice 的優先設定設為 100:

crm(live)configure# location loc-fs1 fs1 100: alice

另一個範例是使用 ping 的位置:

crm(live)configure# primitive ping ping \
    params name=ping dampen=5s multiplier=100 host_list="r1 r2"
crm(live)configure# clone cl-ping ping meta interleave=true
crm(live)configure# location loc-node_pref internal_www \
    rule 50: #uname eq alice \
    rule ping: defined ping

參數 host_list 是要 ping 和計數的主機的空格分隔清單。位置條件約束的另一個使用案例是將基本資源分組為一個資源集。例如,如果多個資源依存於某個 ping 屬性來獲得網路連接,則此功能會十分有用。以前,需要在組態中複製 -inf/ping 規則數次,因而不必要地增加了複雜性。

下面的範例會建立參考虛擬 IP 位址 loc-alicevip1 的資源集 vip2

crm(live)configure# primitive vip1 IPaddr2 params ip=192.168.1.5
crm(live)configure# primitive vip2 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

7.5 新增並存條件約束

並存條件約束告知叢集哪些資源可以或不可以在同一個節點上執行。由於並存條件約束定義了資源之間的相依性,因此您至少需要兩個資源才能建立並存條件約束。

可以使用 Hawk2 或 crmsh 來新增並存條件約束。

7.5.1 使用 Hawk2 新增並存條件約束

程序 7.2︰ 新增並存條件約束
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 新增條件約束 › 並存

  3. 輸入唯一的條件約束 ID

  4. 輸入分數。分數決定了資源之間的位置關係。正值表示資源應該在同一個節點上執行。負值表示資源不應該在同一個節點上執行。該分數會結合其他因素來決定將資源配置於何處。

    有些常用的值也可以透過下拉式方塊設定:

    • 若要強制資源在同一個節點上執行,請按一下箭頭圖示並選取 Always。這會將分數設為 INFINITY

    • 若要禁止資源在同一個節點上執行,請按一下箭頭圖示並選取 Never。如此會將分數設定為 -INFINITY,表示資源不得在同一個節點上執行。

  5. 定義資源的條件約束:

    1. 資源類別的下拉式方塊中,選取某個資源 (或範本)。

      資源隨即新增完畢,下方會顯示新的空白下拉式方塊。

    2. 重複此步驟以新增更多資源。

      由於最頂端的資源依賴於下一個資源 (下面的資源依此類推),叢集首先會決定向哪個位置放置最後一個資源,然後根據該決定放置依賴它的資源,依此類推。如果無法符合條件約束要求,叢集可能不允許執行相依資源。

    3. 若要交換共存條件約束中不同資源的順序,按一下其中一個資源的向上箭頭圖示,將該資源換至輸入項的上方。

  6. 如果需要,可以為每個資源指定更多參數 (例如 PromoteStartedDemoteStopped)。只需按一下資源旁邊的空白下拉式清單並選取所需的項目。

  7. 按一下建立完成組態。螢幕頂部的訊息會顯示動作是否成功。

Hawk2 - 並存條件約束
圖 7.2︰ Hawk2 - 並存條件約束

7.5.2 使用 crmsh 新增並存條件約束

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

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

例如,如果希望 resource1resource2 資源永遠在同一個主機上執行,請使用以下條件約束:

crm(live)configure# colocation coloc-2resource inf: resource1 resource2

對於主要從屬組態,除了在本地執行資源以外,還需要瞭解目前的節點是否為主要節點。

7.6 新增順序條件約束

您可以使用順序條件約束,在另一個資源符合特定條件 (例如已啟動、已停止或已升級為主要資源) 之前或之後,立即啟動或停止某項服務。例如,在裝置可用於系統之前,不能掛接檔案系統。由於順序條件約束定義了資源之間的相依性,因此您至少需要兩個資源才能建立順序條件約束。

可以使用 Hawk2 或 crmsh 來新增順序條件約束。

7.6.1 使用 Hawk2 新增順序條件約束

程序 7.3︰ 新增順序條件約束
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左側導覽列中,選取組態 › 新增條件約束 › 順序

  3. 輸入唯一的條件約束 ID

  4. 輸入分數。若分數大於零,則強制執行順序條件約束,否則只是選擇性執行。

    有些常用的值也可以透過下拉式方塊設定:

    • 若要將順序條件約束設為強制規則,請按一下箭頭圖示並選取 Mandatory

    • 如果只想將順序條件約束設為一項建議,請按一下箭頭圖示並選取 Optional

    • Serialize:若要確保不會同時對資源執行兩個停止/啟動操作,請按一下箭頭圖示並選取 Serialize。這樣可以確保只有在一個資源完全啟動後,系統才能啟動其他資源。特別是對於在啟動期間會對主機產生大量負載的資源,通常會使用此方法。

  5. 對於順序條件約束通常可以啟用對稱選項。這會指定資源停止時使用相反順序。

  6. 定義資源的條件約束:

    1. 資源類別的下拉式方塊中,選取某個資源 (或範本)。

      資源隨即新增完畢,下方會顯示新的空白下拉式方塊。

    2. 重複此步驟以新增更多資源。

      最上面的資源最先啟動,然後是第二個資源,依此類推。通常資源會以相反的順序停止。

    3. 若要交換順序條件約束中不同資源的順序,按一下其中一個資源的向上箭頭圖示,將該資源換至輸入項的上方。

  7. 如果需要,可以為每個資源指定更多參數 (例如 PromoteStartedDemoteStopped)。只需按一下資源旁邊的空白下拉式清單並選取所需的項目。

  8. 確認變更以完成組態設定。螢幕頂部的訊息會顯示動作是否成功。

Hawk2 - 順序條件約束
圖 7.3︰ Hawk2 - 順序條件約束

7.6.2 使用 crmsh 新增順序條件約束

order 指令定義動作順序。

例如,如果希望 resource1 永遠在 resource2 前面啟動,請使用以下條件約束:

crm(live)configure# order res1_before_res2 Mandatory: resource1 resource2

7.7 使用資源集定義條件約束

資源集是可用於定義位置、並存或順序條件約束的另一種方式,使用此方式,基本資源會全部歸入一個集合中。以前,為了實現此目的,需要定義一個資源群組 (並不總是能準確反映出設計目的),或者將每種關係定義為個別的條件約束。隨著資源和組合數量的增長,後一種方法會導致條件約束劇增。透過資源集進行設定不一定會降低複雜程度,但更易於理解和維護。

可以使用 Hawk2 或 crmsh 來設定資源集。

7.7.1 使用 Hawk2 透過資源集定義條件約束

程序 7.4︰ 在條件約束中使用資源集
  1. 若要在位置條件約束中使用資源集:

    1. 依照程序 7.1 「新增位置條件約束」所述操作,但步驟 4 除外。不要選取單個資源,而是在按住 CtrlShift 的同時按下滑鼠來選取多個資源。如此就會在位置條件約束中建立一個資源集。

    2. 若要從位置條件約束中移除某個資源,請在按住 Ctrl 的同時再次按一下該資源即可將其取消選取。

  2. 若要在並存或順序條件約束中使用資源集:

    1. 遵照程序 7.2 「新增並存條件約束」程序 7.3 「新增順序條件約束」中的指示,但用於為條件約束定義資源的步驟除外 (步驟 5.a步驟 6.a):

    2. 新增多個資源。

    3. 若要建立資源集,按一下資源旁邊的鏈結圖示,將其鏈結到上方的資源。屬於資源集的資源四周以框架圍起,以此標示資源集。

    4. 您也可以將多個資源併入某個資源集,或建立多個資源集。

      Hawk2 - 一個並存條件約束中的兩個資源集
      圖 7.4︰ Hawk2 - 一個並存條件約束中的兩個資源集
    5. 若要解除資源與其上方資源之間的鏈結,按一下該資源旁邊的剪刀圖示。

  3. 確認變更以完成條件約束組態。

7.7.2 使用 crmsh 透過資源集定義條件約束

範例 7.1︰ 用於位置條件約束的資源集

例如,您可以在 crmsh 中使用資源集 (loc-alice) 的以下組態,在同一個節點 vip1 上放置兩個虛擬 IP (vip2alice):

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

如果想要使用資源集來取代並存條件約束的組態,請參考以下兩個範例:

範例 7.2︰ 並存資源鏈
<constraints>
    <rsc_colocation id="coloc-1" rsc="B" with-rsc="A" score="INFINITY"/>
    <rsc_colocation id="coloc-2" rsc="C" with-rsc="B" score="INFINITY"/>
    <rsc_colocation id="coloc-3" rsc="D" with-rsc="C" score="INFINITY"/>
</constraints>

資源集表達的相同組態:

<constraints>
   <rsc_colocation id="coloc-1" score="INFINITY" >
    <resource_set id="colocated-set-example" sequential="true">
     <resource_ref id="A"/>
     <resource_ref id="B"/>
     <resource_ref id="C"/>
     <resource_ref id="D"/>
    </resource_set>
   </rsc_colocation>
</constraints>

如果您想使用資源集來取代順序條件約束的組態,請考慮以下兩個範例:

範例 7.3︰ 排序資源鏈
<constraints>
    <rsc_order id="order-1" first="A" then="B" />
    <rsc_order id="order-2" first="B" then="C" />
    <rsc_order id="order-3" first="C" then="D" />
</constraints>

可以使用包含排序資源的資源集來實現相同目的:

範例 7.4︰ 以資源集表示的排序資源鏈
<constraints>
    <rsc_order id="order-1">
    <resource_set id="ordered-set-example" sequential="true">
    <resource_ref id="A"/>
    <resource_ref id="B"/>
    <resource_ref id="C"/>
    <resource_ref id="D"/>
    </resource_set>
    </rsc_order>
</constraints>

資源集可以是有序的 (sequential=true),也可以是無序的 (sequential=false)。此外,可以使用 require-all 屬性在 ANDOR 邏輯之間切換。

7.7.3 並存無相依項的資源集

有時,將一組資源放置在同一個節點上 (定義並存條件約束) 會很有用,但前提是這些資源之間不存在硬性相依關係。例如,您要在同一個節點上放置兩個資源,但希望叢集在其中一個資源失敗時重新啟動另一個資源。

可以在 crm 外圍程序中使用 weak-bond 指令實現此目的:

# crm configure assist weak-bond resource1 resource2

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

7.8 指定資源容錯移轉節點

資源在失敗時會自動重新啟動。如果無法在目前節點上重新啟動,或資源已在目前節點上失敗 N 次,則會嘗試容錯移轉至其他節點。每次資源失敗,其 failcount 值都會增加。您可以定義一個失敗計數,讓資源在失敗該次數 (migration-threshold) 之後移轉至新節點。若叢集中有兩個以上的節點,則特定資源容錯移轉所至的節點由 High Availability 軟體來選擇。

但是,您可以透過為該資源設定一或多個位置條件約束以及一個 migration-threshold,指定資源容錯移轉所至的節點。

可以使用 Hawk2 或 crmsh 來指定資源容錯移轉節點。

範例 7.5︰ 移轉限定值 - 處理流程

例如,假設您已為資源 rsc1 設定位置條件約束,讓其偏向於在 alice 上執行。若資源在該節點上失敗,系統會檢查 migration-threshold,並將其與 failcount 進行比較。若 failcount >= migration-threshold,則將資源移轉至優先設定次佳的節點。

達到限定值後,便不再允許該節點執行失敗的資源,除非資源的 failcount 被重設。此操作可由叢集管理員手動執行,也可透過設定資源的 failure-timeout 選項來完成。

例如,設定 migration-threshold=2failure-timeout=60s 會在資源失敗兩次後將其移轉至新節點。一分鐘過後,允許該資源移回原節點 (視粘性與條件約束的分數而定)。

移轉限定值概念有兩種例外情況,發生於資源無法啟動或無法停止之時:

  • 啟動失敗會將 failcount 設定為 INFINITY,因此一旦發生便會立即移轉資源。

  • 停止失敗會導致圍籬區隔 (stonith-enabled 設定為 true 時,這是預設設定)。

    如果未定義 STONITH 資源 (或 stonith-enabled 設定為 false),資源將不會移轉。

7.8.1 使用 Hawk2 指定資源容錯移轉節點

程序 7.5︰ 指定容錯移轉節點
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 程序 7.1 「新增位置條件約束」 所述為該資源設定位置條件約束。

  3. migration-threshold中的程序 8.1: 修改資源或群組 所述將 步驟 5 中繼屬性新增至該資源,並為該 migration-threshold 輸入一個值。該值應該為小於 INFINITY 的正數。

  4. 若要讓資源的 failcount 自動過期,請依failure-timeout中的程序 6.2: 使用 Hawk2 新增基本資源 所述將 步驟 5 中繼屬性新增至該資源,並為該 輸入一個failure-timeout

    Image
  5. 若要指定具有資源優先設定的其他容錯移轉節點,請建立其他位置條件約束。

您也可以隨時手動清理資源的 failcount,而不是等待資源的 failcount 自動過期。如需詳細資訊,請參閱第 8.5.1 節 「使用 Hawk2 清理叢集資源」

7.8.2 使用 crmsh 指定資源容錯移轉節點

若要判斷資源容錯移轉,請使用 meta 屬性 migration-threshold.如果在所有節點上的失敗計數都超過 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,資源將不會移轉。

7.9 指定資源容錯回復節點 (資源粘性)

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

指定資源粘性的值時,請考慮以下事項:

值為 0

這是預設值。資源會放置在系統中的最佳位置。這表示當有更佳的或負載更低的節點可用時,則移動資源。此選項幾乎等同於自動容錯回復,除了資源可能會移至原先節點 (資源之前於其上處於使用中狀態) 之外的節點這種情況。

值大於 0

資源偏向於留在目前的位置,但可能會在有更合適的節點時移動。值越高表示越偏向於將資源保留在目前的位置。

值小於 0

資源偏向於從其目前位置移開。絕對值越高表示越偏向於移動資源。

值為 INFINITY

資源永遠留在目前的位置,除非因節點不再適合執行資源 (節點關機、節點待命、達到 migration-threshold 或組態變更) 而強制關閉資源。此選項的作用幾乎等同於停用自動容錯回復。

值為 -INFINITY

總是從目前位置移出資源。

7.9.1 使用 Hawk2 指定資源容錯回復節點

程序 7.6︰ 指定資源粘性
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. resource-stickiness 中的程序 8.1: 修改資源或群組 所述將 步驟 5 中繼屬性新增至資源。

  3. resource-stickiness 指定介於 -INFINITYINFINITY 之間的值。

    Image

7.10 依據資源負載影響放置資源

並非所有資源都相同。有些資源 (例如 Xen 客體作業系統) 要求代管它們的節點符合其容量要求。如果放置資源後其所需的容量之和超過了提供的容量,資源效能便會下降 (甚至無法執行)。

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

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

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

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

可以使用 Hawk2 或 crmsh 來組態這些設定:

如果一個節點有足夠的可用容量來滿足資源的要求,則認為該節點符合資源要求。若要手動設定資源的要求以及節點提供的容量,可以利用使用率屬性。您可以依據自己的偏好命名使用率屬性,依據組態需要定義任意數量的名稱/值對。但是,屬性的值必須是整數。

如果具有使用率屬性的多個資源已分組或具有並存條件約束,High Availability Extension 會將這種情況考慮在內。如有可能,系統會將資源放置到可以符合所有容量要求的節點上。

注意
注意:群組的使用率屬性

使用者無法直接為資源群組設定使用率屬性。不過,若要簡化群組的組態設定,您可以新增具有群組中所有資源所需總容量的使用率屬性。

High Availability Extension 還提供了用於自動偵測和設定節點容量和資源要求的方法:

NodeUtilization 資源代理程式可檢查節點的容量 (與 CPU 和 RAM 相關)。若要設定自動偵測,請建立類別、提供者和類型如下的複製品資源:ocf:pacemaker:NodeUtilization。每個節點上都應該執行一個該複製品例項。例項啟動後,將會在節點的 CIB 組態中新增使用率區段。如需詳細資訊,請參閱crm ra info NodeUtilization

為了自動偵測資源的最低要求 (與 RAM 和 CPU 相關),我們改進了 Xen 資源代理程式。Xen 資源啟動後,該代理程式即會反映 RAM 和 CPU 使用情況。使用率屬性會自動新增至資源組態中。

注意
注意:適用於 Xen 和 libvirt 的不同資源代理程式

ocf:heartbeat:Xen 資源代理程式不應與 libvirt 配合使用,因為 libvirt 需要能夠修改機器描述檔案。

對於 libvirt,請使用 ocf:heartbeat:VirtualDomain 資源代理程式。

除了偵測最低要求外,您還可以透過 VirtualDomain 資源代理程式監控目前的使用率。它可以偵測虛擬機器的 CPU 和 RAM 使用情況。若要使用此功能,請設定類別、提供者和類型如下的資源:ocf:heartbeat:VirtualDomain。可以使用以下例項屬性:

  • autoset_utilization_cpu

  • autoset_utilization_hv_memory (用於 Xen) 或 autoset_utilization_host_memory (用於 KVM)

這些屬性預設為 true。如此,每個監控週期都會更新 CIB 中的使用率值。如需詳細資訊,請參閱crm ra info VirtualDomain

注意
注意:hv_memoryhost_memory

NodeUtilizationVirtualDomain 資源代理程式中,hv_memoryhost_memory 均預設為 true。但 Xen 只需要 hv_memory,KVM 只需要 host_memory。為了避免引起混淆,我們建議停用不需要的屬性。例如:

範例 7.6︰ 在停用 hv_memory 的情況下為 KVM 建立資源代理程式
# crm configure primitive p_nu NodeUtilization \
      params utilization_hv_memory=false \
      op monitor timeout=20s interval=60
# crm configure primitive p_vm VirtualDomain \
      params autoset_utilization_hv_memory=false \
      op monitor timeout=30s interval=10s
範例 7.7︰ 在停用 host_memory 的情況下為 Xen 建立資源代理程式
# crm configure primitive p_nu NodeUtilization \
      params utilization_host_memory=false \
      op monitor timeout=20s interval=60
# crm configure primitive p_vm VirtualDomain \
      params autoset_utilization_host_memory=false \
      op monitor timeout=30s interval=10s

無論是手動還是自動設定容量與要求,都必須使用 placement-strategy 內容 (在全域叢集選項中) 指定配置策略。可用的值如下:

default (預設值)

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

utilization

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

minimal

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

balanced

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

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

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

7.10.1 使用 Hawk2 根據資源負載影響放置資源

使用率屬性用於設定資源的要求以及節點提供的容量。您需要先設定節點的容量,然後才能設定資源所需的容量。

程序 7.7︰ 設定節點提供的容量
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取監控 › 狀態

  3. 節點索引標籤上,選取要設定其容量的節點。

  4. 操作欄中按一下向下箭頭圖示,然後選取編輯

    編輯節點螢幕即會開啟。

  5. 使用率下,將使用率屬性的名稱輸入到空下拉方塊中。

    該名稱可以是任意名稱 (例如 RAM_in_GB)。

  6. 按一下新增圖示以新增屬性。

  7. 在屬性旁邊的空文字方塊中輸入一個屬性值。該值必須是整數。

    Image
  8. 新增所需數量的使用率屬性,並為其新增相應的值。

  9. 確認您的變更。螢幕頂部的訊息會顯示動作是否成功。

程序 7.8︰ 設定資源所需的容量

請在建立基本資源或編輯現有基本資源時,設定特定資源需從節點中獲取的容量。

您需要先依程序 7.7 所述設定叢集節點的使用率屬性,之後才能將使用率屬性新增至資源。

  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 若要將使用率屬性新增至現有資源,請依照第 8.2.1 節 「使用 Hawk2 編輯資源和群組」所述前往管理 › 狀態,然後開啟資源組態對話方塊。

    如果要建立新資源,請前往組態 › 新增資源,然後依照第 6.4.1 節 「使用 Hawk2 建立基本資源」所述繼續操作。

  3. 在資料組態對話方塊中,轉到使用率類別。

  4. 從空下拉方塊中,選取您在程序 7.7 中已為節點設定的其中一個使用率屬性。

  5. 在屬性旁邊的空文字方塊中輸入一個屬性值。該值必須是整數。

  6. 新增所需數量的使用率屬性,並為其新增相應的值。

  7. 確認您的變更。螢幕頂部的訊息會顯示動作是否成功。

設定節點提供的容量以及資源所需的容量之後,請在全域叢集選項中設定位置策略。否則,容量組態不會生效。可以使用幾個策略來排程負載:例如,您可將負載集中於最少的節點上,或在所有可用的節點上平均分攤。

程序 7.9︰ 設定放置策略
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 叢集組態以開啟相應的螢幕。該螢幕會顯示全域叢集選項和資源,以及操作預設值。

  3. 從螢幕上部的空下拉式方塊中選取 placement-strategy

    依預設,其值會設定為預設,表示不考慮使用率屬性和值。

  4. 根據要求將配置策略設定為適當的值。

  5. 確認您的變更。

7.10.2 使用 crmsh 根據資源負載影響放置資源

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

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

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

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

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

    透過設定這些值,NODE_1 將會向資源提供 16 GB 記憶體和 8 個 CPU 核心。

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

    crm(live)configure# primitive xen1 Xen ... \
          utilization hv_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

以下範例展示了含有四個虛擬機器的三節點叢集,其中的各個節點完全相同:

crm(live)configure# node alice utilization hv_memory="4000"
crm(live)configure# node bob utilization hv_memory="4000"
crm(live)configure# node charlie utilization hv_memory="4000"
crm(live)configure# primitive xenA Xen \
    utilization hv_memory="3500" meta priority="10" \
    params xmfile="/etc/xen/shared-vm/vm1"
crm(live)configure# primitive xenB Xen \
    utilization hv_memory="2000" meta priority="1" \
    params xmfile="/etc/xen/shared-vm/vm2"
crm(live)configure# primitive xenC Xen \
    utilization hv_memory="2000" meta priority="1" \
    params xmfile="/etc/xen/shared-vm/vm3"
crm(live)configure# primitive xenD 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 只有其中之一仍可以放置,並且由於它們的優先程度相同,因此結果尚不確定。若要解決這種不確定的狀況,您需要為其中一個設定較高的優先程度。

7.11 更多資訊

如需設定條件約束的詳細資訊,以及順序和並存基本概念的詳細背景資訊,請參閱 http://www.clusterlabs.org/pacemaker/doc/ 上的以下文件:

  • Pacemaker ExplainedResource Constraints 一章

  • Colocation Explained

  • Ordering Explained