Sun Cluster データサービス開発ガイド (Solaris OS 版)

大域ゾーン内でのみ実行されるモニターおよびメソッドの実装

ほとんどのリソースタイプは、リソースグループのノードリストに出現するすべてのノードでメソッドを実行します。ただし、リソースグループが非大域ゾーン内 (つまりゾーンクラスタノードまたはグローバルクラスタ非投票ノードのいずれか) で構成されている場合でも、大域ゾーン内ですべてのメソッドを実行することが必要なリソースタイプもいくつかあります。これが必要となるのは、ネットワークアドレスやディスクなど、大域ゾーンからしか管理できないシステムリソースを管理しているリソースタイプの場合です。このようなリソースタイプは、リソースタイプ登録 (Resource Type Registration、RTR) ファイルの中で Global_zone プロパティーを TRUE に設定することによって識別されます。


注意 – 注意 –

信頼できる既知のソースであるリソースタイプを除いて、Global_zone プロパティーに TRUE が設定されているリソースタイプは登録しないでください。このプロパティーに TRUE を設定したリソースタイプは、ゾーン分離をすり抜け、危険があります。


Global_zone=TRUE を宣言するリソースタイプは、Global_zone_override リソースプロパティーを宣言する場合もあります。この場合、Global_zone_override プロパティーの値は、そのリソースの Global_zone プロパティーの値より優先されます。Global_zone_override プロパティーの詳細は、「リソースのプロパティー」 および r_properties(5)のマニュアルページを参照してください。

Global_zone リソースタイププロパティーが TRUE に設定されていない場合、モニターやメソッドはリソースグループのノードリストに列挙されている任意のノードで実行されます。

scha_control() および scha_resource_setstatus() 関数、そして scha_control および scha_resource_setstatus コマンドは、それらの関数やコマンドの実行元のノードで暗黙的に動作します。Global_zone リソースタイププロパティーが TRUE に等しい場合、これらの関数やコマンドは、リソースが非大域ゾーンで構成されているときに、別に呼び出される必要があります。

リソースが非大域ゾーンで構成されているときは、zonename オペランドの値が -Z オプションを通じてリソースタイプメソッドに渡されます。実装するメソッドやモニターからこれらのいずれかの関数やコマンドを呼び出す場合、正しい処理を行わないと、大域ゾーンで正しく動作しません。実装するメソッドやモニターは、リソースグループのノードリストに含まれているリソースが構成されている非大域ゾーンで動作するようにする必要があります。

実装するメソッドやモニターのコードでこれらの条件を正しく処理していることを確認するため、次の作業が行われていることをチェックしてください。

Global_zone リソースタイププロパティーが TRUE に等しいリソースが、ZONE_LOCAL の問い合わせの optag の値を指定して scha_cluster_get() を起動した場合、大域ゾーンの名前が返されます。この場合、呼び出した側のコードでは文字列 :zonename をローカルノード名に連結して、リソースが実際に構成されているゾーンを取得する必要があります。zonename は、-Z zonename コマンド行オプション内のメソッドに渡されるものと同じゾーン名です。コマンド行内に -Z オプションがない場合は、リソースグループが大域ゾーン内に構成されるので、ゾーン名をノード名に連結する必要はありません。

同様に、呼び出した側のコードで、たとえば非大域ゾーンでのリソースの状態を問い合わせる場合は、RESOURCE_STATEoptag 値ではなく RESOURCE_STATE_NODEoptag 値を指定して、scha_resource_get() を呼び出す必要があります。この場合、RESOURCE_STATEoptag 値によって、リソースが実際に構成されている非大域ゾーンでの問い合わせではなく、大域ゾーンでの問い合わせが実行されます。

DSDL 関数は、その性質上、-Z zonename オプションを処理します。したがって、scds_initialize() 関数は、リソースが実際に構成されている非大域ゾーンに対応した、該当するリソースプロパティーおよびリソースグループプロパティーを取得します。そのほかの DSDL 問い合わせは、そのノード上で暗黙的に動作します。

DSDL 関数 scds_get_zone_name() を使用すると、-Z zonename コマンド行オプションの中でメソッドに渡されたゾーンの名前を問い合わせることができます。-Z zonename が渡されていない場合には、scds_get_zone_name() 関数は NULL を返します。

次の条件がどちらも成り立つ場合、複数の Boot メソッドが大域ゾーン内で同時に実行されることがあります。