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 新增位置條件約束 #
登入 Hawk2:
https://HAWKSERVER:7630/
從左側導覽列中,選取
› › 。輸入唯一的
。從
清單中選取要為之定義條件約束的一個或多個資源。輸入
。分數表示您要指定給此資源條件約束的值。正值表示資源可以在您下一步中指定的 上執行。負值表示資源不應在該節點上執行。系統會先套用分數較高的條件約束,然後再套用分數較低的條件約束。有些常用的值也可以透過下拉式方塊設定:
若要強制資源在該節點上執行,請按一下箭頭圖示並選取
Always
。這會將分數設為INFINITY
。若要禁止資源在該節點上執行,請按一下箭頭圖示並選取
Never
。如此會將分數設定為-INFINITY
,表示資源不得在該節點上執行。若要將分數設定為
0
,請按一下箭頭圖示並選取Advisory
。這樣便會停用條件約束。如果您想設定資源發現,又不想對資源進行條件約束,即可採用這個辦法。
選取一個
。按一下
完成組態。螢幕頂部的訊息會顯示動作是否成功。
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-alice
和 vip1
的資源集 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 新增並存條件約束 #
登入 Hawk2:
https://HAWKSERVER:7630/
從左側導覽列中,選取
› › 。輸入唯一的
。輸入
。分數決定了資源之間的位置關係。正值表示資源應該在同一個節點上執行。負值表示資源不應該在同一個節點上執行。該分數會結合其他因素來決定將資源配置於何處。有些常用的值也可以透過下拉式方塊設定:
若要強制資源在同一個節點上執行,請按一下箭頭圖示並選取
Always
。這會將分數設為INFINITY
。若要禁止資源在同一個節點上執行,請按一下箭頭圖示並選取
Never
。如此會將分數設定為-INFINITY
,表示資源不得在同一個節點上執行。
定義資源的條件約束:
從
類別的下拉式方塊中,選取某個資源 (或範本)。資源隨即新增完畢,下方會顯示新的空白下拉式方塊。
重複此步驟以新增更多資源。
由於最頂端的資源依賴於下一個資源 (下面的資源依此類推),叢集首先會決定向哪個位置放置最後一個資源,然後根據該決定放置依賴它的資源,依此類推。如果無法符合條件約束要求,叢集可能不允許執行相依資源。
若要交換共存條件約束中不同資源的順序,按一下其中一個資源的向上箭頭圖示,將該資源換至輸入項的上方。
如果需要,可以為每個資源指定更多參數 (例如
Promote
、Started
、Demote
、Stopped
)。只需按一下資源旁邊的空白下拉式清單並選取所需的項目。按一下
完成組態。螢幕頂部的訊息會顯示動作是否成功。
7.5.2 使用 crmsh 新增並存條件約束 #
colocation
指令用於定義應在相同或不同主機上執行的資源。
您只能設定 +inf 或 -inf 範圍,即定義必須始終或永不在同一個節點上執行的資源。您也可以使用非 inf 範圍。在該情況下,並存只是一種建議,叢集可以決定不遵循該範圍,以便在有衝突發生時不停止其他資源。
例如,如果希望 resource1
和 resource2
資源永遠在同一個主機上執行,請使用以下條件約束:
crm(live)configure#
colocation coloc-2resource inf: resource1 resource2
對於主要從屬組態,除了在本地執行資源以外,還需要瞭解目前的節點是否為主要節點。
7.6 新增順序條件約束 #
您可以使用順序條件約束,在另一個資源符合特定條件 (例如已啟動、已停止或已升級為主要資源) 之前或之後,立即啟動或停止某項服務。例如,在裝置可用於系統之前,不能掛接檔案系統。由於順序條件約束定義了資源之間的相依性,因此您至少需要兩個資源才能建立順序條件約束。
可以使用 Hawk2 或 crmsh 來新增順序條件約束。
7.6.1 使用 Hawk2 新增順序條件約束 #
登入 Hawk2:
https://HAWKSERVER:7630/
在左側導覽列中,選取
› › 。輸入唯一的
。輸入
。若分數大於零,則強制執行順序條件約束,否則只是選擇性執行。有些常用的值也可以透過下拉式方塊設定:
若要將順序條件約束設為強制規則,請按一下箭頭圖示並選取
Mandatory
。如果只想將順序條件約束設為一項建議,請按一下箭頭圖示並選取
Optional
。Serialize
:若要確保不會同時對資源執行兩個停止/啟動操作,請按一下箭頭圖示並選取Serialize
。這樣可以確保只有在一個資源完全啟動後,系統才能啟動其他資源。特別是對於在啟動期間會對主機產生大量負載的資源,通常會使用此方法。
對於順序條件約束通常可以啟用
選項。這會指定資源停止時使用相反順序。定義資源的條件約束:
從
類別的下拉式方塊中,選取某個資源 (或範本)。資源隨即新增完畢,下方會顯示新的空白下拉式方塊。
重複此步驟以新增更多資源。
最上面的資源最先啟動,然後是第二個資源,依此類推。通常資源會以相反的順序停止。
若要交換順序條件約束中不同資源的順序,按一下其中一個資源的向上箭頭圖示,將該資源換至輸入項的上方。
如果需要,可以為每個資源指定更多參數 (例如
Promote
、Started
、Demote
、Stopped
)。只需按一下資源旁邊的空白下拉式清單並選取所需的項目。確認變更以完成組態設定。螢幕頂部的訊息會顯示動作是否成功。
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.1 「新增位置條件約束」所述操作,但步驟 4 除外。不要選取單個資源,而是在按住 Ctrl 或 Shift 的同時按下滑鼠來選取多個資源。如此就會在位置條件約束中建立一個資源集。
若要從位置條件約束中移除某個資源,請在按住 Ctrl 的同時再次按一下該資源即可將其取消選取。
若要在並存或順序條件約束中使用資源集:
遵照程序 7.2 「新增並存條件約束」或程序 7.3 「新增順序條件約束」中的指示,但用於為條件約束定義資源的步驟除外 (步驟 5.a 或步驟 6.a):
新增多個資源。
若要建立資源集,按一下資源旁邊的鏈結圖示,將其鏈結到上方的資源。屬於資源集的資源四周以框架圍起,以此標示資源集。
您也可以將多個資源併入某個資源集,或建立多個資源集。
圖 7.4︰ Hawk2 - 一個並存條件約束中的兩個資源集 #若要解除資源與其上方資源之間的鏈結,按一下該資源旁邊的剪刀圖示。
確認變更以完成條件約束組態。
7.7.2 使用 crmsh 透過資源集定義條件約束 #
例如,您可以在 crmsh 中使用資源集 (loc-alice
) 的以下組態,在同一個節點 vip1
上放置兩個虛擬 IP (vip2
和 alice
):
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
如果想要使用資源集來取代並存條件約束的組態,請參考以下兩個範例:
<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>
如果您想使用資源集來取代順序條件約束的組態,請考慮以下兩個範例:
<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>
可以使用包含排序資源的資源集來實現相同目的:
<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
屬性在 AND
與 OR
邏輯之間切換。
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 來指定資源容錯移轉節點。
例如,假設您已為資源 rsc1
設定位置條件約束,讓其偏向於在 alice
上執行。若資源在該節點上失敗,系統會檢查 migration-threshold
,並將其與 failcount 進行比較。若 failcount >= migration-threshold,則將資源移轉至優先設定次佳的節點。
達到限定值後,便不再允許該節點執行失敗的資源,除非資源的 failcount 被重設。此操作可由叢集管理員手動執行,也可透過設定資源的 failure-timeout
選項來完成。
例如,設定 migration-threshold=2
及 failure-timeout=60s
會在資源失敗兩次後將其移轉至新節點。一分鐘過後,允許該資源移回原節點 (視粘性與條件約束的分數而定)。
移轉限定值概念有兩種例外情況,發生於資源無法啟動或無法停止之時:
啟動失敗會將 failcount 設定為
INFINITY
,因此一旦發生便會立即移轉資源。停止失敗會導致圍籬區隔 (
stonith-enabled
設定為true
時,這是預設設定)。如果未定義 STONITH 資源 (或
stonith-enabled
設定為false
),資源將不會移轉。
7.8.1 使用 Hawk2 指定資源容錯移轉節點 #
登入 Hawk2:
https://HAWKSERVER:7630/
依程序 7.1 「新增位置條件約束」 所述為該資源設定位置條件約束。
依
migration-threshold
中的程序 8.1: 修改資源或群組 所述將 步驟 5 中繼屬性新增至該資源,並為該 migration-threshold 輸入一個值。該值應該為小於 INFINITY 的正數。若要讓資源的 failcount 自動過期,請依
failure-timeout
中的程序 6.2: 使用 Hawk2 新增基本資源 所述將 步驟 5 中繼屬性新增至該資源,並為該 值failure-timeout
。若要指定具有資源優先設定的其他容錯移轉節點,請建立其他位置條件約束。
您也可以隨時手動清理資源的 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 指定資源容錯回復節點 #
登入 Hawk2:
https://HAWKSERVER:7630/
依
resource-stickiness
中的程序 8.1: 修改資源或群組 所述將 步驟 5 中繼屬性新增至資源。為
resource-stickiness
指定介於-INFINITY
和INFINITY
之間的值。
7.10 依據資源負載影響放置資源 #
並非所有資源都相同。有些資源 (例如 Xen 客體作業系統) 要求代管它們的節點符合其容量要求。如果放置資源後其所需的容量之和超過了提供的容量,資源效能便會下降 (甚至無法執行)。
鑒於此,High Availability Extension 允許您指定以下參數:
特定節點提供的容量。
特定資源要求的容量。
配置資源的整體策略。
可以使用 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 使用情況。使用率屬性會自動新增至資源組態中。
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_memory
和 host_memory
在 NodeUtilization
和 VirtualDomain
資源代理程式中,hv_memory
和 host_memory
均預設為 true
。但 Xen 只需要 hv_memory
,KVM 只需要 host_memory
。為了避免引起混淆,我們建議停用不需要的屬性。例如:
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
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 所述設定叢集節點的使用率屬性,之後才能將使用率屬性新增至資源。
登入 Hawk2:
https://HAWKSERVER:7630/
若要將使用率屬性新增至現有資源,請依照第 8.2.1 節 「使用 Hawk2 編輯資源和群組」所述前往 › ,然後開啟資源組態對話方塊。
如果要建立新資源,請前往第 6.4.1 節 「使用 Hawk2 建立基本資源」所述繼續操作。
› ,然後依照在資料組態對話方塊中,轉到
類別。從空下拉方塊中,選取您在程序 7.7 中已為節點設定的其中一個使用率屬性。
在屬性旁邊的空文字方塊中輸入一個屬性值。該值必須是整數。
新增所需數量的使用率屬性,並為其新增相應的值。
確認您的變更。螢幕頂部的訊息會顯示動作是否成功。
設定節點提供的容量以及資源所需的容量之後,請在全域叢集選項中設定位置策略。否則,容量組態不會生效。可以使用幾個策略來排程負載:例如,您可將負載集中於最少的節點上,或在所有可用的節點上平均分攤。
登入 Hawk2:
https://HAWKSERVER:7630/
從左側導覽列中,選取
› 以開啟相應的螢幕。該螢幕會顯示全域叢集選項和資源,以及操作預設值。從螢幕上部的空下拉式方塊中選取
placement-strategy
。依預設,其值會設定為
,表示不考慮使用率屬性和值。根據要求將
設定為適當的值。確認您的變更。
7.10.2 使用 crmsh 根據資源負載影響放置資源 #
若要設定資源的要求以及節點提供的容量,可以利用使用率屬性。您可以依據自己的偏好命名使用率屬性,依據組態需要定義任意數量的名稱/值對。在某些情況下,有些代理程式 (例如 VirtualDomain
) 會自行更新使用率。
在以下範例中,假設您已擁有叢集節點和資源的基本組態,現在還想要設定特定節點提供的容量和特定資源需要的容量。
crm
新增或修改使用率屬性 #以
root
身分登入並啟動crm
互動式外圍程序:#
crm configure
若要指定節點提供的容量,請使用以下指令,並以您的節點名稱取代預留位置 NODE_1:
crm(live)configure#
node NODE_1 utilization hv_memory=16384 cpu=8
透過設定這些值,NODE_1 將會向資源提供 16 GB 記憶體和 8 個 CPU 核心。
若要指定資源需要的容量,請使用:
crm(live)configure#
primitive xen1 Xen ... \ utilization hv_memory=4096 cpu=4
如此,資源會佔用 NODE_1 的 4096 個記憶體單元和 4 個 CPU 單元。
使用
property
指令設定配置策略:crm(live)configure#
property
...可用的值如下:
default
(預設值)不考量使用率值。資源依據位置分數配置。如果分數相同,則在各節點上平均分配資源。
utilization
判斷節點的可用容量是否足夠滿足資源的要求時,會參考使用率值。但是,依舊會依據配置給節點的資源數量完成負載平衡。
minimal
判斷節點的可用容量是否足夠滿足資源的要求時,會參考使用率值。系統會儘可能將資源集中到少量節點上,以節省其餘節點上的能耗。
balanced
判斷節點是否有足夠的可用容量來滿足資源的要求時,會考量使用率值。系統會嘗試將資源平均分配,以便最佳化資源效能。
注意:設定資源優先程度提供的配置策略效能最佳,它們雖然沒有使用複雜的啟發式解析程式,卻總能獲得最佳的配置效果。請確保資源的優先程度已正確設定,以便先排程最重要的資源。
在離開 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 Explained 的 Resource Constraints 一章
Colocation Explained
Ordering Explained