MC/ServiceGuardとは
MC/ServiceGuardは、ヒューレット・パッカード(HP)が提供する、
HP-UXおよび
Linux環境向けの高可用性クラスタリング
ソフトウェアです。この
ソフトウェアは、システムの可用性を向上させるために設計されており、特にエンタープライズレベルのシステムで重要な役割を果たしています。
現在の最新バージョンは11.19(2009年4月リリース)で、
HP-UXのバージョンに合わせられています。バージョン11.15以降は、正式名称がServiceguardまたはHP Serviceguardに変更され、旧称はMC/ServiceGuardまたはMulti-Computer/ServiceGuardでした。
商用UNIX系高可用クラスタ構築において、IBM社のHACMPと並ぶ実績を持ち、2009年4月には、HPはServiceGuard for
Linux 11.19を最終バージョンとしましたが、2012年にProject Odyssayを発表し、Serviceguard for
Linuxの再販を決定しました。
実装・動作仕様
相互監視
クラスターを構成する各ノードの稼働監視にはLANが使用されます。ノード間でハートビートパケットを送り合い、各ノードの健全性を相互に確認します。クラスターに参加するノードのうち、1台がマスターノードとして選出され、クラスター管理
デーモンが動作します。このマスターノードの選出は、各ノードからの投票によって決定されます。
2ノードクラスターの場合、スプリットブレインシンドローム(二重故障)を回避するために、共有ディスク上のLVM管理領域をタイブレーカーとして使用し、生存ノードを決定します。
一般的に、ハートビートを送信するためのインターコネクトには、ネットワークアダプタの多重設定が推奨されています。これにより、TCP/IPの
ソフトウェア的な
単一障害点(SPOF)を回避できます。また、インターネットスーパーサーバ(inetd)を介してTCP/IPの自己チェックを行う機能も備えています。
タイブレーク機構
2ノードクラスターでは、どちらかのノードが停止した場合、ノード残存率が50%となり、タイブレーカーが必須です。それ以上の台数でクラスターを構成する場合でも、タイブレーカーの使用が推奨されます。
ServiceGuardでは、以下の2つのタイブレーカーの実装をサポートしています。
1.
ロックディスク方式: ディスクへのアクセスを最初に成功させたノードを生存させる方式です。この方式は、SCSIエンクロージャやFC、iSCSIなどのストレージ接続にも対応し、汎用性に優れています。ロックディスクにはLVMで認識される任意のディスクを使用でき、必要なディスク容量も最小限に抑えられます。
2.
クォーラムサーバ方式: サバイバルノードの決定をクォーラムサーバに委ねる方式です。ロックディスク方式とは異なり、物理的なディスク書き込みが発生しないため、高速にサバイバルノードを決定できます。これにより、クラスタ再構成時間を短縮し、ダウンタイムを最小限に抑えることが可能です。この方式を利用するためには、『HP Serviceguard Extension for Faster Failover』という拡張モジュールが必要です。
ServiceGuardでは、クラスターで稼働する
サービスやアプリケーションを「パッケージ」という単位で管理します。パッケージには、論理IPアドレス(またはリロケータブルIPアドレス)と共有ディスクが割り当てられ、クラスターをLANの外から見たときには、仮想的な1台の
コンピューターのように見えます。
1つのパッケージに複数の論理IPアドレスと共有ディスクを含めることが可能ですが、共有ディスクはノード間で排他制御され、パッケージが使用中は他のノードからアクセスできません。
各種パッケージは
シェルスクリプトでラップするだけでクラスターに実装できるため、既存システムの高可用化が比較的容易です。この柔軟性から、既存
サービスの改修が難しい金融・証券系の基幹システムで高いシェアを誇ります。アプリケーションのロジックとクラスタのロジックを分離できるため、大規模なアプリケーションの高可用化にも適しています。
フェイルオーバ判断
フェイルオーバー条件は、システムの可用性レベルに応じて厳密に規定されます。フェイルオーバーは
サービスの一時的な停止を伴うため、その条件は専門家と慎重に検討する必要があります。ServiceGuardは、標準機能に加えて、
シェルスクリプトによるカスタマイズにより、柔軟なフェイルオーバー判断が可能です。
サービス停止によるフェイルオーバ
ServiceGuardで起動する
サービスを監視する
サービスを定義することで、特定の
サービスが停止した場合にフェイルオーバーを実行できます。例えば、
シェルスクリプトで
プロセスの存在を確認するコードを記述することで、
サービスの監視が可能です。
ネットワーク断絶によるフェイルオーバ
サービス提供に必要なLANを監視し、断絶が発生した場合にフェイルオーバーを実行できます。ServiceGuardの「ローカルスイッチ」機能でLANポートを冗長化している場合は、全ての冗長化ポートが断絶した場合にフェイルオーバーが行われます。
ハートビート断絶によるフェイルオーバ
ハートビートの断絶は、ノードが互いに相手の停止を認識するトリガーになります。各ノードはタイブレーカーへのアクセスを試み、失敗したノードは強制的に再起動され、保持していたリソースを解放します。
サービスを実行しているノードがクラスターロックの獲得に失敗した場合、フェイルオーバーが発生し、ノード自体が停止します。
その他のフェイルオーバ
EMS(イベント管理システム)と呼ばれる
ハードウェア/
ソフトウェア資源の健全性や動作状況をチェックするDiag系フレームワークと連携することで、より高度な健全性チェックやフェイルオーバー判断が可能です。
販売状況
証券・金融系での人気により、国内ベンダーによる
OEM化が進み、NECや
日立製作所において多数のライセンスが販売されています。機能拡張も国内ベンダーとの協力が進み、ホットスタンバイ機能やノード間切り替えの高速化など、主要機能の強化が行われています。
一方で、
Linux系の高可用クラスターパッケージとしては、普及が限定的です。国内では、商用UNIXのリセラーであるNECが自社の
ClusterProを、日立もスチールアイテクノロジーのLifeKeeperや
ClusterProを
OEMで扱い、自社製クラスタソフトHAモニタを販売していることが、ServiceGuardの販売低迷の一因と考えられます。