
第17号(2008年2月)
記事:Red Hat Enterprise Linux 5 でクラスタ構築
Red Hat Enterprise Linux 5(以下version 5と記述)の製品出荷から1年が経過し、この間、非常に注目を集め高いご評価を頂いたことが2点あります。
Xenベースのサーバ仮想化機能が追加されたことと、Advanced Platformというファミリーが追加されたことです。後者は、Red Hat Enterprise Linux 4(以下version 4と記述)までオプション製品としてご提供していた、Red Hat Cluster Suiteと、Red Hat Global File Systemが同梱される、いわばOSの提供範囲を超えた「ソリューション」をご提供する製品となりました。今号では、まず始めに、Red Hat Cluster Suiteに着目してご紹介いたします。
・2つのコンポーネントを持つRed Hat Cluster Suite
Red Hat Cluster Suiteは"Suite"の名前の通り、大別して2つの機能を提供します。IPレベルでの負荷分散クラスタ、一般に「IPロードバランサ」と呼ばれる機能を提供する、Linux Virtual Server(以下、"LVS"と記述)と、サービスの継続が難しくなった時に、別ノードにサービスをテイクオーバーさせる、フェイルオーバ型の高可用性クラスタ機能を提供する、Cluster Managerです。これら2つの機能を同梱することで、Red Hatは、Red Hat Enterprise Linux Advanced Platformを、製品単体で高可用性や拡張性を備えたシステムを構築することが出来るソリューションと位置づけています。価格帯に変更が無いため、 Red Hat Enterprise Linux Advanced PlatformはRed Hat Enterprise Linux 4 ASの後継製品とも言えますが、全く色合いの異なる製品、ソリューションです。
・Red Hat Network上でのRed Hat Cluster Suite
Red Hat Cluster Suiteの紹介をする前に、混乱を避けるためにRed Hat Network上での表示について触れておきたいと思います。
Red Hat Cluster Suiteはversion 4においてもversion 5においても同様に、それぞれのサブチャネルとして表示されます。気を付けて頂きたいのは、version 4の場合は「Red Hat Cluster Suite」、version 5の場合は「Red Hat Clustering」と表示されている点です。version 4とversion 5ではパッケージのバージョンや仕様は変更されていますが、同じ機能要件を満たすRed Hat Cluster Suiteのクラスタパッケージセットです。
・Linux Virtual Server(負荷分散クラスタ)
Linux Virtual Serverは図のようにクライアントとサーバプールの中間に位置し、クライアントからのリクエストをサーバプール内の各サーバに振分け、負荷分散するプロキシサーバです。TCP/IPレベルで負荷分散を行うため、負荷分散対象として代表的なwebサービスだけでなく、squidのようなwebプロキシサービスやメール配送サービス等も負荷分散の対象とすることが出来ます。IPレベルで負荷分散を行うので、URLによって振分け先を変更する等のアプリケーションレイヤの振分けは実行出来ません。
Red Hat Cluster SuiteのLVSはwebベースの管理ツールであるpiranha、手動で振分けテーブルを操作するipvsadm、サーバの死活監視を行うpulse等で構成されます。
ulseは、LVS同士の死活監視、サーバプール内サーバ(実サーバ)の死活監視を行います。LVS同士のサービス監視とは、LVS自身が Single Point of Failureとなることを避けるために2台構成にした場合に利用され、LVS自身がHAクラスタを構成します。実サーバのサービス監視とは、pingや標準で準備された、もしくは独自に作成した監視用スクリプトを利用した死活監視です。LVSはこの死活監視によりサーバプール内の異常サーバを検知し、リクエストの振分けテーブルから削除することで、システム全体の可用性を高めます。負荷分散のアルゴリズムについては、ラウンドロビンや接続数を参照して振分けるなど柔軟な設定が可能です。サーバプール内に様々な性能のマシンが存在する場合は、重みを付けて振り分けることもできますので、全てのサーバの性能を十分に発揮させることが可能です。
次にLVSのルーティング方式ですが、NAT、IPトンネル、Direct Routingから選択することができます。一番簡単に導入できるのはNAT方式です。しかし他のルーティング方式と比較するとLVSの負荷が高いことも事実です。大規模なシステムになるとクライアントからの全てのリクエストはLVSを通過するため、LVSがボトルネックになることがあります。そのような場合は、Direct Routingを採用します。NAT方式ではリクエストとレスポンスの両方がLVSを通過しますが、Direct Routing方式ではLVSはリクエストを振り分けるだけで、レスポンス自体はサーバプールから直接クライアントに返されます。この方式はDirect Server Return(DSR)とも言われます。LVSはレスポンスを処理しませんから、より多くのリクエストを処理することができます。
・Cluster Manager(フェイルオーバクラスタ)
仮りに今、1台のサーバで運用されるサービスがあるとします。このサーバにトラブルが起きるとどうなるでしょうか?サーバのハード障害、ネットワークのダウン、デーモンのバグ、想像もしない原因でトラブルは起きます。サービスはストップ、同時にビジネスもストップ、復旧するまであなたは何もすることができません。これは大問題です。そこで、複数のサーバを用意して、1台がトラブルを起こしたら、他のサーバが自動的にサービスを受け継ぐようにしてはどうでしょう。これがフェイルオーバクラスタの仕組みです。フェイルオーバクラスタで構成されたシステムなら、サービスは継続して提供され、ビジネスは順調に進行します。
Cluster Managerは最大16ノードのフェイルオーバクラスタを提供します。
Cluster Managerは管理ツールであるsystem-config-clusterやconga、クラスタの各種リソースを管理するrgmanager、分散ロックを管理するdlmやフェンスデバイスを管理するfenced、クラスタ全体を管理するcmanなどで構成されます。フェイルオーバクラスタを構成する上で、共有ストレージは必須ではありません。クラスタを構成するノード間の通信はIPマルチキャストを利用します。
例としてDBのフェイルオーバクラスタを構築するとします。Cluster Managerは、DBが正常に稼働する上で必要な、例えばクライアントが接続してくるIPアドレスやDBのプロセス、DBのインスタンスが展開されているファイルシステム等それぞれをリソースとして管理します。つまり、1つのサービスはそのサービスを継続するのに必要な複数のリソースから成るとし、リソースの異常を検知した場合にサービスをフェイルオーバします。
Cluster Managerは、クラスタを構成するノード(クラスタメンバ)に優先度を付ける、フェールバックを行う等、柔軟に設計することができ、要件に応じたフェイルオーバクラスタを構成します。ノードの優先度はサービス毎に設定することが可能なので、2ノードクラスタにおいて、ノードAにてDBを動作させフェイルオーバ先にノードBを指定、ノードBにはNFSサーバを動作させフェイルオーバ先にノードAを指定、という構成を取ることができます。これで、無駄になりがちなスタンバイ機を有効活用できます。
例としてDBを取り上げましたが、webサーバやsamba等のOSに同梱されるアプリケーションだけでなく、もちろん独自に作成したアプリケーションをクラスタ化することも可能です。
Cluster Managerの紹介をする上で1つ重要なことがあります。それはフェンスデバイスの存在です。(STONITHと言うと思い浮かぶ人が多いかもしれません)フェンスデバイスは、異常ノードによるクラスタの不整合を防止するためのデバイスで、異常ノードに対して正常なノードから強制終了処理(フェンス)を実行します。具体的にはネットワーク対応の電源装置やサーバに搭載されるリモート管理用のネットワークカード等で強制終了します。Cluster Managerはこのフェンスデバイスが必須要件になります。利用できるフェンスデバイスの一覧はこちらです。
http://www.redhat.com/cluster_suite/hardware/
Red Hat Cluster Suiteを利用してフェイルオーバクラスタを構築する場合はHCLにあるハードウェアと上記にリストされているフェンスデバイスが必要です。
version 5のCluster Managerにおける変更点ですが、version 4ではカーネルにクラスタ専用モジュール(cman-kernelパッケージ)をロードする必要がありました。それに対してversion 5のCluster Managerはクラスタ関連の処理がカーネル内部からユーザランドへ移行されています。これはクラスタ関連の処理をOpenAIS上に移行したためです。OpenAISはService Availability Forum(SA Forum)の策定した高可用性フレームワークであるApplication Interface Specification(AIS)のオープンソース実装です。version 5のCluster ManagerはこのOpenAISを基盤として動作しています。
・まとめ
Red Hat Cluster Suiteに含まれるLinux Virtual ServerとCluster Managerは、負荷分散クラスタとフェイルオーバクラスタというそれぞれ異なるテクノロジーを提供するソフトウェアです。システム要件に応じて個別に、もしくは、組み合わせて利用することでシステム全体として高い可用性と拡張性を実現します。クラスタ構成というと高価なソリューションというイメージがあるかもしれません。しかし、Red Hat Enterprise Linux 5 Advanced Platformの登場により、それは過去の話になりました。今ではversion 5と認定されたハードウェアだけで、クラスタを構成することができます。特に最近では安価なストレージ製品も登場したことで、システムのクラスタ化に必要なコストが低くなってきています。しかし、クラスタシステムは本質的に難解です。初めてRed Hatのクラスタを利用される場合は、クラスタのトレーニング(RH436)をお薦めいたします。ミッションクリティカルなシステムに導入する場合、導入支援のコンサルサービスもご利用いただけますので、お気軽にsales-jp@redhat.comまでお問い合わせ下さい。
レッドハット株式会社/ニュースレター編集部