6.3. 資源的 Colocation

Colocation 限制能決定一項資源的位置是否取決於另一項資源。
在兩項資源之間建立 colocation 需考慮到一項重要的副作用:這會影響資源被指派至節點的順序。這是因為您在不知道資源 B 的位置在哪的情況下,無法使資源 A 與資源 B 相聯。因此當您建立 colocation 限制時,您必須考慮應讓資源 A 與資源 B 相聯,或是讓資源 B 與資源 A 相聯。
建立 colocation 限制時需考慮到的另一件事就是,假設資源 A 已與資源 B collocate,當叢集決定資源 B 應使用哪個節點的同時,也會考量資源 A 的偏好設定。
下列指令能建立一項 colocation 限制。
pcs constraint colocation add [master|slave] source_resource with [master|slave] target_resource [score] [options]
欲取得 master 與 slave 資源上的相關資訊,請參閱〈節 8.2, “多狀態資源:含有多重模式的資源”〉。
表格 6.3, “Colocation 限制的內容” 概述了配置 colocation 限制的內容與選項。

表格 6.3. Colocation 限制的內容

欄位詳述
source_resource
Colocation 來源。若無法滿足限制,叢集可能會決定根本不允許資源執行。
target_resource
Colocation 目標。叢集會決定先將這項資源放在哪裡,然後才決定將來源資源放在哪裡。
score
正數值代表資源應在相同的節點上執行。負數值則代表資源不應在相同的節點上執行。若值為 + INFINITY(預設值)則代表 source_resource 必須在與 target_resource 相同的節點上執行。若值為 - INFINITY 則代表 source_resource 必須在與 target_resource 不同的節點上執行。

6.3.1. 強制安置(Mandatory Placement)

任何時候當限制的分數為 +INFINITY-INFINITY 時,強制安置就會發生。在此情況下,若無法滿足限制,那麼 source_resource 將不被允許執行。若 score=INFINITY,這可能代表 target_resource 未啟用。
若您需要 myresource1 總是在與 myresource2 相同的機器上執行,您需加入下列限制:
# pcs constraint colocation add myresource1 with myresource2 score=INFINITY
因為使用了 INFINITY,若 myresource2(基於某些原因)無法在任何叢集節點上執行,則 myresource1 將不會被允許執行。
此外,您亦可進行相反配置,將叢集中的 myresource1 配置為不可在與 myresource2 相同的機器上執行。在此情況下請使用 score=-INFINITY
# pcs constraint colocation add myresource1 with myresource2 score=-INFINITY
又,透過指定 -INFINITY,限制將會綁定。因此若唯一能執行的位置為 myresource2 早已在執行的位置,那麼 myresource1 將無法在任何位置上執行。