第7章 リソースの制約

リソースの制約を設定することでクラスター内のそのリソースの動作を決めることができます。設定できる制約は以下のカテゴリーになります。
  • location 制約 — 場所の制約はリソースを実行できるノードを決めます。場所の制約については「場所の制約」 で説明しています。
  • order 制約 — 順序の制約はリソースが実行される順序を決めます。順序の制約については 「順序の制約」 で説明しています。
  • colocation 制約 — コロケーションの制約は他のリソースと相対的となるリソースの配置先を決めます。コロケーションの制約については 「リソースのコロケーション」 で説明しています。
複数リソース一式を一緒に配置、それらを順番に起動させ、また逆順で停止させるため複数の制約を設定する場合、その簡易な方法として Pacemaker ではリソースグループという概念に対応しています。リソースグループについては 「リソースグループ」 を参照してください。

7.1. 場所の制約

場所の制約ではリソースを実行させるノードを指定します。場所の制約を設定することで特定のノードで優先してリソースを実行する、または特定のノードでのリソースの実行を避けるなどの指定を行うことができます。
表7.1「場所の制約オプション」 では場所の制約を設定する場合のオプションについて簡単に示します。

表7.1 場所の制約オプション

フィールド説明
rsc
リソース名
node
ノード名
score
優先度を示す値、任意のノードでのリソースの実行を優先または避ける
INFINITY の値は「すべき」から「しなければならない」に変化、INFINITY はリソースの場所制約のデフォルト score
resource-discovery
指定のリソースに対して Pacemaker がこのノードでリソース検出を実行する優先度を示す値。リソースが物理的に稼働可能なノードのサブセットへのリソース検出を制限すると、ノードが大量に存在する場合にパフォーマンスを大幅に改善することができます。pacemaker_remote を使用してノード数を100 単位のノード数に拡大する場合にこのオプションを考慮するとよいでしょう。指定可能な値には以下が含まれます。
always: このノードの指定されたリソースに対して常にリソース検出を行います。
never: このノードの指定されたリソースに対してリソース検出をまったく行いません。
exclusive: このノード (および exclusive と同様にマーク付けされた他のノード) で指定されたリソースのみに対してリソースの検出を行います。 異なるノードにまたがった同じリソースの exclusive 検出を使用する複数の場所制約によって、resource-discovery が排他的なノードのサブセットが作成されます。1 つ以上のノードでリソースが exclusive 検出に対してマーク付けされた場合、リソースはノードのサブセット内のみに置くことが可能です。
このオプションを never または exclusive に設定すると、クラスターが認識しなくてもリソースがこれらの場所でアクティブになる可能性があります。この場合、クラスターが制御できる範囲外でサービスが開始されると (systemd または管理者による開始など)、複数の場所でリソースがアクティブになる可能性があります。また、クラスターの一部がダウンしたりスプリットブレインが発生したときに resource-discovery プロパティーが変更された場合や、ノードでリソースがアクティブなときにそのリソースやノードに対して resource-discovery プロパティーが変更された場合にも、複数の場所でリソースがアクティブになる可能性があります。そのため、9 個以上のノードがあり、リソースを特定の場所のみで実行できる場合 (必要なソフトウェアが他の場所にインストールされていない場合など) に限り、適切なオプションになります。
always はリソースの場所制約におけるデフォルトの resource-discovery 値です。
次のコマンドはリソースが指定ノードで優先して実行される場所の制約を作成します。
pcs constraint location rsc prefers node[=score] ...
次のコマンドはリソースが指定ノードを避けて実行される場所の制約を作成します。
pcs constraint location rsc avoids node[=score] ...
リソースの実行を許可するノード指定には上記以外にも 2 種類の方法があります。
  • オプトインクラスター — クラスターを設定し、デフォルトではいずれのノードでもリソース実行を許可せず、特定のリソース用に選択的に許可ノードを有効にします。オプトインクラスターの設定方法は 「「オプトイン」クラスターの設定」 で説明しています。
  • オプトアウトクラスター — クラスターを設定し、デフォルトでは全ノードでリソース実行を許可してから、特定ノードでの実行を許可しない場所の制約を作成します。オプトアウトクラスターの設定方法は 「「オプトアウト」クラスターの設定」 で説明しています。
オプトインまたはオプトアウトクラスターの設定を選択するべきかどうかは、個人的な好みとクラスターの構成によります。大多数のリソースを大多数のノードで実行できる場合、オプトアウトの設定は簡単になる傾向にあります。ほとんどのリソースをノードの小さなサブセット上でのみ実行できる場合はオプトインの設定のほうが簡単になる傾向にあります。

7.1.1. 「オプトイン」クラスターの設定

オプトインクラスターを作成する場合はクラスタープロパティ symmetric-clusterfalse に設定してデフォルトではリソースの実行をいずれのノードでも許可しないようにします。
# pcs property set symmetric-cluster=false
リソースごとにノードを有効にします。次のコマンドは場所の制約を設定するため、Webserver リソースは example-1 ノードでの実行を優先させ、Database リソースは 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

7.1.2. 「オプトアウト」クラスターの設定

オプトアウトクラスターを作成する場合はクラスタープロパティ symmetric-clustertrue に設定しデフォルトではリソースの実行をすべてのノードに許可します。
# pcs property set symmetric-cluster=true
次のコマンドを実行すると 「「オプトイン」クラスターの設定」 の例と同じ設定になります。全ノードの score は暗黙で 0 になるため、優先ノードに障害が発生した場合はいずれのリソースも example-3 ノードにフェールオーバーすることができます。
# 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
上記コマンドでは score に INFINITY を指定する必要はありません。INFINITY が score のデフォルト値になります。