はじめに
予期しないハードウェアやソフトウェアの不良でサーバが止まってしまって、大混乱になってしまったという経験のある人も少なくないと思います。特に、重要なデータを保管しているファイルサーバや、コミュニケーションツールであるメールサーバが停止してしまうと、影響も大きくなります。このような事をなくすための技術が、クラスタリングです。
クラスタリングとは
「クラスタリング」とは、複数のサーバを統合して、システム全体として処理能力を向上させたり、サービスの停止を防ぐための技術です。以前は、クラスタリングを行うためには、高価な専用ソフトウェアや特殊なネットワーク機器を利用しなければ実現できず、非常にコストのかかる技術でした。しかし、最近ではオープンソースソフトウェアで実現できるようになり、導入のためのコストは大幅に低下しました。
クラスタリング方式
クラスタリングには、大きく分けて、「アクティブ・スタンバイクラスタ」と「負荷分散クラスタ」の2つの方式があります。この2つの方式にはそれぞれに短所と長所があるため、大規模なシステムを構築する場合には、両方の方式を組み合わせてシステムを実現することもあります。
アクティブ・スタンバイクラスタ
2台のサーバで構成し、全体として1つのシステムとしてサービスを提供します。通常は、1台のサーバが稼動(アクティブ)し、もう1台のサーバは待機(スタンバイ)します。待機系のサーバは、稼動系サーバで提供しているサービスの状態を監視し、それが停止したら、替わりにサービスを継続して提供することで、システム全体が止まらない仕組みを実現します。
この方式では、通常のサーバで利用するLANインタフェースに加え、図1のようにサーバの間を結ぶ監視用のネットワークを作成するのが普通です。そのため、通常よりも多くのLANインタフェースが必要となります。これは、稼動系のサーバが停止したことをより正確に把握することと、待機系サーバが稼動系に切り替わるときに、稼動系サーバのサービスを強制的に停止させるなどの目的で利用されます。
この方式には、次のような長所があります。
- 1台のサーバでのサービス提供の延長線上にあるため、いろいろなサービスで利用することができる。
- サービスに合わせて監視方法を工夫することで、システム状態に合わせて切り替え条件を設定できる。
- 2台でクラスタを構成できるため、比較的安価にシステムを構築できる。
しかし、次のような短所もあります。
- システム全体の能力は、1台のコンピュータで提供できる範囲に限られる。
- メールサーバやファイルサーバのようにデータを蓄積するサーバでは、障害が発生した時に稼動系から待機系のサーバにデータを移行する仕組みを別途検討する必要がある。
なお、アクティブ・スタンバイクラスタで、稼動系から待機系へ切り替わることを「フェールオーバー」と呼びます。また、一旦フェールオーバーした後、故障した稼動系が復旧したときには、再び元の状態に戻します。これを「フェールバック」と呼びます。
本コーナーでは、アクティブ・スタンバイクラスタを構成するためのソフトウェアとして「heartbeat」を取り上げます。heartbeatは、クラスタを構成する2つのサーバ間での監視の仕組みや、IPアドレスを切り替える仕組みなどを提供します。
また、クラスタのサーバ間でのデータ共有の仕組みとしては、「DRBD(Distributed Redundant Block Device)」を紹介します。DRBDは、クラスタを構成するサーバ間でリアルタイムにディスクのミラーリングを行う機能を提供します。
負荷分散クラスタ
2台以上の複数のサーバで構成し、全体として1つのシステムとしてサービスを提供します。全てのサーバで同じサービスを提供できるようにし、負荷分散装置(ロードバランサ)などを使いリクエストを分散させることで、すべてのサーバで処理を分担します。また、負荷分散装置が各サーバが正しくサービスを行っているかどうかを確認し、サービスが提供できていないサーバにリクエストを送らないようにすることで、障害の発生したサーバをシステムから切り離すことができます。
この方式には、次のような長所があります。
- サーバの数を増やすことで、システム全体の処理性能を向上させることができる。
しかし、次のような短所もあります。
- 負荷分散の機能を提供する装置が必要になるため、システムが複雑になり、構築コストも高くなる。
- すべてのサーバで同じサービスを提供するため、全サーバが同じデータを参照するなどのデータ共有方法を別に用意する必要がある。
- 負荷分散装置では、リクエストの分散と監視を同時に行う必要があるため、複雑な監視方法を実現するのが難しい。
なお、システム全体でサービスを停止しないようにすることを考えると、負荷分散装置の故障も考慮する必要があります。そのため、負荷分散装置も2台用意し、クラスタリングにより保護するのが普通です。
最近のLinuxカーネルは、この負荷分散の機能を提供するための機能として「LVS(Linux Virutal Server)」を標準的にサポートしています。本コーナーでは、このLVSの機能を利用して負荷分散と監視の仕組みを提供する「ldirectord」について解説します。
おわりに
今回は、クラスタリングの概念について簡単に解説しました。次回はheartbeatを使ったクラスタリングの基本構成について解説する予定です。