第7章 リソースの制約

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

7.1. 場所の制約

場所の制約ではリソースを実行させるノードを指定します。場所の制約を設定することで特定のノードで優先してリソースを実行する、または特定のノードでのリソースの実行を避けるなどの指定を行うことができます。

7.1.1. 基本的な場所の制約

基本的な場所の制約を設定して、リソースの実行を特定のノードで優先するか、または回避するかを指定できます。オプションの score 値を使用して、制約の相対的な優先度を指定できます。
以下のコマンドは、リソースの実行を、指定した 1 つまたは複数のノードで優先するように、場所の制約を作成します。1 回のコマンドで、特定のリソースの制約を複数のノードに対して作成できます。
pcs constraint location rsc prefers node[=score] [node[=score]] ...
次のコマンドはリソースが指定ノードを避けて実行される場所の制約を作成します。
pcs constraint location rsc avoids node[=score] [node[=score]] ...
表7.1「簡単な場所の制約オプション」 では、最も簡単な形式で場所の制約を設定する場合のオプションの意味をまとめています。

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

フィールド説明
rsc
リソース名
node
ノード名
score
リソースを特定ノードで優先的に実行するか、または実行を回避するかを示す正の整数値。score のデフォルト値は、INFINITY です。
リソースを特定ノードで優先的に実行するように設定するコマンドで score の値を INFINITY にすると、そのノードが利用可能な場合はそのノードでリソースを優先的に実行しますが、利用できない場合に別のノードでそのリソースを実行しないようにする訳ではありません。リソースがノードを回避するように設定するコマンドで INFINITY を設定した場合は、他のノードが利用できない場合でも、リソースがそのノードで実行されないことを示します。
以下のコマンドは、リソース Webserver が、ノード node1 で優先的に実行するように指定する場所の制約を作成します。
# pcs constraint location Webserver prefers node1
Red Hat Enterprise Linux 7.4 の pcs では、コマンドラインの場所の制約に正規表現に対応しています。この制約は、リソース名に一致する正規表現に基づいて、複数のリソースに適用されます。これにより、1 つのコマンドラインで複数の場所の制約を設定できます。
以下のコマンドは、dummy0 から dummy9 までのリソースの実行が node1 に優先されるように指定する場所の制約を作成します。
# pcs constraint location 'regexp%dummy[0-9]' prefers node1
Pacemaker は、 http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04 で説明しているように、POSIX 拡張正規表現を使用するため、以下のコマンドを実行しても同じ制約を指定できます。
# pcs constraint location 'regexp%dummy[[:digit:]]' prefers node1

7.1.2. 高度な場所の制約

ノードに場所の制約を設定する際に、pcs constraint location コマンドの resource-discovery オプションを使用して、指定のリソース対して Pacemaker がこのノードでリソース検出を実行するかどうかの優先度を指定できます。リソースが物理的に稼働可能なノードのサブセットにリソース検出を制限すると、ノードが大量に存在する場合にパフォーマンスを大幅に改善できます。pacemaker_remote を使用して、ノード数を100 単位で拡大する場合は、このオプションの使用を検討してください。
以下のコマンドでは、pcs constraint location コマンドの resource-discovery オプションを指定する形式を示しています。id は制約 id であることに注意してください。rscnodescore の意味は 表7.1「簡単な場所の制約オプション」 で説明しています。このコマンドでは、score の正の値は、ノードを推奨するリソースの設定を行う場所の基本的な制約に一致しています。score の負の値は、ノードを避けるリソースを設定する場所の基本的な制約に一致しています。場所の基本的な制約では、これらの制約とともに、リソースに対して正規表現を使用できます。
pcs constraint location add id rsc node score [resource-discovery=option]
表7.2「リソース検出の値」 では、resource-discovery オプションに指定できる値を説明しています。

表7.2 リソース検出の値

説明
always
このノードに指定したリソースで、リソース検出を常に実行します。リソースの場所の制約のresource-discovery のデフォルト値です。
never
このノードで指定ししたリソースでのリソース検出は実行しません。
exclusive
このノード (および exclusive と同様のマークが付いている他のノード) に指定したリソースに限定してリソース検出を行います。複数のノードで、同じリソースの exclusive 検出を使用して場所の制約を複数設定すると、resource-discovery が排他的に実行するノードのサブセットが作成されます。1 つ以上のノードでリソースに exclusive 検出のマークが付いている場合、リソースはノード内で該当するサブセットにのみ置くことができます。
resource-discovery オプションを never または exclusive に設定すると、クラスターが認識しなくても、該当する場所でリソースがアクティブになる可能性があります。この場合は、(systemd または管理者による起動などの) クラスターが制御できる範囲外でサービスが起動すると、複数の場所でリソースがアクティブになる可能性があります。また、クラスターの一部がダウンしたりスプリットブレインが発生しているときに resource-discovery プロパティーが変更した場合や、ノードでリソースがアクティブなときにそのリソースやノードに対して resource-discovery プロパティーが変更した場合にも、複数の場所でリソースがアクティブになる可能性があります。そのため、ノードの数が 9 以上で、特定の場所しかリソースを実行できない場合 (必要なソフトウェアが他の場所にインストールされていない場合など) に限り、このオプションは適しています。

7.1.3. ルールを使用したリソースの場所の確定

より複雑な場所の制約は、Pacemaker ルールを使用してリソースの場所を判断することができます。Pacemaker ルールや設定できるパロパティの概要は、11章Pacemaker ルール を参照してください。
以下のコマンドを使用して、ルールを使用する Pacemaker 制約を設定します。score が省略される場合は、デフォルトで INFINITY に設定されます。resource-discovery が省略される場合は、デフォルトで always に設定されます。resource-discovery オプションの説明は、「高度な場所の制約」 を参照してください。基本的な場所の制約と同様に、これらの制約にリソースの正規表現を使用することもできます。
ルールを使用して場所の制約を設定する場合、score は正または負の値にすることができ、正の値は「prefers」および負の値は「avoids」を示します。
pcs constraint location rsc rule [resource-discovery=option] [role=master|slave] [score=score | score-attribute=attribute] expression
表11.5「日付詳細のプロパティー」 で説明しているように、expression オプションは、duration_optionsdate_spec_options が monthdays、weekdays、yeardays、months、weeks、years、weekyears、moon の以下のいずれです。
  • defined|not_defined attribute
  • attribute lt|gt|lte|gte|eq|ne [string|integer|version] value
  • date gt|lt date
  • date in-range date to date
  • date in-range date to duration duration_options ...
  • date-spec date_spec_options
  • expression and|or expression
  • (expression)
以下の場所の制約は、現在が 2018 年の任意の時点である場合に true の式を設定します。
# pcs constraint location Webserver rule score=INFINITY date-spec years=2018 
以下のコマンドは、月曜日から金曜日までの 9 am から 5 pm までが true となる式を設定します。hours の値 16 には時間の値が一致する 16:59:59 までが含まれます。
# pcs constraint location Webserver rule score=INFINITY date-spec hours="9-16" weekdays="1-5"
以下のコマンドは、 13 日の金曜日が満月であると true になる式を設定します。
# pcs constraint location Webserver rule date-spec weekdays=5 monthdays=13 moon=4

7.1.4. 場所の制約ストラテジー

「基本的な場所の制約」「高度な場所の制約」「ルールを使用したリソースの場所の確定」で説明している場所の制約のいずれかを使用することで、リソースを実行できるノードを指定するための一般的なストラテジーを設定できます。
  • オプトインクラスター — クラスターを設定し、デフォルトではいずれのノードでもリソース実行を許可せず、特定のリソース用に選択的に許可ノードを有効にします。オプトインクラスターの設定方法は 「「オプトイン」クラスターの設定」 で説明しています。
  • オプトアウトクラスター — クラスターを設定し、デフォルトでは全ノードでリソース実行を許可してから、特定ノードでの実行を許可しない場所の制約を作成します。オプトアウトクラスターの設定方法は 「「オプトアウト」クラスターの設定」 で説明しています。これは、デフォルトの Pacemaker ストラテジーです。
クラスターでオプトインまたはオプトアウトのどちらを選択するかは、独自に優先する設定やクラスターの構成により異なります。ほとんどのリソースをほとんどのノードで実行できるようにする場合は、オプトアウトを使用した方が設定が簡単になる可能性があります。ほとんどのリソースを、一部のノードでのみ実行する場合は、オプトインを使用した方が設定がより簡単になる可能性があります。

7.1.4.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.4.2. 「オプトアウト」クラスターの設定

オプトアウトクラスターを作成する場合はクラスタープロパティ symmetric-clustertrue に設定しデフォルトではリソースの実行をすべてのノードに許可します。
# pcs property set symmetric-cluster=true
以下のコマンドを実行すると、「「オプトイン」クラスターの設定」 の例と同じ設定になります。すべてのノードのスコアは暗黙的に 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 のデフォルト値になります。