6.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]
マスターリソース、スレーブリソースの詳細は 「多状態のリソース: 複数モードのリソース」 を参照してください。
表6.3「コロケーション制約のプロパティ」 にコロケーション制約設定用のプロパティおよびオプションを示します。
フィールド | 説明 |
---|---|
source_resource
|
コロケーションソース、制約の条件を満たせない場合はこのリソースの実行を全く許可しないと判断されることがあります。
|
target_resource
|
コロケーションターゲット、このリソースの実行先が最初に決定されてからソースリソースの実行先が決定されます。
|
score
|
正の値にするとリソースを同じノードで実行する、負の値にするとリソースを同じノードで実行しない設定になります。+
INFINITY がデフォルト値になります。つまり source_resource を target_resource と同じノードで実行させるということです。- INFINITY の値にすると source_resource を target_resource と同じノードで実行させないということになります。
|
6.3.1. 強制的な配置
制約スコアが
+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 myresource2 with score=-INFINITY
-INFINITY
を指定することで制約が結合しています。このため、実行できる場所として残っているノードで myresource2
がすでに実行されている場合には myresource1
はいずれのノードでも実行できなくなります。