Oracle® Solaris Cluster 4.3 データサービス計画および管理ガイド

印刷ビューの終了

更新: 2016 年 4 月
 
 

オンラインリソースグループのクラスタノード間での分散

可用性の最大化またはパフォーマンスの最適化のために、サービスの一部の組み合わせでは、オンラインリソースグループのクラスタノード間での特定の分散が必要になります。オンラインリソースグループを分散させるには、次の目的のためにリソースグループ間のアフィニティーを作成します。

  • リソースグループが最初にオンラインになったときに必要な分散を適用する

  • リソースグループのフェイルオーバーまたはスイッチオーバーを試みたあとに必要な分散を保持する

このセクションでは、リソースグループのアフィニティーを使用してクラスタノード間でオンラインリソースグループを分散させる方法を示す、次の例について説明します。

  • リソースグループの別のリソースグループとの共用関係の適用

  • リソースグループの別のリソースグループとの優先共用関係の指定

  • リソースグループのセットの負荷を分散させる

  • クリティカルサービスが優先されることを指定する

  • リソースグループのフェイルオーバーまたはスイッチオーバーを委託する

  • リソースグループ間のアフィニティーを組み合わせてより複雑な動作を指定する

リソースグループのアフィニティー

リソースグループ間のアフィニティーによって、各リソースグループをどのノード上で同時にオンラインにできるかが制限されます。各アフィニティーでは、ソースリソースグループによって、1 つまたは複数のターゲットリソースグループに対するアフィニティーが宣言されます。リソースグループ間のアフィニティーを作成するには、ソースの RG_affinities リソースグループプロパティーを次のように設定します。

-p RG_affinities=affinity-list
affinity-list

ソースリソースグループと 1 つまたは複数のターゲットリソースグループの間のアフィニティーのコンマ区切りリストを指定します。このリストには 1 つのアフィニティーまたは複数のアフィニティーを指定できます。

リスト内の各アフィニティーを次のように指定します。

operator target-rg

注 -  operatortarget-rg の間にはスペースを含めないでください。
operator

作成するアフィニティーのタイプを指定します。詳細は、表 7を参照してください。

target-rg

作成するアフィニティーのターゲットであるリソースグループを指定します。

表 7  リソースグループ間のアフィニティーのタイプ
演算子
アフィニティーのタイプ
効果
+
弱い肯定的
可能な場合、ソースは、ターゲットがオンラインまたは起動中である 1 つまたは複数のノード上でオンラインになります。ただし、ソースとターゲットは、異なるノード上でオンラインになることを許可されます。
++
強い肯定的
ソースは、ターゲットがオンラインまたは起動中である 1 つまたは複数のノード上でのみオンラインになります。ソースとターゲットは、異なるノード上でオンラインになることを許可されません
-
弱い否定的
可能な場合、ソースは、ターゲットがオンラインまたは起動中ではない 1 つまたは複数のノード上でオンラインになります。ただし、ソースとターゲットは、同じノード上でオンラインになることを許可されます。
--
強い否定的
ソースは、ターゲットがオンラインではない 1 つまたは複数のノード上でのみオンラインになります。ソースとターゲットは、同じノード上でオンラインになることを許可されません
+++
フェイルオーバー委託付きの強い肯定的
ソースによるフェイルオーバーの試みがターゲットに委託される点を除き、強い肯定的と同じです。詳細は、リソースグループのフェイルオーバーまたはスイッチオーバーの委託を参照してください。

弱いアフィニティーは、Nodelist の優先順序よりも優先されます。

ほかのリソースグループの現在の状態によって、どのノード上でも強いアフィニティーを満たすことができないことがあります。この状況では、そのアフィニティーのソースであるリソースグループはオフラインのままになります。ほかのリソースグループの状態が変化して強いアフィニティーを満たすことができるようになった場合、そのアフィニティーのソースであるリソースグループはオンラインに戻ります。


注 -  ソースリソースグループ上で、複数のターゲットリソースグループに対して強いアフィニティーを宣言する場合は注意してください。宣言されているすべての強いアフィニティーを満たすことができない場合、そのソースリソースグループはオフラインのままになります。

リソースグループの別のリソースグループとの共用関係の適用

あるリソースグループによって表されるサービスが 2 つ目のリソースグループ内のサービスに強く依存しすぎているために、両方のサービスを同じノード上で実行しなければならないことがあります。たとえば、互いに依存する複数のサービスデーモンで構成されているアプリケーションでは、すべてデーモンを同じノード上で実行することが必要な場合があります。

このような状況では、依存するサービスのリソースグループがもう一方のサービスのリソースグループと共用関係を持つように強制します。リソースグループの別のリソースグループとの共用関係を適用するには、そのリソースグループ上で、ほかのリソースグループに対する強い肯定的なアフィニティーを宣言します。

# clresourcegroup set|create -p RG_affinities=++target-rg source-rg
source-rg

強い肯定的なアフィニティーのソースであるリソースグループを指定します。このリソースグループは、別のリソースグループに対する強い肯定的なアフィニティーを宣言している場所のリソースグループです。

-p RG_affinities=++target-rg

強い肯定的なアフィニティーのターゲットであるリソースグループを指定します。このリソースグループは、強い肯定的なアフィニティーを宣言している相手のリソースグループです。

リソースグループは、強い肯定的なアフィニティーを持っている相手のリソースグループに追従します。ターゲットリソースグループが別のノードに再配置された場合、ソースリソースグループは、ターゲットと同じノードに自動的に切り替えられます。ただし、強い肯定的なアフィニティーを宣言しているリソースグループが、そのアフィニティーのターゲットがまだ実行されていないノードにフェイルオーバーすることは妨げられます。


注 -  妨げられるのは、リソースモニターによって開始されたフェイルオーバーだけです。ソースリソースグループとターゲットリソースグループが実行されているノードに障害が発生した場合は、両方のリソースグループが同じ動作中のノードにフェイルオーバーします。

たとえば、リソースグループ rg1 が、リソースグループ rg2 に対する強い肯定的なアフィニティーを宣言しているとします。rg2 が別のノードにフェイルオーバーした場合は、rg1 もそのノードにフェイルオーバーします。このフェイルオーバーは、rg1 内のすべてのリソースが動作中であっても実行されます。ただし、rg1 内のリソースが rg1rg2 が実行されていないノードにフェイルオーバーしようとした場合、この試みはブロックされます。

強い肯定的なアフィニティーのターゲットをオンラインにしたとき、その強い肯定的なアフィニティーのソースは、すべてのノード上でオフラインである可能性があります。この状況では、その強い肯定的なアフィニティーのソースは、ターゲットと同じノード上で自動的にオンラインになります。

たとえば、リソースグループ 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
source-rg

弱い肯定的なアフィニティーのソースであるリソースグループを指定します。このリソースグループは、別のリソースグループに対する弱い肯定的なアフィニティーを宣言している場所のリソースグループです。

-p RG_affinities=+target-rg

弱い肯定的なアフィニティーのターゲットであるリソースグループを指定します。このリソースグループは、弱い肯定的なアフィニティーを宣言している相手のリソースグループです。

あるリソースグループ上で別のリソースグループに対する弱い肯定的なアフィニティーを宣言することによって、両方のリソースグループが同じノード上で実行される確率が高くなります。弱い肯定的なアフィニティーのソースは、その弱い肯定的なアフィニティーのターゲットがすでに実行されているノード上で最初にオンラインになります。ただし、リソースモニターのために弱い肯定的なアフィニティーのターゲットがフェイルオーバーした場合、そのアフィニティーのソースはフェイルオーバーしません。同様に、弱い肯定的なアフィニティーのターゲットがスイッチオーバーされた場合、そのアフィニティーのソースはフェイルオーバーしません。どちらの状況でも、このソースは、すでに実行されているノード上でオンラインのままになります。


注 -  ソースリソースグループとターゲットリソースグループが実行されているノードに障害が発生した場合は、両方のリソースグループが同じ動作中のノード上で再起動されます。
使用例 57  リソースグループの別のリソースグループとの優先共用関係の指定

この例では、リソースグループ rg1 を、リソースグループ rg2 に対する弱い肯定的なアフィニティーを宣言するように変更するためのコマンドを示します。このアフィニティー関係の結果として、rg1rg2 は、同じノード上で最初にオンラインになります。ただし、rg2 内のリソースのために rg2 がフェイルオーバーした場合、rg1 は、これらのリソースグループが最初にオンラインになったノード上でオンラインのままになります。この例では、両方のリソースグループが存在すると仮定します。

# clresourcegroup set -p RG_affinities=+rg2 rg1

リソースグループのセットのクラスタノード間での均等な分散

リソースグループのセット内の各リソースグループにより、クラスタに同じ負荷が課されることがあります。この状況では、リソースグループをクラスタノード間で均等に分散させることによって、クラスタ上の負荷を分散させることができます。

リソースグループのセットをクラスタノード間で均等に分散させるには、各リソースグループ上で、セット内のほかのリソースグループに対する弱い否定的なアフィニティーを宣言します。

# clresourcegroup set|create -p RG_affinities=neg-affinity-list source-rg
source-rg

弱い否定的なアフィニティーのソースであるリソースグループを指定します。このリソースグループは、ほかのリソースグループに対する弱い否定的なアフィニティーを宣言している場所のリソースグループです。

-p RG_affinities=neg-affinity-list

ソースリソースグループと、弱い否定的なアフィニティーのターゲットであるリソースグループの間の弱い否定的なアフィニティーのコンマ区切りリストを指定します。ターゲットリソースグループは、弱い否定的なアフィニティーを宣言している相手のリソースグループです。

あるリソースグループ上でほかのリソースグループに対する弱い否定的なアフィニティーを宣言することによって、リソースグループが常に、クラスタ内のもっとも負荷の軽いノード上でオンラインになることが保証されます。そのノード上では、もっとも少ない数のほかのリソースグループが実行されています。そのため、違反する弱い否定的なアフィニティーの数は最小です。

使用例 58  リソースグループのセットのクラスタノード間での均等な分散

この例では、リソースグループ rg1rg2rg3、および rg4 を、これらのリソースグループが確実にクラスタ内の使用可能なノード間で均等に分散されるように変更するためのコマンドを示します。この例では、リソースグループ rg1rg2rg3、および 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
noncritical-rg

非クリティカルサービスを含むリソースグループを指定します。このリソースグループは、別のリソースグループに対する強い否定的なアフィニティーを宣言している場所のリソースグループです。

-p RG_affinities=--critical-rg

クリティカルサービスを含むリソースグループを指定します。このリソースグループは、強い否定的なアフィニティーを宣言している相手のリソースグループです。

リソースグループは、強い否定的なアフィニティーを持っている相手のリソースグループから遠ざかります。

強い否定的なアフィニティーのターゲットをオフラインにしたとき、その強い否定的なアフィニティーのソースは、すべてのノード上でオフラインである可能性があります。この状況では、その強い否定的なアフィニティーのソースは自動的にオンラインになります。リソースグループは一般に、ノードリスト内のノードの順序および宣言されているアフィニティーに基づいて、最優先ノード上でオンラインになります。

たとえば、リソースグループ rg1 が、リソースグループ rg2 に対する強い否定的なアフィニティーを宣言しているとします。リソースグループ rg1 が最初、すべてのノード上でオフラインであるのに対して、リソースグループ rg2 はあるノード上でオンラインです。管理者が rg2 をオフラインにした場合、rg1 は自動的にオンラインになります。

clresourcegroup suspend コマンドを使用すると、強いアフィニティーまたはクラスタ再構成のために、強い否定的なアフィニティーのソースが自動的にオンラインになることを回避できます。

使用例 59  クリティカルサービスが優先されることの指定

この例では、非クリティカルリソースグループ ncrg1 および ncrg2 を、これらのリソースグループよりクリティカルリソースグループ mcdbrg が確実に優先されるように変更するためのコマンドを示します。この例では、リソースグループ mcdbrgncrg1、および ncrg2 が存在すると仮定します。

# clresourcegroup set -p RG_affinities=--mcdbrg ncrg1 ncrg2

リソースグループのフェイルオーバーまたはスイッチオーバーの委託

強い肯定的なアフィニティーのソースリソースグループは、そのアフィニティーのターゲットが実行されていないノードにフェイルオーバーまたはスイッチオーバーできません。強い肯定的なアフィニティーのソースリソースグループをフェイルオーバーまたはスイッチオーバーできるようにする必要がある場合は、そのフェイルオーバーをターゲットリソースグループに委託する必要があります。アフィニティーのターゲットがフェイルオーバーすると、アフィニティーのソースはそのターゲットとともに強制的にフェイルオーバーされます。


注 -  ++ 演算子で指定されている強い肯定的なアフィニティーのソースリソースグループをスイッチオーバーしなければならないことがあります。この状況では、アフィニティーのターゲットとアフィニティーのソースを同時にスイッチオーバーします。

リソースグループのフェイルオーバーまたはスイッチオーバーを別のリソースグループに委託するには、そのリソースグループ上で、ほかのリソースグループに対するフェイルオーバー委託付きの強い肯定的なアフィニティーを宣言します。

# clresourcegroup set|create source-rg -p RG_affinities=+++target-rg
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

リソースグループ間のアフィニティーの組み合わせ

複数のアフィニティーを組み合わせることによって、より複雑な動作を作成できます。たとえば、アプリケーションの状態を、関連するレプリカサーバーで記録することもできます。この例でのノード選択の要件は次のとおりです。

  • レプリカサーバーは、アプリケーションとは別のノード上で実行する必要があります。

  • アプリケーションがその現在のノードからフェイルオーバーする場合、そのアプリケーションは、レプリカサーバーが実行されているノードにフェイルオーバーします。

  • レプリカサーバーが実行されているノードにアプリケーションがフェイルオーバーした場合、そのレプリカサーバーは別のノードにフェイルオーバーする必要があります。ほかに使用可能なノードがない場合、レプリカサーバーはオフラインになる必要があります。

これらの要件を満たすには、アプリケーションとレプリカサーバーのためのリソースグループを次のように構成します。

  • アプリケーションを含むリソースグループは、レプリカサーバーを含むリソースグループに対する弱い肯定的なアフィニティーを宣言します。

  • レプリカサーバーを含むリソースグループは、アプリケーションを含むリソースグループに対する強い否定的なアフィニティーを宣言します。

使用例 61  リソースグループ間のアフィニティーの組み合わせ

この例では、次のリソースグループ間のアフィニティーを組み合わせるためのコマンドを示します。

  • リソースグループ 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

ゾーンクラスタ内のリソースグループのアフィニティーのタイプには、次のいずれかを指定できます。

  • + (弱い肯定的)

  • ++ (強い肯定的)

  • +++ (フェイルオーバー委託付きの強い肯定的)

  • - (弱い否定的)

  • -- (強い否定的)

使用例 62  ゾーンクラスタ内のリソースグループ間の強い肯定的なアフィニティーの指定

この例では、ゾーンクラスタ内のリソースグループ間の強い肯定的なアフィニティーを指定するためのコマンドを示します。

ゾーンクラスタ 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