| 日本−日本語 |
|
|
|
![]() |
Serviceguard の管理 > 第4章 HA クラスタのプランニングと文書化パッケージ構成のプランニング |
|
パッケージのプランニングには、各グループの高可用性サービスに関する情報の収集作業が含まれます。
クラスタ上でパッケージが動作するためのインフラストラクチャの一部として、ボリュームグループ内で論理ボリュームを使用することが必要です。一方のノードからもう一方のノードへパッケージが移動するとき、移動前のノード上のディスクと同じディスクにあるデータにアクセスできなければなりません。このためには、ボリュームグループをアクティブ化してファイルシステムをマウントします。 Serviceguard では、高可用性アプリケーション、サービス、データは、共有バス上のボリュームグループに置かれます。ノードで障害が発生した場合、そのノードのアプリケーション、サービス、データを持つボリュームグループは、障害の発生したノード上で非アクティブ化され、引き継ぎノード上でアクティブ化されます。このような動作をさせるためには、ボリュームグループを構成して、障害の発生したノードから引き継ぎノードへボリュームグループを移動できるようにしなければなりません。 プランニングの一部として、以下の項目を決定する必要があります。
ボリュームグループ、論理ボリュームおよびファイルシステムのリストをパッケージごとに作成してください。同じファイルシステムに対して別のタイミングでアクセスする必要のあるノードを明示してください。 論理ボリューム名をカスタマイズして、デフォルトの論理ボリューム名 (lvol1、lvol2 など) 以外の名前を使用することをお勧めします。関連する高可用性アプリケーションを示す名前 (lvoldatabase など) を付けておくと、クラスタが管理しやすくなります。 各ノード上の、パッケージに関連するボリュームグループ、論理ボリューム、ファイルシステムに関する詳しい説明を記述したいときには、/etc/fstab ファイルにコメント行を追加します。データベースアプリケーションの例を以下に示します。 # /dev/vg01/lvoldb1 /applic1 vxfs defaults 0 1 # These six entries are # /dev/vg01/lvoldb2 /applic2 vxfs defaults 0 1 # for information purposes # /dev/vg01/lvoldb3 raw_tables ignore ignore 0 0 # only. They record the # /dev/vg01/lvoldb4 /general vxfs defaults 0 2 # logical volumes that # /dev/vg01/lvoldb5 raw_free ignore ignore 0 0 # exist for Serviceguard's # /dev/vg01/lvoldb6 raw_free ignore ignore 0 0 # HA package. Do not uncomment. 各ボリュームグループにエントリーを作成して、ファイルシステムまたは raw デバイス向けであることを明記してください。行をコメントアウト (例のように# 文字を使用) することを忘れないでください。
CVM または CFS を使っているフェイルオーバーパッケージでは、ボリュームグループとファイルシステムを扱うシステムマルチノードパッケージを構成します。
Veritas Cluster Volume Manager 3.5 は、クラスタのボリュームを管理するために、システムマルチノードパッケージ VxVM-CVM-pkg を使います。 CVM 3.5 と VxVM-CVM-pkg では、1 つのハートビートネットワークしか構成できません。複数のハートビートはサポートされていません。APA、Infiniband、VLAN インタフェースをハートビートネットワークとして使うこともできません。 Veritas Cluster Volume Manager 4.1 以降は、クラスタのボリュームを管理するために、システムマルチノードパッケージ SG-CFS-pkg を使います。 CVM 4.1 以降と SG-CFS-pkg を使うときには、複数のハートビートネットワーク、または待機 LAN のあるハートビートネットワークを 1 つ構成する必要があります。APA、Infiniband、VLAN インタフェースをハートビートネットワークとして使うことはできません。 Veritas Cluster Volume Manager Version 4.1 以降では、CFS (Veritas Cluster File System) の利用がサポートされています。 システムマルチノードパッケージ SG-CFS-pkg は、クラスタのボリュームを管理します。CFS マウントパッケージ SG-CFS-MP-id# と、CFS ディスクグループパッケージ SG-CFS-DG-id# の、2 つのマルチノードパッケージも使われます。マルチノードパッケージは、cfs ファミリーのコマンドを使って作成します。構成ファイルは編集しないでください。 CVM 4.1 以降と SG-CFS-pkg を使うときには、複数のハートビートネットワーク、または待機 LAN のあるハートビートネットワークを 1 つ構成する必要があります。APA、Infiniband、VLAN インタフェースをハートビートネットワークとして使うことはできません。 アプリケーションフェイルオーバーパッケージと非フェイルオーバーパッケージには、パッケージ依存関係のチェーンを作成します。
実行中のクラスタにパッケージを追加することができます。このプロセスについては、第7章 「クラスタとパッケージの管理」で説明しています。 パッケージを追加する際には、クラスタ構成ファイルで定義されている max_configured_packages の値を上回らないように注意してください (「クラスタ構成のパラメータ」を参照)。必要であれば、クラスタの稼働中にこのパラメータを変更することができます。 フェイルオーバーパッケージ (「パッケージのタイプ」を参照) は、障害の発生した LAN カードから同じ物理サブネット上の予備の LAN カードへ IP アドレスが切り替わるように構成することができます。この動作を有効にするには、 local_lan_failover_allowed パラメータを使います (yes がデフォルトで、有効という意味です)。 フェイルオーバーパッケージのフェイルオーバー動作を設定するために、動作していないパッケージを Serviceguard が自動的に起動する場所を決定する方針を定義します。さらに、一次ノードが使用可能になったときにパッケージを一次ノードに自動的に戻すかどうかを指定するフェイルバックポリシーを定義できます。 表 3-3 「パッケージフェイルオーバー動作」では、各種のフェイルオーバー動作とその動作を決定するためのパラメータの設定方法が説明されています。
Serviceguard では、EMS (Event Monitoring Service) リソースを構成する一連のパラメータが提供されています。これらは、resource_name、resource_polling_interval、resource_start、および resource_up_value です。パッケージが依存している各リソースについて、これらのパラメータをパッケージ構成ファイルに構成します。 resource_start パラメータは、Serviceguard が EMS リソースのリソース監視をいつ開始するかを決定します。resource_start には、automatic またはdeferred のいずれかを設定することができます。 Serviceguard は、Serviceguard のクラスタデーモンがノード上で起動されると、automatic リソースのリソース監視を自動的に開始します。 Serviceguard は、ノードの起動時にはdeferred リソースの監視は開始せず、パッケージの実行時にこれらのリソースの監視を開始します。 deferred リソースとautomatic リソースの構成方法の例を、次に示します。
Serviceguard A.11.17 から、パッケージは他のパッケージへの依存関係 (つまり、依存しているパッケージがノード上で実行されない限り、パッケージは起動されない) を持つことができるようになりました。 Serviceguard A.11.17 では、パッケージの依存関係は、Veritas Cluster File System (CFS) をサポートしているシステム上で CFS と共に使うために当社が提供しているマルチノードパッケージやシステムマルチノードパッケージなど、当社が指定した一部のアプリケーション用としてのみサポートされています。 Serviceguard A.11.18 では、パッケージの依存関係にこのような制限はなくなりました。第 6 章の「dependency_condition」で説明している条件に従えば、同じクラスタノード上で実行されている他の任意のパッケージに対して、パッケージの依存関係を設定できます。 あるパッケージが、他のパッケージが提供するサービスなしでは機能できない (または機能してはならない) 場合に、他のパッケージに対するパッケージの依存関係を設定してください。たとえば、pkg2 が管理しているデータベースへのリアルタイム Web インタフェースを pkg1 が実行しているとします。この場合、pkg1 は pkg2 に依存しているといえます。 パッケージ間の依存関係を設定するかどうかを検討する際には、以下の「規則」と「ガイドライン」を参考にしてください。 pkg1 を pkg2 に依存させたいとします。
priority パラメータを使うと、failover_policy がconfigured_node のフェイルオーバーパッケージのセットにおいて、1 つ以上のパッケージが他のパッケージに依存しているときに、起動、フェイルオーバー、およびフェイルバックの動作に影響を与えることができます。 優先順位の高いパッケージが、優先順位の低いパッケージをドラッグし、優先順位の高いパッケージに合ったノードで起動させたり、そのノードへ移動できるというのが、大まかな規則です。
他のパッケージに依存するパッケージが存在する場合でも、priority を設定する必要はありません。多くの場合、デフォルト値のno_priority で、ユーザーが期待する動作となります。たとえば、pkg1 が pkg2 に依存しており、どちらのパッケージの priority にもno_priority が設定されていて、この項で推奨したとおりに node_name や auto_run などの他のパラメータが設定されている場合、両方のパッケージを実行できるときには、pkg1 は通常、pkg2 の後に実行されます。これは、常識的な (最も望ましい) 動作です。 以下の例は、「failover_policy」がconfigured_node の 2 つのフェイルオーバーパッケージに適用される規則について示しています。 pkg1 が pkg2 に依存していて、node1、node2、および node3 が各パッケージの構成ファイルの「node_name」に一定の順序ですべて指定されており、また各パッケージの「failback_policy」にautomatic が設定されているものとします。
pkg1 が pkg2 に依存し、pkg1 の優先順位が pkg2 の優先順位以下で、pkg2 のノード順序が優先される場合。pkg2 のノード順序は、node1、node2、node3 とします。
pkg1 が pkg2 に依存し、pkg1 の優先順位が pkg2 の優先順位より高く、pkg1 のノード順序が優先される場合。pkg1 のノード順序は、node1、node2、node3 とします。
「ドラッグ規則」で分かるように、 pkg1 が pkg2 に依存している場合、pkg1 で障害が発生したときのフェイルオーバー (およびフェイルバック) が最も成功しやすくなるため、 pkg1 に高い優先順位を割り当てることは、場合によっては良い方法です。 ただし、パッケージの相対的な重要度も考慮する必要があります。ビジネスのかなめとなるデータベースを pkg2 が実行している場合は、依存しているアプリケーションパッケージに何が起こっても、データベースの実行に支障がない方がよいと考えられます。このような場合は、データベースパッケージを最高の優先順位とします。 優先順位が設定されていない場合、ドラッグ規則では、他パッケージから依存されているパッケージを、そのパッケージに依存しているパッケージよりも優先します。 依存するパッケージと依存されるパッケージの重要度が現実的にほぼ同じ場合は、依存する側のパッケージに高い優先順位を割り当ててください。同じでない場合は、重要なパッケージに高い優先順位を割り当てるか、両方のパッケージの優先順位をデフォルトのままとしてください。 また、パッケージの障害時に何が発生するかも考えなければなりません。他のパッケージがそのパッケージに依存している場合、Serviceguard はこれらのパッケージ (および、これらのパッケージに依存しているパッケージ) を停止します。この状況は、障害が発生したパッケージの優先順位にかかわらず発生します。 デフォルトでは、パッケージは起動されたときと逆の順序で停止されます。依存する側のパッケージの停止スクリプトがハングアップした場合、障害が発生したパッケージは自身の停止処理の完了を無限に待ちます。これにより、依存するすべてのパッケージが完全に停止する可能性が最も高くなりますが、ユーザーが期待する動作とは異なる可能性があります。この動作は、successor_halt_timeout パラメータを使って変更することができます (「successor_halt_timeout」を参照)。 successor_halt_timeout にゼロを設定すると、Serviceguard は依存する側のパッケージを、障害が発生したパッケージと同時に停止します。このパラメータに正の数を設定すると、Serviceguard は起動時と逆の順番でパッケージを停止しますが、successor_halt_timeout 秒後には、依存する側のパッケージが停止スクリプトを完了したかどうかにかかわらず、障害が発生したパッケージを停止させることができます。 モジュラースクリプトのパッケージ構成テンプレートにより、外部スクリプトを明示的に指定できます。このスクリプトは従来のスクリプトの CUSTOMER DEFINED FUNCTION に代わるもので、以下のいずれかの場合に実行できます。
このスクリプトは、cmcheckconf と cmapplyconf でパッケージを検証する際にも実行されるため、検証用のエントリーポイントを持たせる必要があります。以下の説明を参照してください。 1 つのパッケージは両方の種類のスクリプトを使うことができ、それぞれの種類のスクリプトを複数起動することができます。この場合、スクリプトは、パッケージ構成ファイルにリストされている順序 (パッケージのシャットダウン時には逆順) で実行されます。 外部スクリプトには、3 つのエントリーポイントstart、stop、およびvalidate が必要で、以下の値のいずれかで終了しなければなりません。
スクリプトは、パッケージを実行するパッケージマネージャまたはマスター制御スクリプトがエクスポートした環境変数の標準セット (パッケージ名SG_PACKAGE と、ローカルノード名SG_NODE を含む) を使うことができます。また、ログ関数や他のユーティリティ関数を取り込むための関数を呼び出すこともできます。このような関数の 1 つ、sg_source_pkg_env() を呼び出すと、pev_ パラメータ (「pev_」を参照) により構成された、パッケージ固有の環境変数を含め、このパッケージに構成されているすべてのパラメータにアクセスできます。 詳細は、$SGCONF/examples/external_script.template のテンプレートを参照してください。 以下に、サンプルのスクリプトを示します。このスクリプトでは、一部のアプリケーションを監視する Serviceguard サービスとして構成される、monitor.sh という別のスクリプトがあることを前提としています。monitor.sh スクリプト (ここには記載されていません) は、パッケージ構成ファイルで定義されている PEV_MONITORING_INTERVAL パラメータを使って、監視対象のアプリケーションを定期的にポーリングします。例を次に示します。 PEV_MONITORING_INTERVAL 60 サンプルスクリプトは検証時に、PEV_MONITORING_INTERVAL パラメータと監視サービスが適切に構成されていることを確認します。また、このスクリプトは起動時と停止時に、この時間間隔をログファイルに出力します。
アプリケーションと Serviceguard の統合についての詳細は、カスタマイズ可能なスクリプトのスイートが記載されているホワイトペーパー『 Framework for HP Serviceguard Toolkits』 を参照してください。このホワイトペーパーは、http://www.hp.com/go/softwaredepot から無償でダウンロードできる Serviceguard Developer’s Toolbox に含まれています。 パッケージから実行する外部スクリプトで、Serviceguard コマンド (cmmodpkg など) を使うことができます。ただし、これらのコマンドで、パッケージそのものとデータをやり取りしてはなりません。 Serviceguard コマンドが他のパッケージとデータをやり取りする場合は、コマンドループが発生しないように注意してください。コマンドループが発生するのは次のような場合です。pkg1 が実行したスクリプトが pkg2 の cmmodpkg -d を実行し、pkg2 が実行したスクリプトが pkg1 の cmmodpkg -d を実行するとします。pkg1 と pkg2 が同時に起動されると、pkg1 スクリプトは pkg2 に対して cmmodpkg を実行しようとします。ところがこの cmmodpkg は、pkg2 の起動が完了しなければ実行できません。一方 pkg2 スクリプトも pkg1 に対して cmmodpkg を実行しようとしますが、同様に、pkg2 は pkg1 の起動が完了しなければ実行できないので、コマンドループが発生します。 このようなコマンドループが発生しないように、すべてのパッケージ (特に、外部スクリプトで Serviceguard コマンドを使うパッケージ) に run_script_timeout と halt_script_timeout を指定しておくとよいでしょう。タイムアウトの指定をしていないときに上記のようなコマンドループが発生すると、クラスタがハングするなど、望ましくない状況が発生する可能性があります。 パッケージ構成ファイルを編集する前に、以下の情報を収集し、各パッケージのワークシートに記入してください。各パラメータについての詳細は、「パッケージのパラメータの説明」を参照してください。また、次のようなコマンドを使うと、完全なパッケージ構成ファイルを生成し、出力することができます。 cmmakepkg -m sg/all $SGCONF/sg-all
次の例に示すように、パッケージごとにパッケージ構成データを 1 つのワークシートに集めます。(未記入のワークシートは、付録 F 「プランニングワークシート」にあります。)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||