可用性の最大化またはパフォーマンスの最適化のために、サービスの一部の組み合わせでは、オンラインリソースグループのクラスタノード間での特定の分散が必要になります。オンラインリソースグループを分散させるには、次の目的のためにリソースグループ間のアフィニティーを作成します。
リソースグループが最初にオンラインになったときに必要な分散を適用する
リソースグループのフェイルオーバーまたはスイッチオーバーを試みたあとに必要な分散を保持する
このセクションでは、リソースグループのアフィニティーを使用してクラスタノード間でオンラインリソースグループを分散させる方法を示す、次の例について説明します。
リソースグループの別のリソースグループとの共用関係の適用
リソースグループの別のリソースグループとの優先共用関係の指定
リソースグループのセットの負荷を分散させる
クリティカルサービスが優先されることを指定する
リソースグループのフェイルオーバーまたはスイッチオーバーを委託する
リソースグループ間のアフィニティーを組み合わせてより複雑な動作を指定する
リソースグループ間のアフィニティーによって、各リソースグループをどのノード上で同時にオンラインにできるかが制限されます。各アフィニティーでは、ソースリソースグループによって、1 つまたは複数のターゲットリソースグループに対するアフィニティーが宣言されます。リソースグループ間のアフィニティーを作成するには、ソースの RG_affinities リソースグループプロパティーを次のように設定します。
-p RG_affinities=affinity-list
ソースリソースグループと 1 つまたは複数のターゲットリソースグループの間のアフィニティーのコンマ区切りリストを指定します。このリストには 1 つのアフィニティーまたは複数のアフィニティーを指定できます。
リスト内の各アフィニティーを次のように指定します。
operator target-rg
作成するアフィニティーのタイプを指定します。詳細は、表 7を参照してください。
作成するアフィニティーのターゲットであるリソースグループを指定します。
|
弱いアフィニティーは、Nodelist の優先順序よりも優先されます。
ほかのリソースグループの現在の状態によって、どのノード上でも強いアフィニティーを満たすことができないことがあります。この状況では、そのアフィニティーのソースであるリソースグループはオフラインのままになります。ほかのリソースグループの状態が変化して強いアフィニティーを満たすことができるようになった場合、そのアフィニティーのソースであるリソースグループはオンラインに戻ります。
あるリソースグループによって表されるサービスが 2 つ目のリソースグループ内のサービスに強く依存しすぎているために、両方のサービスを同じノード上で実行しなければならないことがあります。たとえば、互いに依存する複数のサービスデーモンで構成されているアプリケーションでは、すべてデーモンを同じノード上で実行することが必要な場合があります。
このような状況では、依存するサービスのリソースグループがもう一方のサービスのリソースグループと共用関係を持つように強制します。リソースグループの別のリソースグループとの共用関係を適用するには、そのリソースグループ上で、ほかのリソースグループに対する強い肯定的なアフィニティーを宣言します。
# clresourcegroup set|create -p RG_affinities=++target-rg source-rg
強い肯定的なアフィニティーのソースであるリソースグループを指定します。このリソースグループは、別のリソースグループに対する強い肯定的なアフィニティーを宣言している場所のリソースグループです。
強い肯定的なアフィニティーのターゲットであるリソースグループを指定します。このリソースグループは、強い肯定的なアフィニティーを宣言している相手のリソースグループです。
リソースグループは、強い肯定的なアフィニティーを持っている相手のリソースグループに追従します。ターゲットリソースグループが別のノードに再配置された場合、ソースリソースグループは、ターゲットと同じノードに自動的に切り替えられます。ただし、強い肯定的なアフィニティーを宣言しているリソースグループが、そのアフィニティーのターゲットがまだ実行されていないノードにフェイルオーバーすることは妨げられます。
たとえば、リソースグループ rg1 が、リソースグループ rg2 に対する強い肯定的なアフィニティーを宣言しているとします。rg2 が別のノードにフェイルオーバーした場合は、rg1 もそのノードにフェイルオーバーします。このフェイルオーバーは、rg1 内のすべてのリソースが動作中であっても実行されます。ただし、rg1 内のリソースが rg1 を rg2 が実行されていないノードにフェイルオーバーしようとした場合、この試みはブロックされます。
強い肯定的なアフィニティーのターゲットをオンラインにしたとき、その強い肯定的なアフィニティーのソースは、すべてのノード上でオフラインである可能性があります。この状況では、その強い肯定的なアフィニティーのソースは、ターゲットと同じノード上で自動的にオンラインになります。
たとえば、リソースグループ rg1 が、リソースグループ rg2 に対する強い肯定的なアフィニティーを宣言しているとします。両方のリソースグループは最初、すべてのノード上でオフラインです。管理者があるノード上で rg2 をオンラインにした場合、rg1 は同じノード上で自動的にオンラインになります。
clresourcegroup suspend コマンドを使用すると、強いアフィニティーまたはクラスタ再構成のために、リソースグループが自動的にオンラインになることを回避できます。
強い肯定的なアフィニティーを宣言しているリソースグループをフェイルオーバーできるようにする必要がある場合は、フェイルオーバーを委託する必要があります。詳細は、リソースグループのフェイルオーバーまたはスイッチオーバーの委託を参照してください。
使用例 56 リソースグループの別のリソースグループとの共用関係の適用この例では、リソースグループ rg1 を、リソースグループ rg2 に対する強い肯定的なアフィニティーを宣言するように変更するためのコマンドを示します。このアフィニティー関係の結果として、rg1 は、rg2 が実行されているノード上でのみオンラインになります。この例では、両方のリソースグループが存在すると仮定します。
# clresourcegroup set -p RG_affinities=++rg2 rg1
あるリソースグループによって表されるサービスが、2 つ目のリソースグループ内のサービスを使用することがあります。その結果、これらのサービスは、同じノード上で実行されている場合にもっとも効率的に実行されます。たとえば、データベースを使用するアプリケーションは、そのアプリケーションとデータベースが同じノード上で実行されている場合にもっとも効率的に実行されます。ただし、効率の低下の方がリソースグループのフェイルオーバーの増加より害は少ないため、各サービスを別のノード上で実行できます。
この状況では、可能であれば両方のリソースグループが共用されるように指定します。リソースグループの別のリソースグループとの優先共用関係を指定するには、そのリソースグループ上で、ほかのリソースグループに対する弱い肯定的なアフィニティーを宣言します。
# clresourcegroup set|create -p RG_affinities=+target-rg source-rg
弱い肯定的なアフィニティーのソースであるリソースグループを指定します。このリソースグループは、別のリソースグループに対する弱い肯定的なアフィニティーを宣言している場所のリソースグループです。
弱い肯定的なアフィニティーのターゲットであるリソースグループを指定します。このリソースグループは、弱い肯定的なアフィニティーを宣言している相手のリソースグループです。
あるリソースグループ上で別のリソースグループに対する弱い肯定的なアフィニティーを宣言することによって、両方のリソースグループが同じノード上で実行される確率が高くなります。弱い肯定的なアフィニティーのソースは、その弱い肯定的なアフィニティーのターゲットがすでに実行されているノード上で最初にオンラインになります。ただし、リソースモニターのために弱い肯定的なアフィニティーのターゲットがフェイルオーバーした場合、そのアフィニティーのソースはフェイルオーバーしません。同様に、弱い肯定的なアフィニティーのターゲットがスイッチオーバーされた場合、そのアフィニティーのソースはフェイルオーバーしません。どちらの状況でも、このソースは、すでに実行されているノード上でオンラインのままになります。
この例では、リソースグループ rg1 を、リソースグループ rg2 に対する弱い肯定的なアフィニティーを宣言するように変更するためのコマンドを示します。このアフィニティー関係の結果として、rg1 と rg2 は、同じノード上で最初にオンラインになります。ただし、rg2 内のリソースのために rg2 がフェイルオーバーした場合、rg1 は、これらのリソースグループが最初にオンラインになったノード上でオンラインのままになります。この例では、両方のリソースグループが存在すると仮定します。
# clresourcegroup set -p RG_affinities=+rg2 rg1
リソースグループのセット内の各リソースグループにより、クラスタに同じ負荷が課されることがあります。この状況では、リソースグループをクラスタノード間で均等に分散させることによって、クラスタ上の負荷を分散させることができます。
リソースグループのセットをクラスタノード間で均等に分散させるには、各リソースグループ上で、セット内のほかのリソースグループに対する弱い否定的なアフィニティーを宣言します。
# clresourcegroup set|create -p RG_affinities=neg-affinity-list source-rg
弱い否定的なアフィニティーのソースであるリソースグループを指定します。このリソースグループは、ほかのリソースグループに対する弱い否定的なアフィニティーを宣言している場所のリソースグループです。
ソースリソースグループと、弱い否定的なアフィニティーのターゲットであるリソースグループの間の弱い否定的なアフィニティーのコンマ区切りリストを指定します。ターゲットリソースグループは、弱い否定的なアフィニティーを宣言している相手のリソースグループです。
あるリソースグループ上でほかのリソースグループに対する弱い否定的なアフィニティーを宣言することによって、リソースグループが常に、クラスタ内のもっとも負荷の軽いノード上でオンラインになることが保証されます。そのノード上では、もっとも少ない数のほかのリソースグループが実行されています。そのため、違反する弱い否定的なアフィニティーの数は最小です。
使用例 58 リソースグループのセットのクラスタノード間での均等な分散この例では、リソースグループ rg1、rg2、rg3、および rg4 を、これらのリソースグループが確実にクラスタ内の使用可能なノード間で均等に分散されるように変更するためのコマンドを示します。この例では、リソースグループ rg1、rg2、rg3、および rg4 が存在すると仮定します。
# clresourcegroup set -p RG_affinities=-rg2,-rg3,-rg4 rg1 # clresourcegroup set -p RG_affinities=-rg1,-rg3,-rg4 rg2 # clresourcegroup set -p RG_affinities=-rg1,-rg2,-rg4 rg3 # clresourcegroup set -p RG_affinities=-rg1,-rg2,-rg3 rg4
クラスタが、ミッションクリティカルサービスと非クリティカルサービスの組み合わせを実行するように構成されていることがあります。たとえば、クリティカルな顧客サービスをサポートするデータベースが、非クリティカルな調査タスクと同じクラスタ内で実行されることがあります。
非クリティカルサービスがクリティカルサービスのパフォーマンスに影響を与えることのないようにするには、そのクリティカルサービスが優先されることを指定します。クリティカルサービスが優先されることを指定することにより、非クリティカルサービスがクリティカルサービスと同じノード上で実行されることが回避されます。
すべてのノードが動作中の場合、クリティカルサービスは、非クリティカルサービスとは別のノード上で実行されます。ただし、クリティカルサービスの障害のために、非クリティカルサービスが実行されているノードにそのサービスがフェイルオーバーすることがあります。この状況では、そのノードのコンピューティングリソースがミッションクリティカルサービスに完全に専用になるようにするために、非クリティカルサービスをただちにオフラインにします。
クリティカルサービスが優先されることを指定するには、それぞれの非クリティカルサービスのリソースグループ上で、そのクリティカルサービスを含むリソースグループに対する強い否定的なアフィニティーを宣言します。
# clresourcegroup set|create -p RG_affinities=--critical-rg noncritical-rg
非クリティカルサービスを含むリソースグループを指定します。このリソースグループは、別のリソースグループに対する強い否定的なアフィニティーを宣言している場所のリソースグループです。
クリティカルサービスを含むリソースグループを指定します。このリソースグループは、強い否定的なアフィニティーを宣言している相手のリソースグループです。
リソースグループは、強い否定的なアフィニティーを持っている相手のリソースグループから遠ざかります。
強い否定的なアフィニティーのターゲットをオフラインにしたとき、その強い否定的なアフィニティーのソースは、すべてのノード上でオフラインである可能性があります。この状況では、その強い否定的なアフィニティーのソースは自動的にオンラインになります。リソースグループは一般に、ノードリスト内のノードの順序および宣言されているアフィニティーに基づいて、最優先ノード上でオンラインになります。
たとえば、リソースグループ rg1 が、リソースグループ rg2 に対する強い否定的なアフィニティーを宣言しているとします。リソースグループ rg1 が最初、すべてのノード上でオフラインであるのに対して、リソースグループ rg2 はあるノード上でオンラインです。管理者が rg2 をオフラインにした場合、rg1 は自動的にオンラインになります。
clresourcegroup suspend コマンドを使用すると、強いアフィニティーまたはクラスタ再構成のために、強い否定的なアフィニティーのソースが自動的にオンラインになることを回避できます。
使用例 59 クリティカルサービスが優先されることの指定この例では、非クリティカルリソースグループ ncrg1 および ncrg2 を、これらのリソースグループよりクリティカルリソースグループ mcdbrg が確実に優先されるように変更するためのコマンドを示します。この例では、リソースグループ mcdbrg、ncrg1、および ncrg2 が存在すると仮定します。
# clresourcegroup set -p RG_affinities=--mcdbrg ncrg1 ncrg2
強い肯定的なアフィニティーのソースリソースグループは、そのアフィニティーのターゲットが実行されていないノードにフェイルオーバーまたはスイッチオーバーできません。強い肯定的なアフィニティーのソースリソースグループをフェイルオーバーまたはスイッチオーバーできるようにする必要がある場合は、そのフェイルオーバーをターゲットリソースグループに委託する必要があります。アフィニティーのターゲットがフェイルオーバーすると、アフィニティーのソースはそのターゲットとともに強制的にフェイルオーバーされます。
リソースグループのフェイルオーバーまたはスイッチオーバーを別のリソースグループに委託するには、そのリソースグループ上で、ほかのリソースグループに対するフェイルオーバー委託付きの強い肯定的なアフィニティーを宣言します。
# clresourcegroup set|create source-rg -p RG_affinities=+++target-rg
フェイルオーバーまたはスイッチオーバーを委託する側のリソースグループを指定します。このリソースグループは、別のリソースグループに対するフェイルオーバー委託付きの強い肯定的なアフィニティーを宣言している場所のリソースグループです。
source-rg がフェイルオーバーまたはスイッチオーバーを委託する先のリソースグループを指定します。このリソースグループは、フェイルオーバー委託付きの強い肯定的なアフィニティーを宣言している相手のリソースグループです。
リソースグループがフェイルオーバー委託付きの強い肯定的なアフィニティーを宣言できる相手は、最大 1 つのリソースグループです。ただし、指定されたリソースグループは、任意の数のほかのリソースグループによって宣言されたフェイルオーバー委託付きの強い肯定的なアフィニティーのターゲットになることができます。
フェイルオーバー委託付きの強い肯定的なアフィニティーは、完全に対称的であるわけではありません。ターゲットは、ソースがオフラインのままである間にオンラインになることができます。ただし、ターゲットがオフラインである場合、ソースはオンラインになることができません。
ターゲットが 3 つ目のリソースグループに対するフェイルオーバー委託付きの強い肯定的なアフィニティーを宣言している場合、フェイルオーバーまたはスイッチオーバーは、さらにその 3 つ目のリソースグループに委託されます。その 3 つ目のリソースグループはフェイルオーバーまたはスイッチオーバーを実行して、ほかのリソースグループも強制的にフェイルオーバーまたはスイッチオーバーします。
使用例 60 リソースグループのフェイルオーバーまたはスイッチオーバーの委託この例では、リソースグループ rg1 を、リソースグループ rg2 に対するフェイルオーバー委託付きの強い肯定的なアフィニティーを宣言するように変更するためのコマンドを示します。このアフィニティー関係の結果として、rg1 は、rg2 にフェイルオーバーまたはスイッチオーバーを委託します。この例では、両方のリソースグループが存在すると仮定します。
# clresourcegroup set -p RG_affinities=+++rg2 rg1
複数のアフィニティーを組み合わせることによって、より複雑な動作を作成できます。たとえば、アプリケーションの状態を、関連するレプリカサーバーで記録することもできます。この例でのノード選択の要件は次のとおりです。
レプリカサーバーは、アプリケーションとは別のノード上で実行する必要があります。
アプリケーションがその現在のノードからフェイルオーバーする場合、そのアプリケーションは、レプリカサーバーが実行されているノードにフェイルオーバーします。
レプリカサーバーが実行されているノードにアプリケーションがフェイルオーバーした場合、そのレプリカサーバーは別のノードにフェイルオーバーする必要があります。ほかに使用可能なノードがない場合、レプリカサーバーはオフラインになる必要があります。
これらの要件を満たすには、アプリケーションとレプリカサーバーのためのリソースグループを次のように構成します。
アプリケーションを含むリソースグループは、レプリカサーバーを含むリソースグループに対する弱い肯定的なアフィニティーを宣言します。
レプリカサーバーを含むリソースグループは、アプリケーションを含むリソースグループに対する強い否定的なアフィニティーを宣言します。
この例では、次のリソースグループ間のアフィニティーを組み合わせるためのコマンドを示します。
リソースグループ app-rg は、状態がレプリカサーバーによって追跡されるアプリケーションを表します。
リソースグループ rep-rg は、レプリカサーバーを表します。
この例では、各リソースグループはアフィニティーを次のように宣言します。
リソースグループ app-rg は、リソースグループ rep-rg に対する弱い肯定的なアフィニティーを宣言します。
リソースグループ rep-rg は、リソースグループ app-rg に対する強い否定的なアフィニティーを宣言します。
この例では、両方のリソースグループが存在すると仮定します。
# clresourcegroup set -p RG_affinities=+rep-rg app-rg # clresourcegroup set -p RG_affinities=--app-rg rep-rg
クラスタ管理者は、ゾーンクラスタ内のリソースグループと、ゾーンクラスタ内の別のリソースグループまたはグローバルクラスタ上のリソースグループの間のアフィニティーを指定できます。
ゾーンクラスタ内のリソースグループ間のアフィニティーを指定するには、次のコマンドを使用できます。
# clresourcegroup set -p RG_affinities=affinity-typetarget-zc:target-rg source-zc:source-rg
ゾーンクラスタ内のリソースグループのアフィニティーのタイプには、次のいずれかを指定できます。
+ (弱い肯定的)
++ (強い肯定的)
+++ (フェイルオーバー委託付きの強い肯定的)
- (弱い否定的)
-- (強い否定的)
この例では、ゾーンクラスタ内のリソースグループ間の強い肯定的なアフィニティーを指定するためのコマンドを示します。
ゾーンクラスタ ZC1 内のリソースグループ RG1 は、ゾーンクラスタ ZC2 内のリソースグループ RG2 に対する強い肯定的なアフィニティーを宣言します。
ゾーンクラスタ ZC1 内のリソースグループ RG1 と、別のゾーンクラスタ ZC2 内のリソースグループ RG2 の間の強い肯定的なアフィニティーを指定する必要がある場合は、次のコマンドを使用します。
# clresourcegroup set -p RG_affinities=++ZC2:RG2 ZC1:RG1使用例 63 ゾーンクラスタ内のリソースグループとグローバルクラスタ内のリソースグループの間の強い否定的なアフィニティーの指定
この例では、ゾーンクラスタ内のリソースグループ間の強い否定的なアフィニティーを指定するためのコマンドを示します。ゾーンクラスタ ZC1 内のリソースグループ RG1 と、グローバルクラスタ内のリソースグループ RG2 の間の強い否定的なアフィニティーを指定する必要がある場合は、次のコマンドを使用します。
# clresourcegroup set -p RG_affinities=--global:RG2 ZC1:RG1