Sun Cluster 3.1 10/03 データサービス開発ガイド

障害モニターデーモンの設計

DSDL を使用したリソースタイプ実装の障害モニターデーモンには、通常、次の役割があります。

DSDL ユーティリティーの設計では、障害モニターデーモンの主要ループは次のようになっています。

DSDL を使って実装された障害モニターでは、

ほとんどの場合、アプリケーション固有の状態検査アクションは、スタンドアロンの別個のユーティリティー (たとえば、svc_probe()) として実装してから、この汎用的なメインループに統合できます。


for (;;) { 

   / * 正常な検証と検証の間の thorough_probe_interval 
   *  だけスリープする。*/
   (void) scds_fm_sleep(scds_handle,
   scds_get_rs_thorough_probe_interval(scds_handle));

   /* 使用するすべてのipaddress を検証する。
   * 次の各要素を繰り返し検証する。
   * 1. 使用するすべてのネットリソース
   * 2. 特定のリソースのすべてのipaddresses
   * 検証するipaddress ごとに
   * 障害履歴を計算する。*/
   probe_result = 0;
    /* すべてのリソースを繰り返し調べて、
    * svc_probe() の呼び出しに使用する各IP アドレスを取得する。*/
   for (ip = 0; ip < netaddr->num_netaddrs; ip++) {
    /* 状態を検証する必要があるホスト名とポート
    * を取得する。
    */
   hostname = netaddr->netaddrs[ip].hostname;
   port = netaddr->netaddrs[ip].port_proto.port;
   /*
   * HA-XFS は1 つのポートしかサポートしないため、
   * ポート配列の最初のエントリから
   * ポート値を取得する。
   */
   ht1 = gethrtime(); /* Latch probe start time */
   probe_result = svc_probe(scds_handle, 

   hostname, port, timeout);
   /*
   * サービス検証履歴を更新し、
   * 必要に応じてアクションを実行する。
   * 検証終了時刻を保存する。
   */
   ht2 = gethrtime();
   /* ミリ秒に変換する。*/
   dt = (ulong_t)((ht2 - ht1) / 1e6);

   /*
   * 障害履歴を計算し、
   * 必要に応じてアクションを実行する。
   */
   (void) scds_fm_action(scds_handle,
   probe_result, (long)dt);
   }       /* 各ネットワークリソース */
   }       /* 検証を続ける。*/