9.6. 使用と配置ストラテジー

Pacemaker は、各ノードのリソース割り当てスコアによってリソースの配置場所を決めます。このリソースは、リソーススコアが最も高い場所のノードに割り当てられます。この割り当てスコアは、リソース制約、resource-stickiness 設定、各ノードにおける以前のエラー履歴、各ノードの使用率を含む要素の組み合わせから派生します。
すべてのノードにおけるリソースの割り当てスコアが同じ場合、デフォルトの配置ストラテジーでは、Pacemaker は負荷分散を行うために割り当てられたリソースの最も少ないノードを選択します。各ノードのリソースの数が同じ場合は、CIB の最初の対象ノードがリソースの実行に選択されます。
ただし、多くの場合、リソースが使用するノードの容量 (メモリまたは I/O など) の割合は状況によって大きく異なります。そのため、ノードに割り当てられているリソースの数のみを考慮して負荷分散を理想的に行うことはできません。また、複合要件が指定の容量を上回るような状況でリソースが配置されると、全く起動できないことや、パフォーマンスが低下した状態で起動することがあります。これらの事を考慮するためにも、Pacemaker では、以下のコンポーネントの設定を行うことができます。
  • 特定のノードの容量
  • 特定のリソースが必要な容量
  • リソースの配置の全体的なストラテジー
以下のセクションでは、これらのコンポーネントの設定方法を説明します。

9.6.1. 使用率属性

ノードの容量、またはリソースが必要な容量を設定するには、ノードとリソースに utilization attributes を使用します。これは、リソースの使用率の変数を設定して、その変数に値を割り当て、リソースの要件を示します。そして、同じ使用率の変数をノードに設定し、その変数に値を割り当て、そのノードの容量を示します。
使用率属性は、好みの名前を付け、設定ニーズに応じて名前や値ペアを必要なだけ定義することができます。使用率属性の値は整数である必要があります。
Red Hat Enterprise Linux 7.3 では、pcs コマンドを使用して使用率属性を設定できます。
以下の例では、2 つのノードに対して CPU キャパシティの使用率属性を設定します。これは、変数 cpu として設定します。また、RAM の容量の使用率属性も設定します。これは、変数 memory として、この属性を設定します。例:
  • ノード 1 は、2 つの CPU キャパシティと 2048 という RAM 容量を指定するように定義されています。
  • ノード 2 は、4 つの CPU キャパシティと 2048 の RAM 容量を指定するように定義されています。
# pcs node utilization node1 cpu=2 memory=2048
# pcs node utilization node2 cpu=4 memory=2048
以下の例では、3 種類のリソースが必要な同じ使用率属性を指定します。例:
  • リソース dummy-small は、1 つの CPU キャパシティと 1024 の RAM 容量を必要とします
  • dummy-medium は、2 つの CPU キャパシティと 2048 の RAM 容量を必要とします
  • リソース dummy-large には、1 つの CPU キャパシティと 3072 の RAM 容量が必要です。
# pcs resource utilization dummy-small cpu=1 memory=1024
# pcs resource utilization dummy-medium cpu=2 memory=2048
# pcs resource utilization dummy-large cpu=3 memory=3072
使用率属性で定義されているように、リソースの要件を満たすのに十分な空き容量があれば、ノードはリソース対象として考慮されます。

9.6.2. 配置ストラテジー

使用するノードの容量と必要なリソースの容量を設定した後は、placement-strategy クラスターの優先度を設定する必要があります。これを設定しなければ、容量設定が適用されません。クラスタープロパティの設定の説明は、12章Pacemaker クラスターのプロパティを参照してください。
placement-strategy クラスタープロパティには、4 つの値を利用できます。
  • default — 使用率の値は全く考慮されません。リソースは、割り当てスコアによって割り当てられます。スコアが同じであれば、リソースはノードにわたり均等に分配されます。
  • utilization — 使用率の値は、ノードが対象と考慮されるかどうかを決める際 (リソースの要件を満たすための十分な空き容量があるかどうか) にのみ考慮されます。負荷分散は依然として、ノードに割り当てられているリソースの数に基づいて行われます。
  • balanced — 使用率の値は、ノードがリソースをサービスすることができるかどうかを決める際と、負荷分散を行う際に荒涼されます。そのため、リソースパフォーマンスを最適化する方法でリソースを分散するために試行されます。
  • minimal — 使用率の値は、ノードがリソースをサービスできるかどうか決めるときにのみ考慮されます。負荷分散は、可能な限り少ないノードでリースを集中する際に試行されます。
以下の例のコマンドでは、placement-strategy の値を balanced に設定します。このコマンドを実行すると、Pacemaker は、複雑な一連のコロケーション制約なしで、リソースの負荷がクラスターにわたり均等に分散されるようにします。
# pcs property set placement-strategy=balanced

9.6.3. リソースの割り当て

以下のサブセクションでは、Pacemaker がリソースを割り当てる仕組みをまとめています。

9.6.3.1. ノード設定

Pacemaker は、以下のストラテジーに従ってリソースを割り当てる際に優先されるノードを判断します。
  • 最もウェイトの高いノードが最初に消費されます。ノードウェイトは、クラスターがノードの正常性を示すことで維持されるスコアです。
  • 複数のノードに同じノードウェイがある場合:
    • placement-strategy クラスタープロパティが default または utilization である場合:
      • 最もリソースが割り当てられていないノードが最初に消費されます。
      • 割り当てられているリソースの数が同じ場合、CIB にリストされている最初の対象ノードが最初に消費されます。
    • placement-strategy クラスタープロパティが balanced である場合:
      • 最も空き容量の多いノードが最初に消費されます。
      • ノードの空き容量が同じ場合は、リソースが最も割り当てられていないノードが最初に消費されます。
      • ノードの空き容量が同じで、割り当てられてるリソースの数が同じである場合は、CIB にリストされている最初の対象ノードが消費されます。
    • placement-strategy クラスタープロパティが minimal であれば、CIB にリストされている最初の対象のノードが最初に消費されます。

9.6.3.2. ノード容量

Pacemaker は、最も多くの空き容量を持つノードを以下のストラテジーで判断します。
  • 単一タイプの使用率属性のみが定義されている場合、空き容量は簡単な数値比較となります。
  • 複数のタイプの使用率属性が定義されている場合は、多くの属性タイプにおいて数値的に最も高いノードが最も多くの空き容量を持っています。例:
    • NodeA にはより多くの空き CPU 容量があり、NodeB にはより多くの空きメモリがあるとすると、これらの空き容量は同等となります。
    • NodeA にはより多くの空き CPU 容量があり、NodeBにはより多くのメモリとストレージの空き容量がある場合は、NodeBの空き容量の方が高くなります。

9.6.3.3. リソースの割り当て設定

Pacemaker は、以下のストラテジーで最初に割り当てられるリソースを判断します。
  • 優先度の最も高いリソースが最初に割り当てられます。リソースの優先度の設定は、表6.3「リソースのメタオプション」 を参照してください。
  • リソースの優先度が等しい場合、実行しているノードにおいて最も高いスコアを持つリソースが最初に割り当てられ、リソースのシャッフルを防ぎます。
  • リソースが実行されているノード上のリソーススコアが等しい場合や、リソースが実行されていない場合は、優先ノード上において最高スコアを持つリソースが最初に割り当てられます。優先ノード上のリソーススコアが同じであれば、CIB にリストされている最初の実行可能なリソースが最初に割り当てられます。

9.6.4. リソース配置ストラテジーガイドライン

リソースに対する Pacemaker の配置ストラテジーの動作効率を最適化するためにも、システムを設定する際には以下を考慮してください。
  • 十分な物理メモリがあることを確認します。
    ノードの物理容量が通常の状況においてほぼ最大で使用されているとすると、フェールオーバーの際に問題が発生する可能性があります。使用率機能なしでも、タイムアウトや二次障害が発生する可能性があります。
  • ノードに設定する容量にバッファをいくつか構築します。
    物理的に存在するよりもやや多いノードリソースが通知されます。これは、Pacemaker リソースが、設定した CPU、メモリなどを常に 100% 使用しないことを想定しています。このような状況は、オーバーコミットと呼ばれます。
  • リソースの優先度を指定します。
    クラスターがサービスを犠牲にする場合、そのサービスは最も重要でないことが理想的です。リソースの優先度が適切に設定されていることを確認してください。これにより、最も重要なリソースが最初にスケジュールされます。リソースの優先度の設定は、表6.3「リソースのメタオプション」を参照してください。

9.6.5. NodeUtilization リソースエージェント (Red Hat Enterprise Linux 7.4 以降)

Red Hat Enterprise Linux 7.4 は NodeUtilization リソースエージェントに対応しています。NodeUtilization エージェントは、利用可能な PU、ホストメモリの可用性、ハイパーバイザーメモリの可用性のシステムパラメーターを検出し、これらのパラメーターを CIB に追加できます。これらのパラメーターを各ノード上でエージェントを設定するために、クローンリソースとしてエージェントを実行することも可能です。
NodeUtilization リソースエージェントと、このエージェントのリソースオプションの説明は、pcs resource describe NodeUtilization コマンドを実行してください。