HAクラスタは、複数のコンピュータ(以下、ノードと呼ぶ)が相互に通信して健全性を確認し、健全なノードのどれかでサービスを提供することによって、全体として可用性を高める。

 したがってHAクラスタには、次の2つの要素が不可欠だ(図1)。

・健全性を相互に確認するためのノード間の通信
・健全なノードでサービスを動かすための判断と制御の仕組み

 前者を担当するのがHeartbeat、後者を担当するのがPacemakerになる。

図1●HeartbeatとPacemakerの役割

Heartbeat

 Heartbeatは「クラスタノード管理システム」として動作する。Heartbeatを実行しているノードは、「ハートビート」と呼ぶパケットを他のノードに向けて定期的に送信する。他のノードは、応答を返す。一定時間以上応答がないノードは、ダウンしたと見なされて、クラスタノードから取り除かれる。

 これに加えて、HeartbeatはPacemakerが必要とする通信を仲介し、HeartbeatとPacemakerの実行ログを管理する。

Pacemaker

 一方Pacemakerは「クラスタリソース管理システム」だ。リソースとは、アクティブなノードで有効化されたり実行されるサービスである。

 データベースでコンテンツを管理するコンテンツ管理システムを例にとると、Pacemakerはアクティブなノード側で次のリソースを順番に起動する(図2)。

1. DRBDを起動してプライマリにする
2. DRBDが管理するデータ領域にアクセスできるよう、これをマウントする
3. 外部からアクセスするために使う仮想IPアドレスを有効にする
4. データベースサーバーを起動する
5. Webサーバーを起動する

図2●リソース同士の関係

 DRBDリソースだけはスタンバイノードでも起動され、DRBDの状態はセカンダリになる。こうしておけば、アクティブ側でディスクに書き込まれたデータがスタンバイ側にもレプリケートされる。

 Pacemakerは、いったん起動したリソースの状況を定期的に監視する。リソースが正常に動作していなければ、再起動を試みる。再起動も失敗して再起不能と判断されたら、Pacemakerは関連するリソース全体を他の適切なノード(1対1のクラスタの場合はスタンバイノード)に移動する。これがフェイルオーバーだ。

 もちろん、アクティブノードがダウンした場合にもフェイルオーバーが起こる。