Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第7章 リソースの制約

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

7.1. 場所の制約

場所の制約は、リソースを実行するノードを指定します。場所の制約を設定することで、たとえば特定のノードで優先してリソースを実行する、または特定のノードではリソースを実行しないことを決定できます。
場所の制約 に加え、リソースが実行されるノードは、そのリソースの resource-stickiness 値の影響を受けます。これは、リソースが現在実行しているノードに留まることをどの程度優先するかを決定します。resource-stickiness 値の設定に関する詳細は、「現在のノードを優先させるリソースの設定」 を参照してください。

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
リソースを特定ノードで優先的に実行するか、または実行を回避するかを示す正の整数値。INFINITY は、リソースの場所制約のデフォルトの スコア 値です。
pcs contraint location rsc prefers コマンドで score の値の INFINITY を指定すると、そのノードが利用可能な場合は、リソースがそのノードで優先的に実行します。ただし、そのノードが利用できない場合に、別のノードでそのリソースを実行しないようにする訳ではありません。
pcs contraint location rsc avoids コマンドの scoreINFINITY を指定すると、他のノードが利用できない場合でも、そのリソースはそのノードでは実行されないことを示します。これは、-INFINITY のスコアで pcs constraint location add コマンドを設定するのと同じです。
以下のコマンドは、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 を使用してノード数を数百のノード数に拡張する場合は、このオプションを考慮する必要があります。
以下のコマンドは、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
expression オプションは、duration_options および date_spec_options のいずれかに設定できます。使用できる値は、表11.5「日付詳細のプロパティー」 で説明されているように、hours、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 duration duration_options ...
  • date-spec date_spec_options
  • および|or
  • (expression)
以下の場所の制約は、現在が 2018 年の任意の時点である場合に true の式を設定します。
# pcs constraint location Webserver rule score=INFINITY date-spec years=2018 
以下のコマンドは、月曜日から金曜日までの 9 am から 5 pm までが true となる式を設定します。hours の値 16 には、時間 (hour) の値が一致する 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-cluster クラスタープロパティーを true に設定して、デフォルトですべてのリソースがどこでも実行できるようにします。
# 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
INFINITY は、スコアのデフォルト値であるため、上記コマンドでは、スコアに INFINITY を指定する必要はないことに注意してください。

7.1.5. 現在のノードを優先させるリソースの設定

リソースには、「リソースのメタオプション」 で説明されているように、リソースの作成時にメタ属性として設定できる resource-stickiness 値があります。resource-stickiness 値は、現在実行しているノード上にリソースが残す量を決定します。Pacemaker は、他の設定(場所の制約の score 値など)とともに resource-stickiness 値を考慮して、リソースを別のノードに移動するか、そのまま残すかを決定します。
デフォルトでは、resource-stickiness の値が 0 の状態でリソースが作成されます。resource-stickiness が 0 に設定され、場所の制約がない Pacemaker のデフォルト動作では、クラスターノード間で均等に分散されるようにリソースを移動します。この設定では、正常なリソースの移動頻度が想定よりも増える可能性があります。この動作を防ぐには、デフォルトの resource-stickiness 値を 1 に設定します。このデフォルトはクラスター内のすべてのリソースに適用されます。この小さい値は、作成する他の制約で簡単に上書きできますが、Pacemaker がクラスター全体で正常なリソースを不必要に移動しないようにするには十分です。
以下のコマンドは、デフォルトの resource-stickiness 値を 1 に設定します。
# pcs resource defaults resource-stickiness=1
resource-stickiness 値が設定されている場合、リソースは新たに追加されたノードに移動されません。この時点でリソースバランシングが必要な場合は、resource-stickiness の値を一時的に 0 に設定できます。
場所の制約スコアが resource-stickiness 値よりも高い場合、クラスターは正常なリソースを、場所の制約がポイントするノードに依然として移動する可能性があります。
Pacemaker がリソースの配置先を決定する方法の詳細は、「使用と配置ストラテジー」 を参照してください。