Skip to content

翻訳記事:

  • RED HAT Magazineは、米国発の記事を翻訳したものです。

RED HAT SPEAKS

オープンソースの高可用性クラスタリング

原文(英語/2005.07)

はじめに

Linuxがミッションクリティカルなアプリケーションで広く使用されるとともに、アプリケーションのフェイルオーバーによる高可用性のサポートが重要性を増しています。Linuxの高可用性の強化では、次のようなハードウェア技術とソフトウェア技術の両方を使用します。

  • サーバの冗長性:アプリケーションのフェイルオーバーやサーバのクラスタリングなど
  • ストレージの冗長性:RAIDやI/Oマルチパスなど
  • ネットワークの冗長性
  • 電源システムの冗長性

これらの機能は、スケーラブルなパフォーマンスと高可用性を低コストで実現するための手段となります。この記事では、オープンソースの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ファイルシステムマウント)を介して共有ストレージにアクセスします。アプリケーションクライアント層は、サーバクラスタ層に含まれるどのマシンのクラスタサービスにもアクセスできます。この層のノードが他のクラスタメンバーへのハートビートを停止した場合、そのノードはフェンシングされます。そのノード上で実行されていたクラスタサービスは、サーバクラスタ層内の同じフェイルオーバードメインに含まれる他のノードへ移行されます。

Basic cluster
図1. 基本的なクラスタ

クラスタの構成

Red Hat Cluster Suiteのマニュアルセット には、Cluster Managerの設定と管理について詳細な説明が記載されています。このセクションと次のセクションでは、主なステップを概説します。Cluster Managerの構成ファイル (/etc/cluster/cluster.conf) は、クラスタ構成ツールを使用して作成されるXML形式のファイルです(Red Hatは、このファイルの作成と変更をあくまでクラスタ構成ツールを使用して行い、手作業では編集しないことを推奨します)。ツールでの構成手順は次のとおりです。

クラスタノード
メンバーをクラスタに追加し、オプションで任意のクラスタメンバーについてパワーコントローラ接続を設定します。このステップでは、クラスタに含まれる同じサブネット上のノードを定義します(クラスタメンバーはすべて同じサブネットに属する必要があります)。
フェンスデバイス
クラスタ内の各ノードを管理する1つ以上のデバイスまたは方式を確立します。これによって、クラスタの可用性と完全性が維持されます。Red Hatは、APCパワースイッチや内蔵型サーバ管理ハードウェア(たとえば、HPのIntegrated Lights Outシステム)など、フェンシング用のさまざまな方式とハードウェアをサポートしています。
フェイルオーバードメイン
ノード障害が発生した場合にサービスの実行に使用されるクラスタノードについて、1つ以上のサブネットを設定します。定義済みのフェイルオーバードメインを備えたクラスタサービスは、そのドメイン内のクラスタノードでのみ動作し、その他のドメインでは動作しません。
リソース
システムによって管理されるリソースを設定します。ファイルシステム、IPアドレス、NFSマウントとエクスポート、およびユーザ作成スクリプトの利用可能な一覧から選択します。それらは個別に設定します。
サービス
クラスタリソース、ノード、およびフェイルオーバードメインを定義したら、クラスタ構成ツールを使用してそれらを組み合わせ、クラスタサービスを作成できます。
注:
クラスタ構成ツールを初めて実行すると、クラスタ構成ファイル/etc/cluster/cluster.conf が自動的に作成されます。

クラスタの管理

「図2. クラスタステータスツール」 に示されるとおり、クラスタステータスツールを使用すると、サービスの有効化、無効化、再起動、または再配置を行うことができます。サービスを有効化するには、Servicesエリアでサービスを選択し、Enableをクリックします。サービスを無効化するには、Servicesエリアでサービスを選択し、Disableをクリックします。サービスを再起動するには、Servicesエリアでサービスを選択し、Restartをクリックします。メンバー間でサービスを移動させるには、サービスを無効化し、それを別のメンバーにドラッグします。別のメンバーにドラッグすると、そのサービスは新しいメンバー上で自動的に起動します。

Cluster Status Tool
図2. クラスタステータスツール

クラスタとサービスのステータスの表示

クラスタおよびアプリケーションサービスのステータスの監視は、次のツールを使用して達成できます。:

  • clustat コマンド
  • ログファイルメッセージ
  • クラスタモニタリングGUI

クラスタおよびサービスのステータスには、次の情報が含まれます。:

  • クラスタメンバーシステムのステータス
  • ハートビートチャネルのステータス
  • サービスのステータス、およびそのサービスを実行または所有しているクラスタシステム

クラスタノードメンバーのステータスは、次の2つのクラスに分かれます。:

オンライン(Online)
メンバーシステムは他のメンバーシステムと通信し、指定のパーティションにアクセスしています。
非アクティブ(Inactive)
メンバーシステムは他のメンバーシステムと通信できません。

クラスタサービスには、次のような複数のステータスがあります。:

稼動中(Running)
サービスリソースは構成され、そのサービスを所有するクラスタシステム上で利用可能です。
待ち状態(Pending)
サービスはあるメンバー上で障害を起こし、別のメンバー上での起動待ち状態です。
無効(Disabled)
サービスは無効化され、オーナーが指定されていません。
停止中(Stopped)
サービスは稼働していません。サービスを起動できるメンバーを待っています。
障害状態(Failed)
サービスが起動に失敗し、クラスタはそのサービスを正常に停止できません。

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アプリケーション

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を使用できるように設定するための必要な手順を示します。:

  • Apacheがインストールされ、Apacheをクラスタサービスとして収めた各クラスタメンバー上で(IPアドレス、ファイルシステムなどが)設定されていることを確認します。
  • 提供されるHTTPファイルでファイルシステムをマウントする場合、このマウント情報を/etc/fstab ファイルに追加しないでください。サービスで使用されるファイルシステムをマウントおよびアンマウントできるのは、クラスタソフトウェアだけです。
  • Linuxコマンドchkconfig --del httpdを実行し、Apacheをブートシーケンスから削除します。: Apacheの起動とシャットダウンは、Cluster Managerによって制御されます。
  • クラスタ構成ツールから、次の手順を実行します。:
    • Apache HTTP Serverサービスのinitスクリプトを追加します。
    • Apache HTTP Serverコンテンツファイルとカスタムスクリプト用にデバイスを追加します。
    • Apache HTTP ServerサービスのIPアドレスを追加します。
    • Apache HTTP Serverサービスを作成します。

次のコマンドを使用すると、クラスタノード上で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. Red Hat Cluster Suite

関連資料

高可用性システムの設計と設定について詳細を学習するうえで効果的なリソースの1つは、書籍『Blueprints for High Availability』(Evan Marcus、Hal Stern共著、洋書)です。: その他のリソースには、次のものがあります。

執筆者について

Matthew O'Keefeは、1990年から2000年5月まで、ミネソタ大学の電気コンピュータ工学の教授として、ストレージシステムと並行シミュレーションソフトウェアについて教え、研究を実施していました。彼は2000年5月にSistina Software社を設立し、Global File System(GFS)やLinux Logical Volume Manager(LVM)など、Linux用のストレージインフラストラクチャソフトウェアを開発しました。Sistina社は2003年12月にRed Hatによって買収されました。現在、MatthewはRed Hatでストレージソフトウェア戦略を指導しています。

John Haは現在、Red Hat製品ドキュメンテーショングループの技術主任です。また、Red Hat Cluster Suiteのマニュアルを執筆し、保守しています。John HaはRed Hat Linux 6.2以来の熱烈なLinuxユーザです。彼のガールフレンドは、彼が説得したため、セキュリティ上の理由でMinesweeperからGnome Minesに乗り換えてしまいました。