Linuxがミッションクリティカルなアプリケーションで広く使用されるとともに、アプリケーションのフェイルオーバーによる高可用性のサポートが重要性を増しています。Linuxの高可用性の強化では、次のようなハードウェア技術とソフトウェア技術の両方を使用します。
これらの機能は、スケーラブルなパフォーマンスと高可用性を低コストで実現するための手段となります。この記事では、オープンソースのRed Hat Cluster Managerアプリケーションフェイルオーバーソフトウェアパッケージに焦点を合わせ、その基本原則と動作について説明します。さらに、Cluster Managerとそれに関連する冗長性方式を使用して、Linuxで可用性レベルの向上を(それに見合ったコストで)実現する方法を概説します。
Red Hat Cluster Managerは、相互接続されたLinuxサーバのグループ(クラスタ)で同一アプリケーションを実行できるようにする、アプリケーションフェイルオーバーソフトウェアパッケージです。Cluster Managerは、アプリケーション、サーバデーモン、または共有ファイルサービスの動作を妨げるような特定の障害(サーバやネットワークの障害など)が発生すると、それを自動検出できます。さらに、そのアプリケーションやサービスを、クラスタ内の別のサーバで再起動できます。また、Cluster Managerを使用すると、あるサーバ上のアプリケーションをシャットダウンし、その同じアプリケーションをクラスタ内の別のサーバで再起動できます。こうしたプロセスは、アプリケーションの移行として知られています。同じアプリケーションを実行できるクラスタ内の一群のサーバは、フェイルオーバードメインと呼ばれます。
Cluster Managerを使用すると、可用性を向上させ、データベース(OracleやMySQLなど)、ファイルサービス提供(NFSおよびCIFSプロトコル)、およびWebサービス提供(Apacheなど)アプリケーションの管理を簡素化することができます。Cluster Managerは、標準のネットワーキング、共有ストレージ、およびサーバ管理テクノロジを使用してサーバとネットワークのステータスを監視し、アプリケーションが常に1台の利用可能なアクティブサーバで動作するように保証します。ノードフェンシングを使用して、他のノードと通信していない(したがってクラスタの一部ではなくなった)ノードが、クラスタのメンバーシップを回復するまでアプリケーションの実行や共有ストレージへのアクセスを行わないようにします。クラスタ内の各ノードでデーモンを実行し、クラスタのステータスを監視するとともに、各クラスタノード間で構成情報を同期化します。それによって、常時、すべてのノードがクラスタのメンバーシップとシステムの状態について同じ認識を持つことになります。
Cluster Managerは、アプリケーションとそれらに必要なリソースを1つのクラスタサービスへグループ化することによって、アプリケーションの可用性を実現します。クラスタサービスは、ノード間でフェイルオーバーが可能なクラスタリソース、コンポーネントで構成されます。これには、IPアドレス、アプリケーション初期化スクリプト、および共有ストレージパーティション(共有ディスク上のローカルファイルシステム、共有クラスタファイルシステム、NFSのようなネットワークファイルシステムなど)が含まれます。
クラスタサービスを追加したあと、このクラスタ管理ソフトウェアは、情報をクラスタ構成ファイルに保存します。その構成データは、Cluster Configuration System(CCS)を使用して、すべてのクラスタノードに統合されます。CCSは、各クラスタノードで動作し、XMLベースの構成ファイルに加えられた変更の取得を可能にする一連のデーモンです。Red Hat Cluster Managerは、クラスタ内のあらゆるノードで、クラスタサービスへの透過性のあるクライアントアクセスを可能にします。
アプリケーションのフェイルオーバーと移行を達成しながらデータの完全性を維持するため、Cluster Managerノードは、ノードハートビートによってグループのメンバーシップを維持します。各ノードは、ハートビート信号を他のノードに送信します。これは、各ノードが正しく機能しており、相手に対するネットワーク接続が完全であることを通知する信号です。あるクラスタノードが他のノードにハートビート信号を送信できなくなった場合、そのノードはフェンシングされます。ノードはリブートされ、共有ストレージにアクセスできなくなります。そのノード上で動作していたアプリケーションは、クラスタ内の別のノードへ移行されます。特定のクラスタサービスを実行できるノードのセットは、フェイルオーバードメインというサブセットに制限できます。
「図1. 基本的なクラスタ」 は、Cluster Managerを使用するRed Hat Enterprise Linuxクラスタの基本構造を示しています。Cluster Managerで構成および管理されるサーバクラスタ層は、IP(共有NFSまたはiSCSIボリュームマウント)またはファイバチャネル(共有GFSまたはext3fsファイルシステムマウント)を介して共有ストレージにアクセスします。アプリケーションクライアント層は、サーバクラスタ層に含まれるどのマシンのクラスタサービスにもアクセスできます。この層のノードが他のクラスタメンバーへのハートビートを停止した場合、そのノードはフェンシングされます。そのノード上で実行されていたクラスタサービスは、サーバクラスタ層内の同じフェイルオーバードメインに含まれる他のノードへ移行されます。
Red Hat Cluster Suiteのマニュアルセット
には、Cluster Managerの設定と管理について詳細な説明が記載されています。このセクションと次のセクションでは、主なステップを概説します。Cluster Managerの構成ファイル
(/etc/cluster/cluster.conf)
は、クラスタ構成ツールを使用して作成されるXML形式のファイルです(Red Hatは、このファイルの作成と変更をあくまでクラスタ構成ツールを使用して行い、手作業では編集しないことを推奨します)。ツールでの構成手順は次のとおりです。
/etc/cluster/cluster.conf
が自動的に作成されます。「図2. クラスタステータスツール」 に示されるとおり、クラスタステータスツールを使用すると、サービスの有効化、無効化、再起動、または再配置を行うことができます。サービスを有効化するには、Servicesエリアでサービスを選択し、Enableをクリックします。サービスを無効化するには、Servicesエリアでサービスを選択し、Disableをクリックします。サービスを再起動するには、Servicesエリアでサービスを選択し、Restartをクリックします。メンバー間でサービスを移動させるには、サービスを無効化し、それを別のメンバーにドラッグします。別のメンバーにドラッグすると、そのサービスは新しいメンバー上で自動的に起動します。
クラスタおよびアプリケーションサービスのステータスの監視は、次のツールを使用して達成できます。:
clustat コマンドクラスタおよびサービスのステータスには、次の情報が含まれます。:
クラスタノードメンバーのステータスは、次の2つのクラスに分かれます。:
クラスタサービスには、次のような複数のステータスがあります。:
clustat
ユーティリティを呼び出すことにより、シェルプロンプトからクラスタの最新ステータスのスナップショットを表示することが可能です。たとえば、ノードtng3-2とノードtng3-1(両方ともオンライン)を含む2ノードクラスタにおいて、Webサーバサービスに障害が発生し、電子メールサービスが稼働している場合、clustatコマンドの出力は次のようになります。
Member Status: Quorate, Group Member
Member Name State ID
------ ---- ----- --
tng3-2 Online 0x0000000000000002
tng3-1 Online 0x0000000000000001
Service Name Owner (Last) State
-------- ----- ----- ------ -----
webserver (tng3-1 ) failed
email tng3-2 started
特定の時間間隔でシェルプロンプトからクラスタを監視し、クラスタのステータスを表示するには、clustat
コマンドを-itimeオプション付きで実行します。ここで、timeにはステータススナップショット間の秒数を指定します。
この記事では、Red Hat Enterprise LinuxクラスタでRed Hat Cluster Managerを設定および管理するときの基本ステップを概説できるだけであることに留意してください。このプロセスの詳細な手順については、 Cluster Manager のマニュアルをご覧ください。
Cluster Managerは、ほぼあらゆるアプリケーションに高可用性のインフラストラクチャを提供します。Apache WebサーバとNFSおよびSambaファイルサービスのサポートがCluster ManagerとRed Hat Enterprise Linuxに組み込まれています。Cluster Managerによるアプリケーション展開の基幹コンポーネントの1つは、クラスタノード上のアプリケーションの起動と停止を管理するためのスクリプトです。NFS、Samba、およびApacheについて、これらのスクリプトは、マシンのブートまたはシャットダウン時に実行されるLinuxの標準のinitおよびshutdownプロセスに含まれています。Apache Webサーバについては、これらのスクリプトシーケンスはファイル
/etc/rc.d/init.d/httpd
に記述されています。NFSとSambaについては、該当するスクリプトファイルはそれぞれ
/etc/rc.d/init.d/nfsd
と
/etc/rc.d/init.d/smbd
です。他のアプリケーション用のスクリプトは、
Red Hat Enterprise Linux システム管理ガイド
など、initスクリプトの構築について概説した適切なマニュアルを参照することによって作成できます。
例として、Cluster ManagerでApacheを使用できるように設定するための必要な手順を示します。:
/etc/fstab
ファイルに追加しないでください。サービスで使用されるファイルシステムをマウントおよびアンマウントできるのは、クラスタソフトウェアだけです。
chkconfig --del httpdを実行し、Apacheをブートシーケンスから削除します。:
Apacheの起動とシャットダウンは、Cluster Managerによって制御されます。次のコマンドを使用すると、クラスタノード上でApache HTTP Serverクラスタサービスをそれぞれ起動および停止できます。
service httpd start
service httpd stop
Red Hat Cluster Managerは、Red Hat Cluster Suiteのコンポーネントとして発展してきました。Cluster Suiteには、Cluster ManagerとIPロードバランシング用のLinux Virtual Server(LVS)が含まれています。当初、Red Hat Enterprise Linux AS 2.1に付属していたCluster Suiteは、Red Hat Enterprise Linux 3および4では、別個のレイヤード製品となっています。Cluster SuiteのRed Hat Enterprise Linux 4リリースには、はるかに多数のクラスタメンバーのサポートや低コストの非共有ストレージ構成のサポートなど、以前のバージョンに比べて重要な技術的進歩が含まれています。
| Enterprise Linuxとの関係 | GFSによる共有クラスタインフラストラクチャ | Cluster Logical Volume Managerのサポート | 共有(SANまたはマルチポートSCSI)の必要性 | ノードの最大数 | |
|---|---|---|---|---|---|
| Red Hat Enterprise Linux AS 2.1 | 付属 | 無し | 無し | 有り | 8 |
| Red Hat Enterprise Linux 3 | 別個 | 無し | 無し | 有り | 8 |
| Red Hat Enterprise Linux 4 | 別個 | 有り | 有り | 無し | 300 |
高可用性システムの設計と設定について詳細を学習するうえで効果的なリソースの1つは、書籍『Blueprints for High Availability』(Evan Marcus、Hal Stern共著、洋書)です。: その他のリソースには、次のものがあります。