本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
Serviceguard の管理 > 第3章 Serviceguard のソフトウェア構成要素

パッケージの動作

≫ 

テクニカル ドキュメント

PDF版
関連ドキュメント
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

パッケージとは、構成されたアプリケーションを Serviceguard が起動および停止する手段のことです。フェイルオーバーパッケージは Serviceguard のフェイルオーバー動作の単位でもあります。パッケージはサービス、ディスクボリュームおよび IP アドレスの集合であり、Serviceguard によって確実に使用できるように管理されます。1 つのクラスタあたり最大 150 パッケージまで可能なため、1 つのクラスタで合計 900 サービスまで使用することができます。

パッケージの実行

パッケージには 3 つの種類があります。

  • フェイルオーバーパッケージは、最も一般的なパッケージです。同時には 1 台のノードでしか動作しません。障害が発生すると、構成ファイルに記述されている別のノードに移動します。移動できるノードが複数ある場合には、 パッケージマネージャはフェイルオーバー方針に従ってパッケージを起動するノードを決定します。

  • システムマルチノードパッケージは、すべてのアクティブなクラスタノードで同時に動作します。このパッケージはすべてのノードで起動/停止し、個々のノードで起動/停止することはできません。

  • マルチノードパッケージは、複数のノードで同時に動作します。Serviceguard は、auto_runyes が設定されていると、構成ファイルに記述されているすべてのノードでマルチノードパッケージを起動します。このパッケージは、すべてのノードでも、個々のノードでも起動/停止することができます。停止するには、ユーザーコマンド (cmhaltpkg) を使います。また、サービス、EMS リソース、サブネットなどのパッケージコンポーネントで障害が発生した場合には、Serviceguard が自動的に停止します。

システムマルチノードパッケージは、当社が提供するアプリケーションでのみ利用できます。

フェイルオーバーパッケージは、マルチノードパッケージまたはシステムマルチノードパッケージに依存するように構成することができます。パッケージマネージャは、パッケージが依存するパッケージがそのノードで起動され動作中でないと、パッケージを起動することができません。

パッケージマネージャは、すべてのノードで実行を阻害する要因がある場合を除き、フェイルオーバーパッケージの実行の継続を試みます。フェイルオーバーパッケージが実行できない主な原因には、auto_run が無効になっているために Serviceguard がパッケージを起動できない、特定のノードでパッケージのノード切り替えが無効になっている、パッケージに設定されている依存関係が満たされていないなどがあります。あるノードで障害が発生したときに、パッケージの別のノードへの切り替えが有効になっていれば、依存関係が満たされている新しい場所で自動的に起動されます。このプロセスはパッケージ切り替えまたはリモート切り替えと呼びます。

フェイルオーバーパッケージは、構成ファイル内の最初の使用可能なノードで起動します。デフォルトでは、リスト内の次に使用可能なノードにフェイルオーバーします。障害が発生したフェイルオーバーパッケージを再起動するのに、必ずしも cmrunpkg コマンドを実行する必要はありません。多くの場合、cmmodpkg コマンドを使ってパッケージとノードの切り替えを有効にしておくのが最善の方法です。

パッケージを作成するときに、実行可能なノードのリストを指定します。システムマルチノードパッケージには、クラスタ内のすべてのクラスタノードを指定する必要があります。マルチノードパッケージとフェイルオーバーパッケージには、一部またはすべてのクラスタノードを指定します。

パッケージ構成ファイルの auto_run パラメータにyes が設定されていると、クラスタの起動時にパッケージが Serviceguard によって自動的に起動されます。システムマルチノードパッケージでは、auto_run パラメータにyes を設定しておく必要があります。フェイルオーバーパッケージで auto_runno が設定されていると、クラスタの起動時にパッケージが Serviceguard によって自動的に起動されません。このような設定のパッケージでは、cmmodpkg コマンドを使って、明示的に有効にする必要があります。

注記: クラスタの実行中にパッケージを構成した場合、cmapplyconf コマンドが完了した後すぐにはパッケージが起動されません。クラスタを停止および再起動せずにパッケージを起動するには、cmrunpkg コマンドまたは cmmodpkg コマンドを実行する必要があります。

フェイルオーバーパッケージの起動、実行中の動作、パッケージのライフサイクルのフェーズの一部については、図 3-13 「重要なイベントを示す従来のパッケージの時間表」を参照してください。

注記: この図は、従来のパッケージにのみ適用されます。モジュラースクリプトでの相違点は、図の下の説明文に示します。

図 3-13 重要なイベントを示す従来のパッケージの時間表

重要なイベントを示す従来のパッケージの時間表

パッケージのライフサイクルにおける最も重要な段階を以下に示します。

  1. 制御スクリプトの起動前 (モジュラーパッケージの場合は、マスター制御スクリプト)

  2. 実行スクリプトの実行中 (モジュラーパッケージの場合は、パッケージを起動する制御スクリプトの実行中)

  3. サービスの実行中

  4. サービス、サブネットまたは監視リソースの異常終了時、または依存関係が満たされていない場合

  5. 停止スクリプトの実行中 (モジュラーパッケージの場合は、パッケージを停止する制御スクリプトの実行中)

  6. パッケージまたはノードのコマンドによる停止時

  7. ノードの障害発生時

制御スクリプトの起動前

まず、ノードが選択されます。このノードは、パッケージのノードリストに記述され、パッケージのフェイルオーバー方針に一致し、パッケージに必要なリソースが、選択したノード上で使用可能でなければなりません。1 つのリソースとして、パッケージに対して監視されるサブネットがあります。サブネットが使用できない場合、パッケージはこのノード上で起動できません。監視される外部リソースまたは特殊な目的のパッケージに依存するリソースもあります。監視の結果、構成されているリソースに対する値が許容範囲内にない場合には、パッケージは起動できません。

ノードが選択されると、そのノード上でパッケージを起動できるかどうかチェックが行われます。次に、選択したノード上で制御スクリプトにより、パッケージ用のサービスが起動されます。厳密には、選択したノード上で実行スクリプトを使って従来のパッケージを起動します。モジュラーパッケージは、マスター制御スクリプトが起動します。

実行スクリプトの実行中

パッケージマネージャは、特定のノードでのパッケージの起動を決定すると、パッケージを起動するスクリプトを起動します (つまり、パッケージの制御スクリプトまたはマスター制御スクリプトが、start パラメータを使って実行されます)。このスクリプトは、以下の手順を実行します。

  1. external_pre_script があれば実行します (モジュラーパッケージのみ: 「external_pre_script」を参照)。

  2. ボリュームグループまたはディスクグループをアクティブにします。

  3. ファイルシステムをマウントします。

  4. ノードの LAN カードにパッケージの IP アドレスを割り当てます (フェイルオーバーパッケージのみ)。

  5. ユーザー定義の実行コマンド (従来のパッケージのみ: 「パッケージ制御スクリプトへのユーザー定義関数の追加」を参照)、または external_script (モジュラーパッケージのみ: 「external_script」を参照) を実行します。

  6. 各パッケージサービスを起動します。

  7. 遅延起動用に特別にマークされたパッケージに必要な EMS (Event Monitoring Service) リソースを起動します。

  8. 終了コードゼロ (0) で終了します。

図 3-14 パッケージの時間表 (従来のパッケージ)

パッケージの時間表 (従来のパッケージ)

途中のいずれかの手順で、エラーが発生すると、スクリプトが異常終了します (終了コードは 1 です)。たとえば、パッケージサービスが起動できない場合、制御スクリプトはエラーにより終了します。

注記: この図は、従来のパッケージに関するものです。モジュラーパッケージも、前述のとおり、外部スクリプトと「プリスクリプト」を実行します。

run_script_timeout で指定した時間内に実行スクリプトの実行が終了しないと、パッケージマネージャによりスクリプトは強制終了されます。実行スクリプトの実行中、ログファイルにメッセージが書き込まれます。従来のパッケージでは、このログファイルは実行スクリプトと同じディレクトリにあり、実行スクリプトと同じ名前で拡張子が .log です。モジュラーパッケージでは、パス名は、パッケージ構成ファイルの script_log_file パラメータで設定します (「script_log_file」を参照)。正常に起動されると、パッケージの起動に関するエラーメッセージまたは警告と同様に、起動されたことがログに記録されます。

注記: パッケージの実行スクリプトの作業が完了すると、そのスクリプトは終了します。つまり、パッケージが正常に起動されるとスクリプトは再び実行されません。スクリプトの終了後、スクリプトで起動されたサービスの PID は、パッケージマネージャで直接監視されます。サービスが停止すると、パッケージマネージャはパッケージの停止スクリプトを実行します。または service_fail_fast_enabledyes に設定されている場合は、パッケージマネージャはパッケージが実行されているノードを停止します。サービスの再起動の回数がパッケージ制御スクリプトで指定されている場合、パッケージの実行スクリプトを再度実行することなく、再起動の最大回数までサービスが再起動されます。

実行スクリプトの正常終了および異常終了

実行スクリプトを終了する際の終了コードは、パッケージの次の動作を決定します。正常終了とはパッケージの起動が正しく行われたことを意味しますが、他のすべての終了は起動動作が正しく終了しなかったことを意味します。

  • 0― 正常終了。パッケージは正常に起動し、すべてのサービスがこのノードで実行されています。

  • 1― 異常終了。これはno_restart 終了とも呼びます。パッケージは、すべての起動手順を正常に終了しませんでした。サービスが強制終了され、パッケージは他のノードへフェイルオーバーすることができません。

  • 2― 代替終了。これはrestart 終了とも呼びます。エラーが発生したが、パッケージは別のノードで起動することを許可されます。エラーが発生しても別のノードでパッケージを起動できる場合は、ユーザー定義のプロシージャで代替終了を使用することができます。restart 終了のパッケージは、ローカルノードで実行することはできませんが、他のノードで実行することができます。

  • タイムアウト ― run_script_timeout で指定された時間が経過した場合に発生する、別のタイプの終了です。このような状況では、パッケージは強制終了され、全体で使用不能となります。ただし、現在使用しているノードでは使用不能となりません。パッケージスクリプトは、LVM ボリュームグループ、VxVM ディスクグループ、パッケージのマウントポイントなどのいくつかのリソースをクリーンアップできなかった可能性があります。パッケージをノード上で起動する前に、パッケージのリソースをクリーンアップする必要がないかどうかを確認してください。

cmrunserv を使ったサービスの起動

パッケージ制御スクリプトでは、cmrunserv コマンドにより個々のサービスが起動されます。このコマンドは、ファイル内に記述されている各サービスにつき 1 回実行されます。再起動回数は、各サービスに対して構成することができます。cmrunserv コマンドはこの回数をパッケージマネージャに渡し、サービスが異常終了した場合、サービスを該当数だけ再起動します。以下の設定は、従来のパッケージでの一般的な設定です。モジュラーパッケージでのサービスの構成についての詳細は、「service_name」から始まる説明と、パッケージ構成テンプレートファイル内のコメントを参照してください。

SERVICE_RESTART[0]=" "        ; 再起動なし
SERVICE_RESTART[0]="-r <n>"   ; <n>回再起動
SERVICE_RESTART[0]="-R"       ; 無制限に再起動
注記: 再起動の <n> を設定し、service_fail_fast_enabledyes に設定した場合、再起動の試行に <n> 回失敗した後にフェイルファーストが実行されます。サービスに対して service_restart"-R"に設定し、service_fail_fast_enabledyes に設定しても意味がありません

サービスの実行中

クラスタサービスの正常動作中、パッケージマネージャは以下のものを継続して監視します。

  • サービスのプロセス ID

  • パッケージ構成ファイル内で監視用に構成されたサブネット

  • パッケージが依存する、構成されたリソース

一部の障害ではローカルスイッチが発生することがあります。たとえば、特定の LAN カードに障害が発生し、待機状態の LAN がそのサブネットに構成されている場合、ネットワークマネージャは正常な LAN カードに切り替えます。サービスが異常終了しても、そのサービスの再起動パラメータの値が 1 以上に設定されていれば、パッケージを停止することなく、設定した再起動回数までサービスが再起動されます。

EMS リソースにパッケージが依存している場合には、イベントの発生がトリガーされるとパッケージは停止します。

正常動作の間すべてのサービスが実行中であれば、cmviewcl コマンドで出力された「スクリプトパラメータ」セクションで、サービスの状況を参照することができます。

サービス、サブネットまたは監視リソースの異常終了時、または依存関係が満たされない場合

障害が発生したらどうなるでしょうか? サービスが異常終了して再起動できない場合、サブネットが異常終了して待機状態のサブネットがない場合、構成されたリソースが異常終了した場合、あるいは特殊な目的のパッケージに対する依存関係が満たされない場合は、使用中のノードでフェイルオーバーパッケージが停止し、パッケージ切り替えフラグの設定により、別のノードで再起動されます。マルチノードパッケージまたはシステムマルチノードパッケージで障害が発生すると、それに依存しているすべてのパッケージも障害状態になります。

パッケージの停止は、通常、パッケージ停止スクリプトが実行されることを意味します (次の項を参照してください)。ただし、フェイルオーバーパッケージの構成情報で、異常終了したサービスの service_fail_fast_enabled フラグがyes に設定されている場合、異常が検出されるとすぐにノードが停止します。このフラグが設定されていない場合、サービスの損失により、停止スクリプトが実行されてパッケージを停止します。

auto_runyes に設定した場合、起動の条件をすべて満たしていれば、別の使用可能なノードでパッケージが起動されます。auto_runno に設定した場合は、パッケージを別のノードで起動することなく、そのパッケージが停止されます。

注記: パッケージがサブネットに依存しており、一次ノード上のサブネットに障害が発生すると、パッケージはシャットダウンを開始します。このサブネットがすぐに (パッケージが引き継ぎノード上で再起動される前に) 回復すると、このパッケージは一次ノード上で再起動できるため、他のノードには切り替わりません。

コマンドによるパッケージの停止時

Serviceguard の cmhaltpkg コマンドは、パッケージ停止スクリプトの実行によって、特定のパッケージで実行中のサービスを停止します。これにより、パッケージのシャットダウンが行われ、パッケージの自動起動 (AUTO_RUN) を無効にします。

マルチノードパッケージまたはシステムマルチノードパッケージは、これらのパッケージに依存しているすべてのパッケージが停止していない限り、停止することはできません。cmviewcl を使って、依存しているパッケージの状態を確認してください。たとえば、pkg1 と pkg2 が PKGa に依存している場合には、PKGa を停止する前に pkg1 と pkg2 の両方を停止する必要があります。

注記: -n <nodename> オプションを指定して cmhaltpkg コマンドを実行した場合、そのノードで実行されている場合のみ、パッケージが停止します。

cmmodpkg コマンドは、パッケージの停止には使用できませんが、特定のノードまたはすべてのノードで切り替えを無効にすることはできます。切り替えを無効にしていると、パッケージの実行は継続できますが、現在実行中のノードで実行を停止しても、他のノードで再起動することはできません。

停止スクリプトの実行中

パッケージマネージャが、フェイルオーバーパッケージが依存しているサービスまたはパッケージの異常を検出した場合や、特定のパッケージで cmhaltpkg コマンドが実行された場合、パッケージマネージャは停止スクリプトを起動します。つまり、stop パラメータを指定して、パッケージの制御スクリプトまたはマスター制御スクリプトが実行されます。このスクリプトは以下の手順を実行します (図 3-15 「停止スクリプトを実行するための従来のパッケージの時間表」も参照してください)。

  1. 以前に起動されている遅延リソースを停止します。

  2. すべてのパッケージサービスを停止します。

  3. ユーザー定義の停止コマンド (従来のパッケージのみ)、または external_script (モジュラーパッケージのみ: 「external_pre_script」を参照) を実行します。

  4. ノードの LAN カードからパッケージ IP アドレスを削除します。

  5. ファイルシステムのマウントを解除します。

  6. ボリュームグループを非アクティブ化します。

  7. 終了コード、ゼロ (0) で終了します。

  8. external_pre_script があれば実行します (モジュラーパッケージのみ: 「external_pre_script」を参照)。

図 3-15 停止スクリプトを実行するための従来のパッケージの時間表

停止スクリプトを実行するための従来のパッケージの時間表

途中のいずれかの段階で、エラーが発生すると、スクリプトが異常終了します (終了コードは 1 です)。また、HALT_SCRIPT_TIMEOUT で指定した時間内に停止スクリプトの実行が終了しないと、パッケージマネージャによりスクリプトは強制終了されます。停止スクリプトの実行中、ログファイルにメッセージが書き込まれます。従来のパッケージでは、このログファイルは実行スクリプトと同じディレクトリにあり、実行スクリプトと同じ名前で拡張子が .log です。モジュラーパッケージでは、パス名は、パッケージ構成ファイルの script_log_file パラメータで設定されます (「script_log_file」を参照)。正常に終了すると、パッケージの停止に関するエラーメッセージまたは警告と同様にログに終了が記録されます。

注記: この図は、従来のパッケージにのみ適用されます。モジュラースクリプトでの相違点は、図の上の説明文に示しています。

停止スクリプトの正常終了および異常終了

パッケージが他のノードへ移動できるかどうかは、停止スクリプトを終了する際の終了状況によって変わります。使用できる終了コードを以下に示します。

  • 0― 正常終了。パッケージは正常に停止し、このノード上のすべてのサービスが終了しています。

  • 1― 異常終了。これはno_restart 終了とも呼びます。パッケージは、正常に終了しませんでした。サービスが強制終了され、パッケージは全体で使用不能となります。ただし使用中のノードでは使用不能とはなりません。

  • タイムアウト ― halt_script_timeout で指定された時間が経過した場合に発生する、別のタイプの終了です。このような状況では、パッケージは強制終了され、全体で使用不能となります。ただし、現在使用しているノードでは使用不能となりません。パッケージスクリプトは、LVM ボリュームグループ、VxVM ディスクグループ、パッケージのマウントポイントなどのいくつかのリソースをクリーンアップできなかった可能性があります。パッケージをノード上で起動する前に、パッケージのリソースをクリーンアップする必要がないかどうかを確認してください。

パッケージ制御スクリプトのエラー条件および終了条件

表 3-4 「フェイルオーバーパッケージのエラー条件およびパッケージ移動」に、フェイルオーバーパッケージのエラー条件、フェイルファースト設定およびパッケージ移動で発生する可能性がある組み合わせを示します。

表 3-4 フェイルオーバーパッケージのエラー条件およびパッケージ移動

パッケージエラー条件

結果

エラーまたは終了コード

ノードフェイルファーストが使用可能か

サービスフェイルファーストが使用可能か

エラー後の一次ノード上の HP-UX ステータス

エラーまたは終了後の停止スクリプトの実行

エラー後一次ノードでパッケージが実行可能か

代替ノードでパッケージが実行可能か

サービス障害

はい

はい

システムリセット

いいえ

N/A (システムリセット)

はい

サービス障害

いいえ

はい

システムリセット

いいえ

N/A (システムリセット)

はい

サービス障害

はい

いいえ

実行中

はい

いいえ

はい

サービス障害

いいえ

いいえ

実行中

はい

いいえ

はい

実行スクリプト (終了 1)

はい/

いいえ

はい/

いいえ

実行中

いいえ

変更なし

いいえ

実行スクリプト (終了 2)

はい

はい/

いいえ

システムリセット

いいえ

N/A (システムリセット)

はい

実行スクリプト (終了 2)

いいえ

はい/

いいえ

実行中

いいえ

いいえ

はい

実行スクリプト (タイムアウト)

はい

はい/

いいえ

システムリセット

いいえ

N/A (システムリセット)

はい

実行スクリプト (タイムアウト)

いいえ

はい/

いいえ

実行中

いいえ

変更なし

いいえ

停止スクリプト (終了 1)

はい

はい/

いいえ

実行中

N/A

はい

いいえ

停止スクリプト (終了 1)

いいえ

はい/

いいえ

実行中

N/A

はい

いいえ

停止スクリプト (タイムアウト)

はい

はい/

いいえ

システムリセット

N/A

N/A (システムリセット)

はい。ただし cmhaltpkg コマンドの実行後にタイムアウトが発生しない場合。

停止スクリプト (タイムアウト)

いいえ

はい/

いいえ

実行中

N/A

はい

いいえ

サービス障害

はい/

いいえ

はい

システムリセット

いいえ

N/A (システムリセット)

はい

サービス障害

はい/

いいえ

いいえ

実行中

はい

いいえ

はい

ネットワークの損失

はい

はい/

いいえ

システムリセット

いいえ

N/A (システムリセット)

はい

ネットワークの損失

いいえ

はい/

いいえ

実行中

はい

はい

はい

監視リソースの損失

はい

はい/

いいえ

システムリセット

いいえ

N/A (システムリセット)

はい

監視リソースの損失

いいえ

はい/

いいえ

実行中

はい

はい (リソースが遅延リソースではない場合)。いいえ (リソースが遅延リソースの場合)。

はい

依存するパッケージの障害

はい/

いいえ

はい/

いいえ

実行中

はい

はい (依存関係が再び満たされた場合)

はい (依存関係が満たされている場合)

 

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1995-2007 Hewlett-Packard Development Company, L.P.