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

リソースの監視

通常、モニターは、リソース上で定期的に障害検証を実行し、検証したリソースが正しく動作しているかどうかを検出するように実装します。障害検証が失敗した場合、モニターはローカルでの再起動を試みるか、影響を受けるリソースグループのフェイルオーバーを要求できます。モニターは、RMAPI 関数 scha_control() または scha_control_zone() を呼び出すか、あるいは DSDL 関数 scds_fm_action() を呼び出すことによって、フェイルオーバーを要求します。

また、リソースの性能を監視して、性能を調節または報告することもできます。リソースタイプに固有な障害モニターの作成は任意です。このような障害モニターを作成しなくても、リソースタイプは Sun Cluster により基本的なクラスタの監視が行われます。Sun Cluster は、ホストハードウェアの障害、ホストのオペレーティングシステムの全体的な障害、およびパブリックネットワーク上で通信できるホストの障害を検出します。

RGM がリソースモニターを直接呼び出すことはありませんが、RGM は自動的にリソース用のモニターを起動する準備を整えます。リソースをオフラインにするとき、RGM は、リソース自体を停止する前に、Monitor_stop メソッドを呼び出して、ローカルノードまたはゾーン上でリソースのモニターを停止します。リソースをオンラインにするとき、RGM は、リソース自体を起動したあとに、Monitor_start メソッドを呼び出します。

RMAPI 関数 scha_control() または scha_control_zone()、および DSDL 関数 scds_fm_action() (この関数は scha_control() を呼び出す) を使用することにより、リソースモニターはリソースグループを別のノードまたはゾーンにフェイルオーバーするよう要求できます。妥当性検査の 1 つとして、scha_control() および scha_control_zone() は、Monitor_check を呼び出して (定義されている場合)、要求されたノードまたはゾーンがリソースのあるリソースグループをマスターできるほど信頼できるかどうかを判断します。Monitor_check が「このノードまたはゾーンは信頼できない」と報告した場合、あるいは、メソッドがタイムアウトした場合、RGM はフェイルオーバー要求に適する別のノードまたはゾーンを探します。すべてのノードまたはゾーンで Monitor_check が失敗した場合、フェイルオーバーは取り消されます。

リソースモニターは、モニターから見たリソースの状態を反映するように StatusStatus_msg プロパティーを設定します。これらのプロパティーを設定するには、RMAPI 関数 scha_resource_setstatus() または scha_resource_setstatus_zone()scha_resource_setstatus コマンド、あるいは DSDL 関数 scds_fm_action() を使用します。


注 –

Status および Status_msg プロパティーはリソースモニターに固有の使用方法ですが、これらのプロパティーは任意のプログラムで設定できます。


RMAPI による障害モニターの実装例については、「障害モニターの定義」を参照してください。DSDL による障害モニターの実装例については、SUNW.xfnts 障害モニター」を参照してください。Sun が提供するデータサービスに組み込まれている障害モニターについては、『Sun Cluster データサービスの計画と管理 (Solaris OS 版)』を参照してください。

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

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


注意 – 注意 –

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


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 をローカルノード名に連結して、リソースが実際に構成されているゾーンを取得する必要があります。

同様に、呼び出した側のコードで、たとえば非大域ゾーンでのリソースの状態を問い合わせる場合は、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 メソッドが大域ゾーン内で同時に実行されることがあります。