第11章 リソースを実行するノードの決定

場所の制約は、リソースを実行するノードを指定します。場所の制約を設定することで、たとえば特定のノードで優先してリソースを実行する、または特定のノードではリソースを実行しないことを決定できます。

場所の制約に加え、リソースが実行されるノードは、そのリソースの resource-stickiness 値に影響されます。これは、リソースが現在実行しているノードに留まることをどの程度優先するかを決定します。resource-stickiness 値を設定する方法は、「現在のノードを優先するようにリソースの設定」を参照してください。

11.1. 場所の制約の設定

基本的な場所の制約を設定し、オプションの score 値で制約の相対的な優先度を指定することで、リソースの実行を特定のノードで優先するか、または回避するかを指定できます。

以下のコマンドは、リソースの実行を、指定した 1 つまたは複数のノードで優先するように、場所の制約を作成します。1 回のコマンドで、特定のリソースの制約を複数のノードに対して作成できます。

pcs constraint location rsc prefers node[=score] [node[=score]] ...

次のコマンドは、リソースが指定ノードを回避する場所の制約を作成します。

pcs constraint location rsc avoids node[=score] [node[=score]] ...

表11.1「場所の制約オプション」 では、場所の制約を設定する基本的なオプションを説明します。

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

フィールド説明

rsc

リソース名

node

ノード名

score

指定のリソースが指定のノードを優先するべきか回避するべきかを示す優先度を示す正の整数値。INFINITY は、リソースの場所制約のデフォルト score 値です。

pcs contraint location rsc prefers コマンドで score の値を INFINITY にすると、そのノードが利用可能な場合は、リソースがそのノードで優先的に実行します。ただし、そのノードが利用できない場合に、別のノードでそのリソースを実行しないようにする訳ではありません。

pcs contraint location rsc avoids コマンドで scoreINFINITY を指定すると、その他のノードが利用できない場合でも、そのリソースはそのノードでは実行されないことを示します。これは、-INFINITY のスコアで pcs constraint location add コマンドを設定するのと同じです。

数値スコア (INFINITY 以外) は、その制約が任意で、それを上回る要因が他にない限り有効となることを意味します。たとえば、リソースが別のノードに置かれ、その resource-stickiness スコアが、場所制約のスコアよりも 優先 される場合は、リソースがその場所に残されます。

以下のコマンドは、Webserver リソースが、node1 ノードで優先的に実行するように指定する場所の制約を作成します。

pcs constraint location Webserver prefers node1

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

11.2. ノードのサブセットへのリソース検出を制限

Pacemaker がどこでリソースを開始しても、開始する前にそのリソースがすでに実行しているかどうかを確認するために、すべてのノードでワンタイム監視操作 (「プローブ」とも呼ばれています) を実行します。このリソース検出のプロセスは、監視を実行できないノードではエラーになる場合があります。

ノードに場所の制約を設定する際に、pcs constraint location コマンドの resource-discovery オプションを指定して、指定したリソースに対して、Pacemaker がこのノードでリソース検出を実行するかどうかの優先度を指定できます。物理的にリソースが稼働可能なノードのサブセットでリソース検出を制限すると、ノードが大量に存在する場合にパフォーマンスを大幅に改善できます。pacemaker_remote を使用して、ノード数を 100 単位で拡大する場合は、このオプションの使用を検討してください。

以下のコマンドは、pcs constraint location コマンドで resource-discovery オプションを指定する場合の形式を示しています。このコマンドでは、基本的な場所の制約に対応します。score を正の値にすると、リソースが特定のノードで優先的に実行するように設定されます。score を負の値にすると、リソースがノードを回避するように設定されます。基本的な場所の制約と同様に、制約にリソースの正規表現を使用することもできます。

pcs constraint location add id rsc node score [resource-discovery=option]

表11.2「リソース検出制約パラメーター」 では、リソース検出の制約を設定する基本パラメーターを説明します。

表11.2 リソース検出制約パラメーター

フィールド

説明

id

制約自体にユーザーが選択した名前。

rsc

リソース名

node

ノード名

score

指定のリソースが指定のノードを優先するべきか回避するべきかを示す優先度を示す整数値。スコアが正の値の場合は、ノードを優先するようにリソースを設定する基本的な場所の制約となり、負の場合は、ノードを回避するようにリソースを設定する基本的な場所の制約となります。

score の値を INFINITY に設定すると、そのノードが利用可能な場合は、リソースがそのノードで優先的に実行します。ただし、そのノードが利用できない場合に、別のノードでそのリソースを実行しないようにする訳ではありません。score の値を -INFINITY に設定すると、他のノードが利用できない場合でも、リソースがそのノードでは実行されないことを示しています。

数値スコア (INFINITY または -INFINITY 以外) は、その制約が任意で、それを上回る要因が他にない限り有効となることを意味します。たとえば、リソースが別のノードに置かれ、その resource-stickiness スコアが、場所制約のスコアよりも 優先 される場合は、リソースがその場所に残されます。

resource-discovery オプション

* always - このノードに指定したリソースで、リソース検出を常に実行します。これは、リソースの場所の制約の resource-discovery のデフォルト値です。

* never - このノードで、指定したリソースに対してリソース検出を行いません。

* exclusive - このノード (および同様に exclusive マークが付いているその他のノード) で指定したリソースに対してのみ、リソースの検出を行います。複数のノードで同じリソースの exclusive 検出を使用する複数の場所制約により、resource-discovery が排他的であるノードのサブセットが作成されます。1 つまたは複数のノードで、リソースが exclusive 検出用にマーク付けされている場合、そのリソースは、ノードのサブセット内にのみ配置できます。

警告

resource-discoverynever または exclusive に設定すると、Pacemaker が、想定されていない場所で実行している不要なサービスのインスタンスを検出して停止する機能がなくなります。関連するソフトウェアをアンインストールしたままにするなどして、リソース検出なしでサービスがノードでアクティブにならないようにすることは、システム管理者の責任です。

11.3. 場所の制約方法の設定

場所の制約を使用する場合は、リソースをどのノードで実行できるかを指定する一般的な方法を設定できます。

  • オプトインクラスター - デフォルトでは、すべてのリソースを、どのノードでも実行できません。そして、特定のリソースに対してノードを選択的に許可できるようにクラスターを設定します。
  • オプトアウトクラスター - デフォルトでは、すべてのリソースをどのノードでも実行できるクラスターを設定してから、リソースを特定のノードで実行しないように、場所の制約を作成します。

クラスターでオプトインまたはオプトアウトのどちらを選択するかは、優先する設定やクラスターの構成により異なります。ほとんどのリソースをほとんどのノードで実行できるようにする場合は、オプトアウトを使用した方が設定しやすくなる可能性があります。ほとんどのリソースを、一部のノードでのみ実行する場合は、オプトインを使用した方が設定しやすくなる可能性があります。

11.3.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

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

オプトアウトクラスターを作成するには、クラスタープロパティー symmetric-clustertrue に設定し、デフォルトで、すべてのノードでリソースの実行を許可します。これは、symmetric-cluster が明示的に設定されていない場合のデフォルト設定です。

# 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 を指定する必要はないことに注意してください。

11.4. 現在のノードを優先するようにリソースを設定

リソースには、「リソースのメタオプションの設定」で説明されているように、リソースの作成時にメタ属性として設定できる resource-stickiness 値があります。resource-stickiness 値は、現在実行しているノード上にリソースが残す量を決定します。Pacemaker は、resource-stickiness の値を他の設定 (場所の制約の score 値など) と併用して、リソースを別のノードに移動するか、またはこれをそのまま残すかを決定します。

デフォルトで、リソースは 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 がリソースを配置する場所を決定する方法の詳細は、「ノード配置ストラテジーの設定」を参照してください。


このページには機械翻訳が使用されている場合があります (詳細はこちら)。