Cluster Server 7.3.1 エージェント開発者ガイド - AIX、Linux、Solaris、Windows

Last Published:
Product(s): InfoScale & Storage Foundation (7.3.1)
  1. 概要
    1.  
      VCS エージェントについて
    2. エージェント関数
      1.  
        エージェントフレームワークについて
      2.  
        IMF(Intelligent Monitoring Framework)について
      3.  
        リソースの種類の定義
      4.  
        エージェント関数(エントリポイント)について
      5.  
        on-off、on-only、persistent リソースについて
      6. 属性について
        1.  
          属性のデータ型
        2.  
          属性値の種類
        3.  
          システムにまたがる属性の範囲: グローバル属性とローカル属性
        4.  
          属性の有効期間: 一時属性
      7.  
        アプリケーションの Intentional Offline について
    3. エージェントの開発について
      1.  
        アプリケーションに関する注意事項
      2. エージェント開発プロセスの高度な概要
        1.  
          タイプ定義ファイルの作成
        2.  
          エントリポイントの開発
        3.  
          エージェントの作成
        4.  
          エージェントのテスト
  2. エージェントのエントリポイントの概要
    1. エージェントのエントリポイントについて
      1.  
        サポートされるエントリポイント
      2.  
        エージェントフレームワークがエントリポイントと相互作用するしくみ
    2. エージェントエントリポイントの説明
      1.  
        open エントリポイントについて
      2.  
        monitor エントリポイントについて
      3.  
        online エントリポイントについて
      4.  
        offline エントリポイントについて
      5.  
        clean エントリポイントについて
      6. action エントリポイントについて
        1.  
          action エントリポイントの戻り値
      7. info エントリポイントについて
        1.  
          info エントリポイントの戻り値
        2.  
          ResourceInfo 属性について
        3.  
          info エントリポイントの呼び出し
      8.  
        attr_changed エントリポイントについて
      9.  
        close エントリポイントについて
      10.  
        shutdown エントリポイントについて
      11.  
        imf_init エントリポイントについて
      12.  
        imf_register エントリポイントについて
      13.  
        imf_getnotification エントリポイントについて
      14.  
        migrate エントリポイントについて
      15.  
        meter エントリポイントについて
    3.  
      エントリポイントの戻り値
    4. C++ またはスクリプトエントリポイントの使用上の注意事項
      1. VCSAgStartup ルーチンについて
        1.  
          スクリプトを使ってエントリポイントを実装する場合
        2.  
          C++ ですべてまたは一部のエントリポイントを実装する場合
        3.  
          例: C++ とスクリプトを使用する VCSAgStartup エントリポイント
    5. エージェント情報ファイルについて
      1. エージェント情報ファイルの例(UNIX)
        1.  
          エージェント情報
        2.  
          属性の引数の詳細
      2.  
        エージェント XML 情報ファイルの実装
    6. ArgList 属性と ArgListValues 属性について
      1.  
        V50 以降として登録されたエージェントの ArgListValues 属性
      2. 名前と値のタプル形式の概要
        1.  
          スカラー属性形式
        2.  
          ベクトル属性形式
        3.  
          キーリスト属性形式
        4.  
          アソシエーション属性形式
      3.  
        異なるエージェントバージョンの ArgListValues 属性
      4.  
        エントリポイントのタイムアウトについて
  3. C++ でのエントリポイントの作成
    1. C++ でのエントリポイントの作成について
      1.  
        この章で使うエントリポイントの例
    2.  
      データ構造
    3. C++ のエントリポイントの構文
      1.  
        C++ VCSAgStartup の構文
      2.  
        C++ monitor の構文
      3. C++ info の構文
        1.  
          resinfo_op
        2.  
          info_output
        3.  
          opt_update_args
        4.  
          opt_add_args
        5.  
          例: C++ での info エントリポイントの実装
      4.  
        C++ online の構文
      5.  
        C++ offline の構文
      6.  
        C++ clean の構文
      7.  
        C++ action の構文
      8.  
        C++ attr_changed の構文
      9.  
        C++ open の構文
      10.  
        C++ close の構文
      11.  
        C++ shutdown の構文
      12.  
        C++ migrate の構文
      13.  
        C++ meter の構文
    4. エージェントフレームワークの基本関数
      1.  
        VCSAgGetMonitorLevel
      2.  
        VCSAgGetFwVersion
      3.  
        VCSAgGetRegVersion
      4.  
        VCSAgRegisterEPStruct
      5.  
        VCSAgSetCookie2
      6.  
        VCSAgRegister
      7.  
        VCSAgUnregister
      8.  
        VCSAgGetCookie
      9.  
        VCSAgStrlcpy
      10.  
        VCSAgStrlcat
      11.  
        VCSAgSnprintf
      12.  
        VCSAgCloseFile
      13.  
        VCSAgDelString
      14.  
        VCSAgExec
      15.  
        VCSAgExecWithTimeout
      16.  
        VCSAgGenSnmpTrap
      17.  
        VCSAgSendTrap
      18.  
        VCSAgLockFile
      19.  
        VCSAgInitEntryPointStruct
      20.  
        VCSAgSetStackSize
      21.  
        VCSAgUnlockFile
      22.  
        VCSAgValidateAndSetEntryPoint
      23.  
        VCSAgSetLogCategory
      24.  
        VCSAgGetProductName
      25.  
        VCSAgMonitorReturn
      26.  
        VCSAgSetResEPTimeout
      27.  
        VCSAgDecryptKey
      28.  
        VCSAgGetConfDir
      29.  
        VCSAgGetHomeDir
      30.  
        VCSAgGetLogDir
      31.  
        VCSAgGetSystemName
      32.  
        VCSAG_CONSOLE_LOG_MSG
      33.  
        VCSAG_LOG_MSG
      34.  
        VCSAG_LOGDBG_MSG
      35.  
        VCSAG_RES_LOG_MSG
    5. コンテナサポートのためのエージェントフレームワーク基本関数
      1.  
        VCSAgIsContainerUp
      2.  
        VCSAgGetContainerTypeEnum
      3.  
        VCSAgExecInContainer2
      4.  
        VCSAgIsContainerCapable
      5.  
        VCSAgExecInContainerWithTimeout
      6.  
        VCSAgGetUID
      7.  
        VCSAgIsPidInContainer
      8.  
        VCSAgIsProcInContainer
      9.  
        VCSAgGetContainerID2
      10.  
        VCSAgGetContainerName2
      11.  
        VCSAgGetContainerBasePath
      12.  
        VCSAgGetContainerEnabled
  4. スクリプトでのエントリポイントの作成
    1. スクリプトでのエントリポイントの作成について
      1. スクリプトのエントリポイント使用上のルール
        1.  
          UNIX プラットフォームの場合
      2.  
        スクリプトのエントリポイントのパラメータと値
      3.  
        ArgList 属性
      4.  
    2. スクリプトエントリポイントの構文
      1.  
        monitor スクリプトの構文
      2.  
        online スクリプトの構文
      3.  
        offline スクリプトの構文
      4.  
        clean スクリプトの構文
      5.  
        action スクリプトの構文
      6.  
        attr_changed スクリプトの構文
      7.  
        info スクリプトの構文
      8.  
        open スクリプトの構文
      9.  
        close スクリプトの構文
      10.  
        shutdown スクリプトの構文
      11.  
        imf_init スクリプトの構文
      12.  
        imf_register スクリプトの構文
      13.  
        imf_getnotification スクリプトの構文
      14.  
        migrate スクリプトの構文
      15.  
        meter スクリプトの構文
    3. エージェントフレームワークの基本関数
      1.  
        VCSAG_GET_MONITOR_LEVEL
      2.  
        VCSAG_GET_AGFW_VERSION
      3.  
        VCSAG_GET_REG_VERSION
      4.  
        VCSAG_SET_RES_EP_TIMEOUT
      5. VCSAG_GET_ATTR_VALUE
        1.  
          キーリスト属性のキーの数と引数リストの属性のインデックスを取得するには
        2.  
          キーリストとベクトル属性の特定のキーを取得するには
        3.  
          アソシエーション属性でキーの数を、引数リストで属性のインデックスを取得するには
        4.  
          アソシエーション属性の特定のキーまたは値を取得するには:
      6.  
        VCSAG_SET_RESINFO
      7.  
        VCSAG_MONITOR_EXIT
      8.  
        VCSAG_SYSTEM
      9.  
        VCSAG_SU
      10.  
        VCSAG_RETURN_IMF_RESID
      11.  
        VCSAG_RETURN_IMF_EVENT
      12.  
        VCSAG_BLD_PSCOMM
      13.  
        VCSAG_PHANTOM_STATE
      14.  
        VCSAG_SET_ENVS
      15.  
        VCSAG_LOG_MSG
      16.  
        VCSAG_LOGDBG_MSG
      17.  
        VCSAG_SQUEEZE_SPACES
    4. コンテナをサポートするエージェントフレームワーク基本関数
      1.  
        VCSAG_GET_CONTAINER_BASE_PATH
      2.  
        VCSAG_GET_CONTAINER_INFO
      3.  
        VCSAG_IS_PROC_IN_CONTAINER
      4.  
        VCSAG_EXEC_IN_CONTAINER
    5. スクリプトのエントリポイントの例
      1.  
        FileOnOff の online エントリポイント
      2.  
        FileOnOff の monitor エントリポイント
      3.  
        intentional offline での monitor エントリポイント
      4.  
        FileOnOff の offline エントリポイント
      5.  
        基本監視(レベル 1)と詳細監視(レベル 2)を持つエージェントのエントリポイントの監視
  5. エージェントメッセージのログ
    1.  
      エージェントメッセージのログについて
    2. C++ とスクリプトのエントリポイントでのログ
      1. エージェントメッセージ: 書式
        1.  
          Timestamp
        2.  
          ニーモニック
        3.  
          重大度(Severity)
        4.  
          UMI
        5.  
          メッセージテキスト
      2.  
        VCS エージェントのエントリポイントのログ統合
    3. C++ のエージェントのログ用 API
      1.  
        C++ エントリポイントのエージェントアプリケーションログ用マクロ
      2.  
        C++ エントリポイント用のエージェントデバッグログ記録マクロ
      3.  
        C++ マクロの重要度引数
      4.  
        VCSAG_LOG_INIT を使った function_name の初期化
      5.  
        ログカテゴリ
      6.  
        C++ エージェントで使用されるログ用 API の例
    4. スクリプトのエントリポイントのログ記録関数
      1.  
        スクリプトでの関数の使用
      2. VCSAG_SET_ENVS
        1.  
          VCSAG_SET_ENVS の例 - シェルスクリプトのエントリポイント
        2.  
          VCSAG_SET_ENVS の例 - Perl スクリプトのエントリポイント
        3.  
          VCSAG_SET_ENVS の例 - Python スクリプトのエントリポイント
      3. VCSAG_LOG_MSG
        1.  
          VCSAG_LOG_MSG の例 - シェルスクリプトのエントリポイント
        2.  
          VCSAG_LOG_MSG の例 - Perl スクリプトのエントリポイント
        3.  
          VCSAG_LOG_MSG の例 - Python スクリプトのエントリポイント
      4. VCSAG_LOGDBG_MSG
        1.  
          VCSAG_LOGDBG_MSG の例 - シェルスクリプトのエントリポイント
        2.  
          VCSAG_LOGDBG_MSG の例 - Perl スクリプトのエントリポイント
        3.  
          VCSAG_LOGDBG_MSG の例 - Python スクリプトのエントリポイント
      5.  
        スクリプトエージェントで使用するログ用関数の例
  6. カスタムエージェントの作成
    1. エージェント開発で使用するファイル
      1.  
        スクリプトベースのエージェントバイナリ
      2.  
        C++ ベースのエージェントバイナリ
    2. カスタムエージェントのためのタイプ定義ファイルの作成
      1.  
        タイプ定義ファイルの命名規則
      2.  
        例: FileOnOffTypes.cf
      3.  
        例: intentional offline をサポートするカスタムエージェントのためのタイプ定義
      4.  
        agentTypes.cf ファイル作成の必要条件
      5.  
        設定へのカスタムタイプ定義の追加
    3. UNIX でのカスタムエージェントの作成
      1.  
        スクリプトを使用したエントリポイントの実装
      2.  
        例: UNIX でのスクリプトエントリポイントの使用
      3.  
        例: UNIX での VCSAgStartup() およびスクリプトエントリポイントの使用
      4.  
        C++ を使用したエントリポイントの実装
      5.  
        例: UNIX での C++ エントリポイントの使用
      6.  
        例: UNIX での C++ およびスクリプトエントリポイントの使用
    4.  
      カスタムエージェントのインストール
    5. カスタムリソースタイプに対するリソースの定義
      1. サンプルリソース定義
        1.  
          FileOnOff エージェントが設定情報を使用する方法
    6.  
      エージェントフレームワークのバージョンの詳細
  7. スクリプトベースの IMF 対応カスタムエージェントの作成
    1.  
      スクリプトベースの IMF 対応カスタムエージェントの作成について
    2.  
      AMF プラグインのスクリプトエージェントとのリンク
    3. オンラインおよびオフライン状態監視用にリソース登録を行う AMF プラグインで必要な XML ファイルの作成
      1.  
        オンラインの監視に対する AMF とのプロセスベースのリソースの登録に対する amfregister.xml の例
      2.  
        オフライン監視のためにプロセスベースリソースを AMF に登録するための amfregister.xml の例
      3.  
        所定のプロセスに対するオンラインおよびオフラインの IMF 監視の amfregister.xml の例
      4.  
        amfregister.xml に RepearName タグを追加する例
    4.  
      設定への IMF および IMFRegList 属性の追加
    5.  
      IMF 統合なしの監視
    6.  
      IMF を使用しない LevelTwo 監視頻度での監視
    7.  
      IMF 統合を使用した監視
    8.  
      IMF を使用した LevelTwo の監視頻度での監視
    9.  
      スクリプトベースの IMF 対応のカスタムエージェントのインストール
  8. エージェントのテスト
    1.  
      テストエージェントについて
    2. デバッグメッセージの使用
      1.  
        エージェント関数(エントリポイント)のデバッグ
      2.  
        エージェントフレームワークのデバッグ
    3. AdvDbg 属性を使ったデバッグ
      1. AdvDbg 属性の動作
        1.  
          pstack アクションの動作
        2.  
          core アクションの動作
      2.  
        AdvDbg の属性によるエントリポイントの既存の機能への影響
    4. エンジンプロセスを使用したエージェントのテスト
      1.  
        テストコマンド
  9. 静的タイプ属性
    1. 静的属性について
      1.  
        静的タイプ属性の無効化
    2. 静的タイプ属性の定義
      1.  
        ActionTimeout
      2. AdvDbg
        1.  
          AdvDbg 属性の設定と個別のキーの形式
        2.  
          monitor エントリポイントの AdvDbg 属性を設定するための推奨される手順
      3.  
        AEPTimeout
      4.  
        AgentClass
      5.  
        AgentDirectory
      6.  
        AgentFailedOn
      7.  
        AgentFile
      8.  
        AgentPriority
      9.  
        AgentReplyTimeout
      10.  
        AgentStartTimeout
      11.  
        AlertOnMonitorTimeouts
      12. ArgList
        1.  
          ArgList 参照属性
      13.  
        AttrChangedTimeout
      14.  
        AvailableMeters
      15.  
        CleanRetryLimit
      16.  
        CleanTimeout
      17.  
        CloseTimeout
      18.  
        ContainerOpts
      19.  
        ConfInterval
      20.  
        EPClass
      21.  
        EPPriority
      22.  
        ExternalStateChange
      23.  
        FaultOnMonitorTimeouts
      24.  
        FaultPropagation
      25.  
        FireDrill
      26.  
        IMF
      27.  
        IMFRegList
      28.  
        InfoInterval
      29.  
        InfoTimeout
      30.  
        IntentionalOffline
      31.  
        LevelTwoMonitorFreq
      32.  
        LogDbg
      33.  
        LogFileSize
      34.  
        LogViaHalog
      35.  
        ManageFaults
      36.  
        Meters
      37.  
        MeterControl
      38.  
        MeterRegList
      39.  
        MeterRetryLimit
      40.  
        MeterTimeout
      41.  
        MonitorInterval
      42.  
        MonitorStatsParam
      43.  
        MonitorTimeout
      44.  
        MigrateTimeout
      45.  
        MigrateWaitLimit
      46.  
        NumThreads
      47.  
        OfflineMonitorInterval
      48.  
        OfflineTimeout
      49.  
        OfflineWaitLimit
      50.  
        OnlineClass
      51.  
        OnlinePriority
      52.  
        OnlineRetryLimit
      53.  
        OnlineTimeout
      54.  
        OnlineWaitLimit
      55.  
        OpenTimeout
      56.  
        Operations
      57.  
        RegList
      58.  
        RestartLimit
      59.  
        ScriptClass
      60.  
        ScriptPriority
      61.  
        SourceFile
      62.  
        SupportedActions
      63.  
        SupportedOperations
      64.  
        ToleranceLimit
  10. 状態の遷移図
    1.  
      状態遷移
    2.  
      ManageFaults 属性に関する状態の遷移
  11. 国際化されたメッセージ
    1.  
      国際化されたメッセージについて
    2. SMC ファイルの作成
      1.  
        SMC の書式
      2.  
        SMC ファイルの例
      3.  
        SMC ファイルの形式
      4.  
        SMC ファイルと BMC ファイルの名前
      5.  
        メッセージ例
      6.  
        書式指定子の使用
    3. SMC ファイルから BMC ファイルへの変換
      1. BMC ファイルの格納
        1.  
          VCS サポート言語
      2.  
        BMC ファイルの内容の表示
    4. BMC マップファイルの使用
      1.  
        BMC マップファイルの場所
      2.  
        BMC マップファイルの作成
      3.  
        BMC マップファイルの例
    5.  
      BMC ファイルの更新
  12. First Failure Data Capture(FFDC)を使用した VCS リソースの予期しない動作のトラブルシューティング
    1.  
      VCS リソースの予期しない動作をトラブルシューティングするための FFDC(First Failure Data Capture)の強化
  13. 付録 A. 5.0 より前の VCS エージェントの使用
    1. 5.0 以前の VCS エージェントの使用と V50 以降への登録
      1.  
        V40 エージェントから V50 以降のエージェントへの変更手順の概要
      2.  
        V40 と V50 以降のスクリプト例
      3.  
        ag_i18n_inc モジュールをスクリプトエントリポイントに参照元として登録
    2.  
      VCS 4.0 以前のエージェントを使用するためのガイドライン
    3. VCS 4.0 以前のエージェントのログメッセージ
      1.  
        ログタグ(VCS 4.0 以前)のログ重要度(VCS 4.0)へのマッピング
      2.  
        VCS 4.0 以上での VCS 4.0 以前のメッセージの表示
      3.  
        VCS 4.0 以前の API および VCS 4.0 ログ用マクロ
    4. VCS 4.0 以前のメッセージ API
      1.  
        VCSAgLogConsoleMsg
      2.  
        VCSAgLogI18NMsg
      3.  
        VCSAgLogI18NMsgEx
      4.  
        VCSAgLogI18NConsoleMsg
      5.  
        VCSAgLogI18NConsoleMsgEx

状態遷移

ここでは、次の状態の遷移を説明します。

  • リソースのオープン

  • 安定状態のリソース

  • リソースのオンライン化

  • リソースのオフライン化

  • リソース障害(自動再起動なし)

  • リソース障害(自動再起動あり)

  • 永続的なリソースの監視

  • リソースのクローズ

  • リソースの移行

また、状態の遷移は、ManageFaults サービスグループ属性に関するリソースの処理について示しています。

ManageFaults 属性に関する状態の遷移を参照してください。

これらの図で示す状態は、エージェントフレームワークが判断するリソースの状態を示しています。これらの状態は、エージェントフレームワーク内でのみ使用され、エンジンによって指定される IState リソース属性値とは別の値です。

エージェントは、静的リソースタイプ属性である LogDbg パラメータが値 DBG_AGINFO に設定されている場合に、リソースの状態の遷移情報をエージェントログファイルに書き込みます。エージェント開発者は、エージェントのデバッグ時にこの情報を利用できます。

図: リソースのオープン

リソースのオープン

エージェントが起動したとき、各リソースの初期状態は、Detached です。Detached 状態(Enabled=0)では、エージェントはリソースをオンライン状態またはオフライン状態にするすべてのコマンドを拒否します。

図: 安定状態のリソース

安定状態のリソース

リソースが安定した Online 状態または Offline 状態にある場合、これらのリソースには定期的な間隔で monitor エントリポイントが実行されます。この間隔は、Online 状態のリソースの場合は MonitorInterval 属性に、Offline 状態のリソースの場合は OfflineMonitorInterval 属性に従います。予期せず Offline として検出された Online リソースは、障害が発生したと見なされます。障害が発生しているリソースを説明している図を参照してください。

図: リソースのオンライン化: ManageFaults=ALL

リソースのオンライン化: ManageFaults=ALL

エージェントがエンジンからリソースのオンライン化要求を受信すると、リソースが Going Online 状態になり、オンラインエントリポイントが呼び出されます。

online エントリポイントが完了した場合は、リソースが Going Online Waiting 状態になり、次の monitor エントリポイントの実行を待ちます。

online エントリポイントがタイムアウトになると、エージェントは clean エントリポイントを呼び出します。

GoingOnlineWaiting 状態の監視が online の状態を返した場合、リソースは Online 状態に移行します。

GoingOnlineWaiting 状態の監視が Intentional Offline の状態を返した場合、リソースは Offline 状態に移行します。

しかし、monitor がタイムアウトになるか、「Online 以外」の状態(すなわち、unknown または offline)を返した場合は、次のアクションを検討します。

  • OnlineWaitLimit に到達していない場合は、リソースが GoingOnlineWaiting に戻り、次の監視のため待機します。

  • OnlineWaitLimit および OnlineRetryLimit に到達し、状態が unknown のままの場合は、リソースが GoingOnlineWaiting に戻り、次の監視のため待機します。

  • OnlineWaitLimit および OnlineRetryLimit に到達し、状態が offline のままの場合、リソースは Offline 状態に戻り、そのリソースは faulted としてマーク付けされます。

  • OnlineWaitLimit に到達し、OnlineRetryLimit に到達せず、CleanRetryLimit に到達していない場合は clean が実行されます。

  • OnlineWaitLimit および CleanRetryLimit に到達し、OnlineRetryLimit に到達しない場合は、リソースが GoingOnlineWaiting になり、ADMIN_WAIT とマーク付けされます。

  • CleanRetryLimit に到達せず、エージェントが clean を呼び出すと、次の内容が発生します。

    • clean 回数がタイムアウトになるか失敗した場合は、リソースが再び Going Online Waiting 状態に戻り、次の monitor エントリポイント実行まで待機します。

    • clean が正常に終了して OnlineRetryLimit に到達し、その後の監視で状態が offline と返された場合、リソースは Offline 状態に遷移し、FAULTED として設定されます。

図: リソースのオフライン化と ManageFault = ALL

リソースのオフライン化と ManageFault = ALL

エンジンからリソースの offline 化要求を受け取ると、エージェントはリソースを GoingOffline 状態にし、offline エントリポイントを実行し、定期監視を停止します。

offline が完了した場合、リソースは GoingOffline Waiting 状態になり、エージェントがリソースの定期監視を開始してリソースの monitor コマンドを挿入します。offline がタイムアウトすると、リソースに対し clean エントリポイントが呼び出されます。clean がタイムアウトまたは完了し、clean が正常に行われてリソースが Going Offline Waiting 状態に移行した場合、clean は定期監視を開始して Offline Wait カウントがリセットされます。

Going Offline Waiting 状態の監視が offline または intentional offline を返した場合、リソースは offline 状態に移行します。

GoingOffline Waiting 状態の監視が unknown または online を返した場合や、監視がタイムアウトした場合、次のようになります。

  • OfflineWait Limit に到達しない場合、リソースは GoingOffline Waiting 状態に移行します。

  • Offline Wait Limit に到達し、先にマウント解除されたリソースが呼び出されると、そのリソースは UNABLE_TO_OFFLINE とマーク付けされます。

  • CleantRetryLimit に到達しない場合、clean が呼び出されます。

  • CleantRetryLimit に到達した場合、リソースは ADMIN_WAIT 状態としてマーク付けされ、そのリソースは GoingOffline Waiting 状態に移行します。

  • ユーザーが「-clearadminwait」操作を開始した場合、ADMIN_WAIT フラグがリセットされます。ユーザーが「-clearaminwait -fault」操作を開始した場合、エージェントで ADMIN_WAIT フラグがリセットされます。

図: RestartLimit に到達し ManageFaults = ALL の場合のリソース障害

RestartLimit に到達し ManageFaults = ALL の場合のリソース障害

この図では、リソースに障害が発生し、RestartLimit に到達した場合に発生する動作を説明しています。 monitor エントリポイントが継続的にタイムアウトになり FaultOnMonitorTimeout に到達するか、monitor が offline を返して ToleranceLimit に到達した場合。

clean の再試行制限に達し、リソースに ADMIN_WAIT フラグが設定され、そのリソースが online 状態に移行した場合。再試行制限に達していない場合、エージェントが clean エントリポイントを呼び出します。

clean が失敗するかタイムアウトになった場合、エージェントは、障害が発生していないかのようにリソースを online 状態に設定し、定期監視を開始します。clean が正常に終了した場合は、リソースが Going Offline Waiting 状態になり定期監視が開始され、エージェントは次の monitor を待機します。

clean が正常に終了した場合は、リソースが GoingOffline Waiting 状態になり、エージェントは次の monitor を待機します。

  • monitoronline を報告した場合、リソースは障害が発生していないかのように online に戻ります。monitoroffline を返した場合は、リソースが offline 状態になり、FAULTED とマーク付けされます。monitor が IO を返した場合は、リソースが offline 状態になります。

  • monitor が unknown を返すかタイムアウトになった場合、エージェントはリソースを Going Offline Waiting 状態に戻し、エンジンに UNABLE_TO_OFFLINE フラグを設定します。

メモ:

clean が成功した場合、エージェントはリソースを GoingOfflineWait へ移行し、faulted とマーク付けします。GoingOfflineWaiting の監視が online を返した場合、リソースは online 状態に移行します。これは、エンジンはリソースが offline 状態に移行することを期待しておらず、GoingOfflineWaiting 状態がエージェントにより clean な成功の結果として設定されたためです。

図: RestartLimit に到達せず、ManageFault = ALL の場合のリソース障害

RestartLimit に到達せず、ManageFault = ALL の場合のリソース障害

この図では、リソースに障害が発生し、RestartLimit に到達していない場合に発生する動作を説明しています。 monitor エントリポイントが連続してタイムアウトになり、FaultOnMonitorTimeout に到達するか、monitor が offline を返して ToleranceLimit に到達した場合、エージェントは clean counter をチェックし、clean エントリポイントが呼び出し可能かをチェックします。

CleantRetryLimit に到達した場合、リソースは ADMIN_WAIT フラグが設定され、そのリソースは online 状態に移行します。clean 再試行制限に到達しない場合、エージェントは clean エントリポイントを呼び出します。

  • clean が正常に終了した場合、リソースは Going Online 状態に置かれます。次に、online エントリポイントが実行され、リソースが再起動されます。「リソースのオンライン化」の図を参照してください。

  • clean が失敗するかタイムアウトになった場合、エージェントは、障害が発生していないかのようにリソースを Online 状態と設定されます。

リソースに障害が発生し、RestartLimit に達した場合の動作の説明については、「リソース障害(自動再起動なし)」の図を参照してください。

図: 永続的なリソースの監視

永続的なリソースの監視

monitoroffline を返し、ToleranceLimit に到達した場合は、リソースは Offline 状態になり、FAULTED として設定されます。monitor がタイムアウトして FaultOnMonitorTimeouts に到達した場合は、リソースは Offline 状態になり、FAULTED として設定されます。

図: リソースのクローズ

リソースのクローズ

この状態図は、リソースが Closing 状態に移行する可能性のあるすべての状態を示します。次の表は、リソースが Closing 状態に移行する可能性のあるさまざまな状態において実行されるアクションを示します。

状態

Action

Online から Closing

hastop - local - force または hares -delete または Enabled = 0(リソースが永続リソースの場合のみ)

Offline から Closing

Enabled = 0 または hastop - local または hastop - local - force または hares -delete

GoingOnlineWaiting

hastop - local - force または hares -delete

GoingOfflineWaiting

hastop - local - force または hares -delete

GoingMigrateWaiting

hastop - local - force または hares -delete

GoingOnline

hastop - local - force

GoingOffline

hastop - local - force

GoingMigrate

hastop - local - force

Probing

Enabled = 0 または hastop - local または hastop - local - force または hares - delete

図: リソースの移行

リソースの移行

移行処理は、仮想マシン(VM)がオンラインで VM オフラインであるターゲットシステムに移行される、ソースシステムから開始します。ソースシステムのエージェントが、エンジンからリソースの移行要求を受信すると、リソースが Going Migrate 状態になり、 migrate エントリポイントが呼び出されます。 migrate エントリポイントがリターンコード 255 が発生して失敗した場合、リソースは online 状態に戻り、以降操作の失敗がエンジンに通信されます。これは、移行操作を実行することができないことを示します。

エージェントフレームワークは 101 から 254 の範囲の戻り値を無視し、online 状態に戻ります。migrate エントリポイントが正常に完了するか、タイムアウトに到達した場合は、リソースは Going Migrate Waiting 状態に移行し、次の監視サイクルを待ちます。monitor は MonitorInterval の設定に従った頻度で呼び出します。 monitor が offline 状態に戻ると、リソースは offline 状態に移行し、ソースシステムの移行は完了したとみなされます。

offline 状態に移行した後でも、エージェントは MonitorInterval の設定に従った同じ監視頻度でリソースを監視し続けます。 これにより、VM のソースノードでの障害をすばやく検出できます。ただし、monitor エントリポイントがタイムアウトするか、online または unknown 状態が返された場合、リソースは MigrateWaitLimit リソースサイクルが完了するのを待機します。

MigrateWaitLimit 内の監視のうちのどれかが offline 状態を返した場合、リソースは offline 状態に移行し、これがエンジンに返されます。MigrateWaitLimit に到達した後で monitor エントリポイントがタイムアウトするか、online または unknown 状態が返された場合、ADMIN_WAIT フラグが設定されます。

リソースの移行操作がソースノードで成功した場合、ターゲットノードで、エージェントは監視頻度を OfflineMonitorInterval から MonitorInternal に変更し、完全移行の成功をすばやく検出できるようにします。ただし、MigrateWaitLimit に到達した後でもターゲットノードでリソースが online と検出されない場合、リソースは ADMIN_WAIT 状態に移行し、エージェントは OfflineMonitorInterval で設定した監視頻度にフェールバックします。

メモ:

: エージェントは、migrate エントリポイントがタイムアウトになるか、migrate エントリポイントのタイムアウト後の監視で、MigrateWaitLimit に到達した後でも online または unknown 状態を返した場合、clean を呼び出しません。問題解決後、ADMIN_WAIT フラグを手動でクリアする必要があります。

図: リソース障害: ManageFaults 属性 = ALL

リソース障害: ManageFaults 属性 = ALL

図: リソース障害(monitor のハング): ManageFaults 属性 = ALL

リソース障害(monitor のハング): ManageFaults 属性 = ALL