ここでは Red Hat Enterprise Linux 7 における HA アドオンを使用したクラスタ構築について、リソース制約の設定に関する内容を記載します。
※こちらの記事の続きの位置付けです
リソースの制約について
リソースの制約を設定することでクラスタ内のそのリソースの動作を決めることができる。
設定できる制約は以下の 3 種類。
- location 制約(場所の制約)
- リソースを実行できるノードを決める
- order 制約(順序の制約)
- リソースが実行される順序を決める
- colocation 制約(コロケーションの制約)
- 他のリソースとの相対的なリソースの配置先を決める
※リソースの順序の制約に関しては、リソースグループという選択肢もあるのでどちらを使用するかは検討が必要と思われる
場所の制約
■ 参考ページ

場所の制約ではリソースを実行させるノードを指定する。
- 特定のノードで優先してリソースを実行する
- 特定のノードでのリソースの実行を避ける
などを実現できる。
基本的な場所の制約
■優先して実行するノードを指定した場所の制約の作成
pcs constraint location "rsc" prefers "node[=score]" ["node[=score]"] ...
■実行を避けるノードを指定した場所の制約の作成
pcs constraint location "rsc" avoids "node[=score]" ["node[=score]"] ...
■ 基本的な場所の制約のパラメータ
パラメータ | デフォルト | 説明 |
rsc | リソース名 | |
node | ノード名 | |
score | INFINITY | リソースを特定ノードで実行する、または実行を回避する優先度を示す正の整数値 (※) |
(※) score の値を INFINITY とした場合の動作は以下の通り
- リソースを特定ノードで優先的に実行するように設定する場合
- そのノードが利用可能な場合、そのノードでリソースで優先的に実行する
- そのノードが利用できない場合、別のノードでそのリソースを実行しないようにする訳ではない
- リソースが特定ノードを回避するように設定する場合
- 他のノードが利用できない場合でも、そのノードでリソースを実行しない
■使用例
リソース VirtualIP をノード ha01 で優先して実行させる制約を作成するコマンド
pcs constraint location VirtualIP prefers ha01
高度な場所の制約
ノードに場所の制約を設定する際に、pcs constraint location コマンドの resource-discovery オプションを使用して、指定のリソース対して Pacemaker がこのノードでリソース検出を実行するかどうかの優先度を指定できる。
pcs constraint location add "id" "rsc" "node" "score" [resource-discovery="option"]
※パフォーマンス改善の目的で、pacemaker_remote を使用して、ノード数を100 単位で拡大する場合は、このオプションの使用を検討が推奨されている
より複雑な場所の制約
より複雑な場所の制約のためには、Pacemaker ルールを使用してリソースの場所を判断することができる。
※ここでは詳細は略
場所の制約のストラテジー
リソースを実行できるノードを指定するための一般的なストラテジーとして以下の2つがある。
- オプトインクラスタ
- デフォルトではいずれのノードでもリソース実行を許可せず、特定のリソース用に特定ノードでの実行を許可する場所の制約を設定する
- 大部分のリソースを一部のノードでのみ実行する場合などに採用
- オプトアウトクラスタ(デフォルト)
- クラスターを設定し、デフォルトでは全ノードでリソース実行を許可してから、特定ノードでの実行を許可しない場所の制約を設定する
- 大部分のリソースを大部分のノードで実行できるようにする場合などに採用
オプトインクラスタの設定
オプトインクラスタを作成する場合は、以下コマンドでクラスタプロパティ symmetric-cluster を false に設定してデフォルトではリソースの実行をいずれのノードでも許可しないようにします。
pcs property set symmetric-cluster=false
上の設定をした上で、個々のリソースでノードを有効にします。
設定例:
- リソース Webserver をノード example-1 で優先して実行させる
- リソース Database をノード example-2 で優先して実行させる
- 2 つのリソースともにノード example-1 または example-2 で障害が発生した際はノード example-3 にフェールオーバさせる
pcs constraint location Webserver prefers example-1=200
pcs constraint location Webserver prefers example-3=0
pcs constraint location Database prefers example-2=200
pcs constraint location Database prefers example-3=0
オプトアウトクラスタの設定
オプトアウトクラスタを作成する場合は、以下コマンドでクラスタプロパティ symmetric-cluster を true に設定してデフォルトではリソースの実行をすべてのノードに許可させるようにします。
pcs property set symmetric-cluster=true
オプトアウトクラスタと設定した場合、すべてのノードの score は暗黙的に 0 となる。このため、以下の設定は前項のオプトインクラスタの設定例と同じ要件を満たすことになる。
pcs constraint location Webserver prefers example-1=200
pcs constraint location Webserver avoids example-2=INFINITY
pcs constraint location Database avoids example-1=INFINITY
pcs constraint location Database prefers example-2=200
※pcs constraint コマンドの score のデフォルト値は INFINITY のため、score を INFINITY とする場合は明示的に指定しなくても良い
順序の制約
■参考ページ

順序の制約ではリソースを実行する順序を指定する。
順序制約の設定コマンド
pcs constraint order ["action"] "resource_id" then ["action"] "resource_id" ["options"]
■ パラメータおよびオプション
項目 | デフォルト | 説明 |
resource_id | リソース名 | |
action | start | リソースで行う動作 ・start ⇒ リソースを起動する ・stop ⇒ リソースを停止する ・promote ⇒ スレーブリソースからマスターリソースにリソースの昇格を行う ・demote ⇒ マスターリソースからスレーブリソースにリソースの降格を行う |
kind | Mandatory | 制約の適用方法 ・Optional ⇒ 両方のリソースが指定の action を実行する場合のみ適用される ・Mandatory ⇒ 常に適用。1 番目に指定したリソースが停止しているまたは起動できない場合は、2 番目に指定されているリソースは停止しなければならない ・Serialize ⇒ リソースのセットに対して[停止/開始]の2つのアクションが同時に発生しない |
symmetrical | true | ・true ⇒ 逆順でリソースを停止する ・false |
- kind の値が Mandatory (デフォルト) の場合
- 1 番目に指定しているリソースが実行されない限り 2 番目に指定しているリソースは実行できない
- 1 番目に指定しているリソースの状態が変化した場合、2 番目に指定したリソー スが必ず反応するようになる
- 1 番目に指定している実行中のリソースを停止すると、2 番目に指定しているリソースも停止される (実行している場合)
- 1 番目に指定している実行中のリソースが実行しておらず起動できない場合には、指定したリソースは (実行していれば) 停止する
- 2 番目に指定しているリソースの実行中に 1 番目に指定しているリソースが再起動されると、2 番目に指定しているリソースが停止され再起動される
- kind の値が Optional の場合
- 両方のリソースが指定の action を実行する場合のみ適用される
- 1 番目に指定するリソースによる状態の変更は 2 番目に指定するリソースに影響を与えない
■設定例:VirtualIP というリソースと dummy_resource というリソースに順序の制約を設定 (kind=Optional)
pcs constraint order VirtualIP then dummy_resource kind=Optional
順序付けられたリソースセット
以下のコマンドで順序付けられたリソースのセットを作成できる。
pcs constraint order set "resource1" "resource2" ["resourceN"]... ["options"] [set "resourceX" "resourceY" ... ["options"]] [setoptions ["constraint_options"]]
pcs constraint order set コマンドの options は以下の通り。
項目 | デフォルト | 説明 |
sequential | リソースセットが相対的に順序付けされる必要があるかどうか ・true ・false ⇒ 順序付けの制約で他のセットに対して相対的に順序付けすることができますが、セット内のリソースは相対的に順序付けされません。そのため、このオプションは制約に複数のセットがリストされている場合のみ有効です。それ以外の場合、制約の効果はありません。 | |
require-all | 先に進む前にセット内のすべてのリソースがアクティブである必要があるかどうか ・true ・false ⇒ 次のセットに進む前にセット内の 1 つのリソースのみが開始されていれば良い。sequential が false に設定されたセットと併用しないと効果がない | |
action | start | リソースで行う動作 ・start ⇒ リソースを起動する ・stop ⇒ リソースを停止する ・promote ⇒ スレーブリソースからマスターリソースにリソースの昇格を行う ・demote ⇒ マスターリソースからスレーブリソースにリソースの降格を行う |
pcs constraint order set コマンドの constraint_options は以下の通り。
項目 | デフォルト | 説明 |
id | 定義する制約の名前 | |
score | 制約の優先度 ※コロケーション制約に関連 |
■例:D1、D2、D3 という 3 つのリソースを順序付けされたひとつのリソースセットとして設定するコマンド
pcs constraint order set D1 D2 D3
順序制約からリソースを削除
pcs constraint order remove "resource1" ["resourceN"]...
コロケーションの制約
■参考ページ

- 任意のリソースの場所を別のリソースの場所に依存するよう定義するのがコロケーションの制約
- 順序の制約との関係に注意する必要がある
コロケーション制約の設定コマンド
pcs constraint colocation add [master|slave] "source_resource" with [master|slave] "target_resource" ["score"] ["options"]
オプション
項目 | デフォルト | 説明 |
source_resource | コロケーションソース 制約の条件を満たせない場合はこのリソースの実行を全く許可しないと判断されることがある | |
target_resource | コロケーションターゲット このリソースの実行先が最初に決定されてからソースリソースの実行先が決定される | |
score | +INFINITY | ・正の値 ⇒ リソースは同じノードで実行される ・負の値 ⇒ リソースは同じノードで実行されない ・+INFINITY ⇒ source_resource が target_resource と同じノードで実行されなければならないことを示す ・–INFINITY ⇒ source_resource が target_resource と同じノードで実行されてはならないことを示す |
- score が +INFINITY または -INFINITY の場合は常に「強制的な配置」が発生する
- 制約条件が満たされないと source_resource の実行が許可されない
- score=-INFINITY の場合、target_resource がアクティブではないケースが含まれる
- score が正の値または負の値の場合は「勧告的な配置」になる
- 制約を達成するためにクラスタリソースを一部停止することになる場合は、その制約を無視する
■例:myresource1 を常に myresource2 と同じマシンで実行する場合の設定
pcs constraint colocation add myresource1 with myresource2 score=INFINITY
■例:myresource1 を常に myresource2 と同じマシンでは実行できないようにする場合の設定
pcs constraint colocation add myresource1 with myresource2 score=-INFINITY
コロケーションが設定されたリソースセット
以下のコマンドでコロケーションが設定されたリソースのセットを作成できる。
pcs constraint colocation set "resource1" "resource2" ["resourceN"]... ["options"] [set "resourceX" "resourceY" ... ["options"]] [setoptions ["constraint_options"]]
pcs constraint colocation set コマンドの options は以下の通り。
項目 | デフォルト | 説明 |
sequential | セット内のリソースがお互いをコロケートする必要があるかどうかを示す ・true ・false ⇒ このセット内のリソースがアクティブであるかどうかに関係なく、このセット内のリソースを制約の後にリストされている他のセットとコロケートすることができる。そのため、このオプションは制約でこのセットの後に他のセットがリストされている場合のみ有効。それ以外の場合、制約の効果はない | |
role | ・Stopped ・Started ・Master ・Slave |
pcs constraint colocation set コマンドの setoptions は以下の通り。
項目 | デフォルト | 説明 |
id | 定義する制約の名前 | |
kind | Mandatory | 制約の適用方法 ・Optional ⇒ 両方のリソースが指定の action を実行する場合のみ適用される ・Mandatory ⇒ 常に適用。1 番目に指定したリソースが停止しているまたは起動できない場合は、2 番目に指定されているリソースは停止しなければならない ・Serialize ⇒ リソースのセットに対して[停止/開始]の2つのアクションが同時に発生しない |
symmetrical | true | リソースを停止する順序を示す ・true ⇒ リソースを逆順で停止する ・false |
- セット内のリソースのリストを指定した場合、各リソースはその前に指定されたリソースとコロケートされる
- 「set A B」は B が A とコロケートされることを意味する
- 複数のセットのリストを指定した場合、各セットはその後に指定されたセットとコロケートされる
- 「set C D sequential=false set A B」は C と D のセット (C と D との関係がない) が A と B のセット (B は A とコロケートされる) とコロケートされることを意味する
コロケーション制約の削除
pcs constraint colocation remove "source_resource" "target_resource"
制約の確認
■場所、順序、コロケーションの制約を表示
pcs constraint list|show
■場所の制約を表示
pcs constraint location [show resources|nodes ["specific nodes"|"resources"]] [--full]
■順序の制約を表示
pcs constraint order show [--full]
■コロケーションの制約を表示
pcs constraint colocation show [--full]
■特定リソースの制約を表示
pcs constraint ref "resource" ...
参考ページ

―――――――――――――