Logical Domains Manager を使用して、ドメイン間の依存関係を確立できます。依存する 1 つ以上のドメインを持つドメインは、マスタードメインと呼ばれます。別のドメインに依存するドメインは、スレーブドメインと呼ばれます。
master プロパティーを設定することによって、各スレーブドメインに最大 4 つのマスタードメインを指定できます。たとえば、次に示すコンマで区切られたリストでは、pine スレーブドメインに 4 つのマスタードメインを指定しています。
# ldm add-domain master=apple,lemon,orange,peach pine |
各マスタードメインには、マスタードメインに障害が発生した場合のスレーブドメインの動作を指定できます。たとえば、マスタードメインに障害が発生した場合、そのスレーブドメインでパニックを発生させる必要があることがあります。1 つのスレーブドメインに複数のマスタードメインが指定されている場合、最初のマスタードメインに障害が発生すると、そのすべてのスレーブドメインに対して定義済みの障害ポリシーがトリガーされます。
複数のマスタードメインに同時に障害が発生した場合、指定された障害ポリシーのうち 1 つのみが、影響を受けるすべてのスレーブドメインに対して実施されます。たとえば、障害が発生したマスタードメインに stop および panic という障害ポリシーが定義されている場合、すべてのスレーブドメインが停止するか、パニックが発生します。
マスタードメインの障害ポリシーは、failure-policy プロパティーに次のいずれかの値を設定することによって制御できます。
ignore は、マスタードメインに障害が発生した場合、すべてのスレーブドメインを無視します。
panic は、マスタードメインに障害が発生した場合、すべてのスレーブドメインにパニックを発生させます。
reset は、マスタードメインに障害が発生した場合、すべてのスレーブドメインをリセットします。
stop は、マスタードメインに障害が発生した場合、すべてのスレーブドメインを停止します。
この例では、マスタードメインの障害ポリシーが次のように指定されています。
# ldm set-domain failure-policy=ignore apple # ldm set-domain failure-policy=panic lemon # ldm set-domain failure-policy=reset orange # ldm set-domain failure-policy=stop peach |
このメカニズムを使用して、ドメイン間の明示的な依存関係を作成できます。たとえば、ゲストドメインが、サービスドメインに暗黙に依存し、その仮想デバイスを提供しているとします。ゲストドメインが依存しているサービスドメインが実行されていない場合、ゲストドメインの入出力はブロックされます。ゲストドメインをサービスドメインのスレーブドメインとして定義することによって、サービスドメインが停止した場合のゲストドメインの動作を指定できます。このような依存関係が確立されていない場合、ゲストドメインはサービスドメインが使用可能になるのを待機します。
Logical Domains Manager では、依存サイクルが生じるようなドメイン関係を作成することはできません。詳細は、「依存サイクル」 を参照してください。
ドメインの依存関係の XML の例は、例 12–6 を参照してください。
次の例は、ドメインの依存関係を構成する方法を示します。
最初のコマンドは、twizzle というマスタードメインを作成します。このコマンドは、failure-policy=reset を使用して、twizzle ドメインに障害が発生した場合にスレーブドメインをリセットするように指定します。2 つめのコマンドは、primary というマスタードメインに変更を加えます。このコマンドは、failure-policy=panic を使用して、primary ドメインに障害が発生した場合にスレーブドメインにパニックを発生させるように指定します。3 つめのコマンドは、2 つのマスタードメイン twizzle と primary に依存する、chocktaw というスレーブドメインを作成します。このスレーブドメインは、master=twizzle,primary を使用して、マスタードメインを指定します。twizzle または primary のいずれかのドメインに障害が発生した場合、chocktaw ドメインはリセットされるか、パニックが発生します。最初に障害が発生したマスタードメインによって、スレーブドメインの動作が決定されます。
# ldm add-domain failure-policy=reset twizzle # ldm set-domain failure-policy=panic primary # ldm add-domain master=twizzle,primary chocktaw |
この例は、ldm set-domain コマンドを使用して orange ドメインに変更を加え、primary をマスタードメインとして割り当てます。2 つめのコマンドは、ldm set-domain コマンドを使用して、orange および primary を tangerine ドメインのマスタードメインとして割り当てます。3 つめのコマンドは、これらすべてのドメインに関する情報を一覧表示します。
# ldm set-domain master=primary orange # ldm set-domain master=orange,primary tangerine # ldm list -o domain NAME STATE FLAGS UTIL primary active -n-cv- 0.2% SOFTSTATE Solaris running HOSTID 0x83d8b31c CONTROL failure-policy=ignore DEPENDENCY master= ------------------------------------------------------------------------------ NAME STATE FLAGS UTIL orange bound ------ HOSTID 0x84fb28ef CONTROL failure-policy=stop DEPENDENCY master=primary VARIABLES test_var=Aloha ------------------------------------------------------------------------------ NAME STATE FLAGS UTIL tangerine bound ------ HOSTID 0x84f948e9 CONTROL failure-policy=ignore DEPENDENCY master=orange,primary VARIABLES test_var=A hui hou |
次に、解析可能な出力を使用した一覧表示の例を示します。
# ldm list -o domain -p |
Logical Domains Manager では、依存サイクルが生じるようなドメイン関係を作成することはできません。依存サイクルとは、スレーブドメインが自身に依存したり、マスタードメインがそのスレーブドメインのいずれかに依存したりすることになる、2 つ以上のドメイン間の関係です。
Logical Domains Manager は、依存関係を追加する前に、依存サイクルが存在しないかを判断します。Logical Domains Manager は、まずスレーブドメインについて、マスター配列によって指定されたすべてのパスを最初から最後まで検索します。途中で依存サイクルが見つかると、エラーとして報告されます。
次の例は、依存サイクルがどのように作成されるかを示します。最初のコマンドは、mohawk というスレーブドメインを作成します。このドメインは、マスタードメインに primary を指定します。その結果、mohawk は、次のような依存関係の連鎖で primary に依存します。
2 つめのコマンドは、primary というスレーブドメインを作成します。このドメインは、マスタードメインに counter を指定します。その結果、次のような依存関係の連鎖で、mohawk が primary に依存し、primary が counter に依存します。
3 つめのコマンドは、counter ドメインと mohawk ドメインとの間に依存関係の作成を試みます。これによって、次のような依存サイクルが生成されます。
次のエラーメッセージが表示されて ldm set-domain コマンドが失敗します。
# ldm add-domain master=primary mohawk # ldm set-domain master=counter primary # ldm set-domain master=mohawk counter Dependency cycle detected: LDom "counter" indicates "primary" as its master |