| 日本−日本語 |
|
|
|
![]() |
Serviceguard の管理 > 第3章 Serviceguard のソフトウェア構成要素パッケージの動作 |
|
パッケージとは、構成されたアプリケーションを Serviceguard が起動および停止する手段のことです。フェイルオーバーパッケージは Serviceguard のフェイルオーバー動作の単位でもあります。パッケージはサービス、ディスクボリュームおよび IP アドレスの集合であり、Serviceguard によって確実に使用できるように管理されます。1 つのクラスタあたり最大 150 パッケージまで可能なため、1 つのクラスタで合計 900 サービスまで使用することができます。 パッケージには 3 つの種類があります。
システムマルチノードパッケージは、当社が提供するアプリケーションでのみ利用できます。 フェイルオーバーパッケージは、マルチノードパッケージまたはシステムマルチノードパッケージに依存するように構成することができます。パッケージマネージャは、パッケージが依存するパッケージがそのノードで起動され動作中でないと、パッケージを起動することができません。 パッケージマネージャは、すべてのノードで実行を阻害する要因がある場合を除き、フェイルオーバーパッケージの実行の継続を試みます。フェイルオーバーパッケージが実行できない主な原因には、auto_run が無効になっているために Serviceguard がパッケージを起動できない、特定のノードでパッケージのノード切り替えが無効になっている、パッケージに設定されている依存関係が満たされていないなどがあります。あるノードで障害が発生したときに、パッケージの別のノードへの切り替えが有効になっていれば、依存関係が満たされている新しい場所で自動的に起動されます。このプロセスはパッケージ切り替えまたはリモート切り替えと呼びます。 フェイルオーバーパッケージは、構成ファイル内の最初の使用可能なノードで起動します。デフォルトでは、リスト内の次に使用可能なノードにフェイルオーバーします。障害が発生したフェイルオーバーパッケージを再起動するのに、必ずしも cmrunpkg コマンドを実行する必要はありません。多くの場合、cmmodpkg コマンドを使ってパッケージとノードの切り替えを有効にしておくのが最善の方法です。 パッケージを作成するときに、実行可能なノードのリストを指定します。システムマルチノードパッケージには、クラスタ内のすべてのクラスタノードを指定する必要があります。マルチノードパッケージとフェイルオーバーパッケージには、一部またはすべてのクラスタノードを指定します。 パッケージ構成ファイルの auto_run パラメータにyes が設定されていると、クラスタの起動時にパッケージが Serviceguard によって自動的に起動されます。システムマルチノードパッケージでは、auto_run パラメータにyes を設定しておく必要があります。フェイルオーバーパッケージで auto_run にno が設定されていると、クラスタの起動時にパッケージが Serviceguard によって自動的に起動されません。このような設定のパッケージでは、cmmodpkg コマンドを使って、明示的に有効にする必要があります。
フェイルオーバーパッケージの起動、実行中の動作、パッケージのライフサイクルのフェーズの一部については、図 3-13 「重要なイベントを示す従来のパッケージの時間表」を参照してください。
パッケージのライフサイクルにおける最も重要な段階を以下に示します。
まず、ノードが選択されます。このノードは、パッケージのノードリストに記述され、パッケージのフェイルオーバー方針に一致し、パッケージに必要なリソースが、選択したノード上で使用可能でなければなりません。1 つのリソースとして、パッケージに対して監視されるサブネットがあります。サブネットが使用できない場合、パッケージはこのノード上で起動できません。監視される外部リソースまたは特殊な目的のパッケージに依存するリソースもあります。監視の結果、構成されているリソースに対する値が許容範囲内にない場合には、パッケージは起動できません。 ノードが選択されると、そのノード上でパッケージを起動できるかどうかチェックが行われます。次に、選択したノード上で制御スクリプトにより、パッケージ用のサービスが起動されます。厳密には、選択したノード上で実行スクリプトを使って従来のパッケージを起動します。モジュラーパッケージは、マスター制御スクリプトが起動します。 パッケージマネージャは、特定のノードでのパッケージの起動を決定すると、パッケージを起動するスクリプトを起動します (つまり、パッケージの制御スクリプトまたはマスター制御スクリプトが、start パラメータを使って実行されます)。このスクリプトは、以下の手順を実行します。
途中のいずれかの手順で、エラーが発生すると、スクリプトが異常終了します (終了コードは 1 です)。たとえば、パッケージサービスが起動できない場合、制御スクリプトはエラーにより終了します。
run_script_timeout で指定した時間内に実行スクリプトの実行が終了しないと、パッケージマネージャによりスクリプトは強制終了されます。実行スクリプトの実行中、ログファイルにメッセージが書き込まれます。従来のパッケージでは、このログファイルは実行スクリプトと同じディレクトリにあり、実行スクリプトと同じ名前で拡張子が .log です。モジュラーパッケージでは、パス名は、パッケージ構成ファイルの script_log_file パラメータで設定します (「script_log_file」を参照)。正常に起動されると、パッケージの起動に関するエラーメッセージまたは警告と同様に、起動されたことがログに記録されます。
実行スクリプトを終了する際の終了コードは、パッケージの次の動作を決定します。正常終了とはパッケージの起動が正しく行われたことを意味しますが、他のすべての終了は起動動作が正しく終了しなかったことを意味します。
パッケージ制御スクリプトでは、cmrunserv コマンドにより個々のサービスが起動されます。このコマンドは、ファイル内に記述されている各サービスにつき 1 回実行されます。再起動回数は、各サービスに対して構成することができます。cmrunserv コマンドはこの回数をパッケージマネージャに渡し、サービスが異常終了した場合、サービスを該当数だけ再起動します。以下の設定は、従来のパッケージでの一般的な設定です。モジュラーパッケージでのサービスの構成についての詳細は、「service_name」から始まる説明と、パッケージ構成テンプレートファイル内のコメントを参照してください。 SERVICE_RESTART[0]=" " ; 再起動なし SERVICE_RESTART[0]="-r <n>" ; <n>回再起動 SERVICE_RESTART[0]="-R" ; 無制限に再起動
クラスタサービスの正常動作中、パッケージマネージャは以下のものを継続して監視します。
一部の障害ではローカルスイッチが発生することがあります。たとえば、特定の LAN カードに障害が発生し、待機状態の LAN がそのサブネットに構成されている場合、ネットワークマネージャは正常な LAN カードに切り替えます。サービスが異常終了しても、そのサービスの再起動パラメータの値が 1 以上に設定されていれば、パッケージを停止することなく、設定した再起動回数までサービスが再起動されます。 EMS リソースにパッケージが依存している場合には、イベントの発生がトリガーされるとパッケージは停止します。 正常動作の間すべてのサービスが実行中であれば、cmviewcl コマンドで出力された「スクリプトパラメータ」セクションで、サービスの状況を参照することができます。 障害が発生したらどうなるでしょうか? サービスが異常終了して再起動できない場合、サブネットが異常終了して待機状態のサブネットがない場合、構成されたリソースが異常終了した場合、あるいは特殊な目的のパッケージに対する依存関係が満たされない場合は、使用中のノードでフェイルオーバーパッケージが停止し、パッケージ切り替えフラグの設定により、別のノードで再起動されます。マルチノードパッケージまたはシステムマルチノードパッケージで障害が発生すると、それに依存しているすべてのパッケージも障害状態になります。 パッケージの停止は、通常、パッケージ停止スクリプトが実行されることを意味します (次の項を参照してください)。ただし、フェイルオーバーパッケージの構成情報で、異常終了したサービスの service_fail_fast_enabled フラグがyes に設定されている場合、異常が検出されるとすぐにノードが停止します。このフラグが設定されていない場合、サービスの損失により、停止スクリプトが実行されてパッケージを停止します。 auto_run をyes に設定した場合、起動の条件をすべて満たしていれば、別の使用可能なノードでパッケージが起動されます。auto_run をno に設定した場合は、パッケージを別のノードで起動することなく、そのパッケージが停止されます。
Serviceguard の cmhaltpkg コマンドは、パッケージ停止スクリプトの実行によって、特定のパッケージで実行中のサービスを停止します。これにより、パッケージのシャットダウンが行われ、パッケージの自動起動 (AUTO_RUN) を無効にします。 マルチノードパッケージまたはシステムマルチノードパッケージは、これらのパッケージに依存しているすべてのパッケージが停止していない限り、停止することはできません。cmviewcl を使って、依存しているパッケージの状態を確認してください。たとえば、pkg1 と pkg2 が PKGa に依存している場合には、PKGa を停止する前に pkg1 と pkg2 の両方を停止する必要があります。
cmmodpkg コマンドは、パッケージの停止には使用できませんが、特定のノードまたはすべてのノードで切り替えを無効にすることはできます。切り替えを無効にしていると、パッケージの実行は継続できますが、現在実行中のノードで実行を停止しても、他のノードで再起動することはできません。 パッケージマネージャが、フェイルオーバーパッケージが依存しているサービスまたはパッケージの異常を検出した場合や、特定のパッケージで cmhaltpkg コマンドが実行された場合、パッケージマネージャは停止スクリプトを起動します。つまり、stop パラメータを指定して、パッケージの制御スクリプトまたはマスター制御スクリプトが実行されます。このスクリプトは以下の手順を実行します (図 3-15 「停止スクリプトを実行するための従来のパッケージの時間表」も参照してください)。
途中のいずれかの段階で、エラーが発生すると、スクリプトが異常終了します (終了コードは 1 です)。また、HALT_SCRIPT_TIMEOUT で指定した時間内に停止スクリプトの実行が終了しないと、パッケージマネージャによりスクリプトは強制終了されます。停止スクリプトの実行中、ログファイルにメッセージが書き込まれます。従来のパッケージでは、このログファイルは実行スクリプトと同じディレクトリにあり、実行スクリプトと同じ名前で拡張子が .log です。モジュラーパッケージでは、パス名は、パッケージ構成ファイルの script_log_file パラメータで設定されます (「script_log_file」を参照)。正常に終了すると、パッケージの停止に関するエラーメッセージまたは警告と同様にログに終了が記録されます。
パッケージが他のノードへ移動できるかどうかは、停止スクリプトを終了する際の終了状況によって変わります。使用できる終了コードを以下に示します。
表 3-4 「フェイルオーバーパッケージのエラー条件およびパッケージ移動」に、フェイルオーバーパッケージのエラー条件、フェイルファースト設定およびパッケージ移動で発生する可能性がある組み合わせを示します。 表 3-4 フェイルオーバーパッケージのエラー条件およびパッケージ移動
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||