7.3. リソースのコロケーション

任意のリソースの場所を別のリソースの場所に依存するよう定義するのがコロケーションの制約です。
2 つのリソース間にコロケーションの制約を作成する場合は重要な副作用がある点に注意してください。ノードにリソースを割り当てる順序に影響します。つまり、リソース B の場所がわからないとリソース B に相対的となるようリソース A を配置することはできません。このため、コロケーションの制約を作成する場合は、リソース A をリソース B に対してコロケートするのか、リソース B をリソース A に対してコロケートするのかが重要となります。
また、コロケーションの制約を作成する際に注意しておきたい事項がもう一つあります。リソース A をリソース B に対してコロケートすると仮定した場合、クラスターはリソース B に選択するノードを決定する際、リソース A の優先傾向も考慮に入れます。
次のコマンドはコロケーションの制約を作成します。
pcs constraint colocation add [master|slave] source_resource with [master|slave] target_resource [score] [options]
マスターリソース、スレーブリソースの詳細は 「多状態のリソース: 複数モードのリソース」 を参照してください。
表7.3「コロケーション制約のプロパティ」 にコロケーション制約設定用のプロパティおよびオプションを示します。

表7.3 コロケーション制約のプロパティ

フィールド説明
source_resource
コロケーションソース、制約の条件を満たせない場合はこのリソースの実行を全く許可しないと判断されることがあります。
target_resource
コロケーションターゲット、このリソースの実行先が最初に決定されてからソースリソースの実行先が決定されます。
score
正の値を指定するとリソースは同じノードで実行され、負の値を指定するとリソースは同じノードで実行されません。デフォルト値である + INFINITYsource_resourcetarget_resource と同じノードで実行されなければならないことを示しています。- INFINITYsource_resourcetarget_resource と同じノードで実行されてはならないことを示しています。

7.3.1. 強制的な配置

制約スコアが +INFINITY または -INFINITY の場合は常に強制的な配置が発生します。制約条件が満たされないと source_resource の実行が許可されません。score=INFINITY の場合、target_resource がアクティブではないケースが含まれます。
myresource1 を常に myresource2 と同じマシンで実行する場合は次のような制約を追加します。
# pcs constraint colocation add myresource1 with myresource2 score=INFINITY
INFINITY を使用しているため myresource2 がクラスターのいずれのノードでも実行できない場合には (理由の如何に関わらず) myresource1 の実行は許可されません。
また、逆の設定、つまり myresource1myresource2 と同じマシンでは実行できないようクラスターを設定することもできます。この場合は score=-INFINITY を使用します。
# pcs constraint colocation add myresource1 with myresource2 score=-INFINITY
-INFINITY を指定することで制約が結合しています。このため、実行できる場所として残っているノードで myresource2 がすでに実行されている場合には myresource1 はいずれのノードでも実行できなくなります。

7.3.2. 勧告的な配置

必ず実行する場合や必ず実行しない場合が「強制的な配置」であれば「勧告的な配置」はある状況下で優先される場合を言います。制約のスコアが -INFINITY より大きく INFINITY より小さい場合、クラスターはユーザーの希望を優先しようとしますが、クラスターリソースを一部停止することを希望する場合は無視します。勧告的なコロケーション制約と設定の他の要素を組み合わせると、強制的であるように動作させることができます。

7.3.3. 複数リソースのコロケート

設定により、順番にコロケートおよび開始されるリソースのセットを作成する必要がある場合、「リソースグループ」 の説明にしたがってこれらのリソースが含まれるリソースグループを設定できます。しかし、リソースのセットをコロケートする必要があり、順番に起動する必要はない場合、 pcs constraint colocation set コマンドを使用してリソースのセットにコロケーションの制約を作成できます。
pcs constraint colocation set コマンドを使用すると、以下のオプションをリソースのセットに設定できます。
  • sequential: true または false に設定でき、セットのメンバーがお互いをコロケートする必要があるかどうかを示します。
    sequentialfalse に設定すると、このセットのメンバーがアクティブであるかどうかに関係なく、このセットのメンバーを制約の後にリストされている他のセットとコロケートすることができます。そのため、このオプションは制約でこのセットの後に他のセットがリストされている場合のみ有効です。それ以外の場合、制約の効果はありません。
  • role: StoppedStartedMaster、または Slave に設定できます。マルチステートリソースの詳細は 「多状態のリソース: 複数モードのリソース」 を参照してください。
pcs constraint colocation set コマンドの setoptions パラメーターの後に、リソースのセットに対する以下の制約オプションを設定できます。
  • kind: 制約の実行方法を示します。このオプションの詳細は 表7.2「順序の制約のプロパティ」 を参照してください。
  • symmetrical: リソースを停止する順序を示します。デフォルト値は true で、リソースを逆順で停止します。
  • id: 定義する制約の名前を指定します。
セットのメンバーをリストする場合、各メンバーはその前のメンバーとコロケートされます。たとえば、「set A B」は B が A とコロケートされることを意味します。しかし、複数のセットをリストする場合、各セットはその後のメンバーとコロケートされます。たとえば、「set C D sequential=false set A B」は C と D のセット (C と D との関係がない) が A と B のセット (B は A とコロケートされる) とコロケートされることを意味します。
以下のコマンドは、リソースのセットにコロケーションの制約を作成します。
pcs constraint colocation set resource1 resource2 [resourceN]... [options] [set resourceX resourceY ... [options]] [setoptions [constraint_options]]

7.3.4. コロケーション制約の削除

コロケーション制約を削除する場合はコマンドに source_resource を付けて使用します。
pcs constraint colocation remove source_resource target_resource