7.3. リソースのコロケーション
任意のリソースの場所を別のリソースの場所に依存するよう定義するのがコロケーションの制約です。
2 つのリソース間にコロケーション制約を作成すると、リソースがノードに割り当てられる割り当てる順序に重要な影響を及ぼす点に注意してください。リソース B の場所を把握していない場合は、リソース B に相対的となるようにリソース A を配置することができません。このため、コロケーションの制約を作成する場合は、リソース A をリソース B に対してコロケーションを設定するのか、もしくはリソース B をリソース A に対してコロケーションを設定するのかを考慮する必要があります。
また、コロケーションの制約を作成する際に注意しておきたいもう 1 つの点として、リソース A をリソース B に対してコロケーションすると仮定した場合、クラスターがリソース B に選択するノードを決定する際、リソース A の優先度も考慮に入れます。
次のコマンドはコロケーションの制約を作成します。
pcs constraint colocation add [master|slave] source_resource with [master|slave] target_resource [score] [options]
マスターリソースとスレーブリソースについての詳細は 「多状態のリソース: 複数モードのリソース」 を参照してください。
表7.4「コロケーション制約のプロパティー」 は、コロケーション制約を設定するのに使用するプロパティーおよびオプションをまとめています。
フィールド | 説明 |
---|---|
source_resource
|
コロケーションソース。制約の条件を満たさない場合、クラスターではこのリソースの実行を許可しないことを決定する可能性があります。
|
target_resource
|
コロケーションターゲット。クラスターは、このリソースの配置先を決定してから、ソースリソースの配置先を決定します。
|
score
|
正の値を指定するとリソースが同じノードで実行します。負の値を指定すると同じノードで実行しなくなります。デフォルト値である +
INFINITY を指定すると、source_resource は target_resource と同じノードで実行する必要があることを示します。-INFINITY の値は、source_resource を target_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
の実行は許可されません。
または、逆の設定、つまり
myresource1
が myresource2
と同じマシンで実行できないクラスターを設定することもできます。この場合は、score=-INFINITY
を使用します。
# pcs constraint colocation add myresource1 with myresource2 score=-INFINITY
ここでも、
-INFINITY
を指定することで、制約はバインドされます。したがって、実行したい場所が残っている場所が myresource2
である場合、myresource1
はどこにも実行できません。
7.3.2. 勧告的な配置
必ず実行する (または必ず実行しない) 状況を強制的な配置とするならば、勧告的な配置は、ある状況下で優先される状況を指しています。制約のスコアが
-INFINITY
より大きく、INFINITY
より小さい場合、クラスターはユーザーの希望に対応しようとしますが、クラスターリソースの一部を停止するという選択肢がある場合には無視できます。勧告的なコロケーション制約と設定の他の要素を組み合わせると、強制的であるように動作させることができます。
7.3.3. 複数リソースのコロケート
コロケーションと順序が適用されるリソースのセットを作成する必要がある場合は、「リソースグループ」 に従って、このようなリソースを含むリソースグループを設定できます。ただし、コロケーションを設定する必要があるリソースをリソースグループとして設定することが適切ではない場合もあります。
- リソースのセットにコロケーションを設定する必要があるものの、リソースが必ずしも順番に起動する必要がない場合
- リソース A または B のいずれかに対してコロケーションを設定する必要があるリソース C が起動したものの、A と B の間に関係が設定されていない場合。
- リソース C およびリソース D を、リソース A およびリソース B の両方に対してコロケーションを設定する必要があるものの、A と B の間、または C と D の間に関係が設定されていない場合
このような状況では、pcs constraint colocation set コマンドを使用して、リソースのセットにコロケーション制約を作成できます。
pcs constraint colocation set コマンドを使用すると、以下のオプションをリソースのセットに設定できます。
sequential
。セットのメンバーが相互にコロケーションする必要があるかどうかを示すtrue
またはfalse
に設定できます。sequential
をfalse
に設定すると、このセットのどのメンバーがアクティブであるかに関係なく、このセットのメンバーを制約の後半に一覧表示されている別のセットと同じ場所に配置できます。そのため、このオプションは制約でこのセットの後に他のセットが指定されている場合に限り有効です。他のセットが指定されていない場合は、制約の効果がありません。
pcs constraint colocation set コマンドの
setoptions
パラメーターの後に、リソースのセットに対する以下の制約オプションを設定できます。
kind
: 制約の実行方法を示します。このオプションの詳細は 表7.3「順序の制約のプロパティー」 を参照してください。symmetrical
: リソースを停止する順序を示します。デフォルトの true に設定されていると逆順でリソースの停止を行ないます。デフォルト値:true
id
: 定義する制約の名前を指定します。
セットのメンバーをリストすると、各メンバーは、自身の前のメンバーに対してコロケーションが設定されます。たとえば、set A B は B が A の場所に配置されることを意味します。しかし、複数のセットをリストする場合、各セットはその後のメンバーと同じ場所に配置されます。たとえば、set C D sequential=false set A B は、C と D のセットが、A と B のセットと同じ場所に配置されることを意味します (ただし、C と D には関係がなく、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