Show Table of Contents
このページには機械翻訳が使用されている場合があります (詳細はこちら)。
第7章 リソースの制約
リソースの制約を設定することでクラスター内のそのリソースの動作を決めることができます。設定できる制約は以下のカテゴリーになります。
location
制約 — 場所の制約はリソースを実行できるノードを決めます。場所の制約については「場所の制約」 で説明しています。order
制約 — 順序の制約はリソースが実行される順序を決めます。順序の制約については 「順序の制約」 で説明しています。colocation
制約 — コロケーションの制約は他のリソースと相対的となるリソースの配置先を決めます。コロケーションの制約については 「リソースのコロケーション」 で説明しています。
複数リソース一式を一緒に配置、それらを順番に起動させ、また逆順で停止させるため複数の制約を設定する場合、その簡易な方法として 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
|
リソースを特定ノードで優先的に実行するか、または実行を回避するかを示す正の整数値。
score のデフォルト値は、INFINITY です。
pcs contraint location rsc prefers コマンドの score の INFINITY 値は、ノードが利用できればリソースがそのノードを優先し、指定されいてるノードが利用できなければ別のノードでリソースを実行しないようにすることを示しています。
pcs contraint location rsc avoids コマンドの score の INFINITY 値は、その他のノードが利用できなくても、そのノードでリソースが実行しないことを示します。これは、-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
を使用して、ノード数を100 単位で拡大する場合は、このオプションの使用を検討してください。
以下のコマンドでは、
pcs constraint location
コマンドの resource-discovery
オプションを指定する形式を示しています。id は制約 id であることに注意してください。rsc、node、 score の意味は 表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_options と date_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-cluster
を false
に設定してデフォルトではリソースの実行をいずれのノードでも許可しないようにします。
# 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
上記コマンドでは score に INFINITY を指定する必要はありません。INFINITY が score のデフォルト値になります。
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 によるリソースの配置先を決定する方法は、「「使用と配置ストラテジー」」を参照してください。
このページには機械翻訳が使用されている場合があります (詳細はこちら)。