第9章 DRBDとheartbeatクラスタ

目次

heartbeatの基礎
heartbeatクラスタ管理システム
heartbeatリソース
heartbeatリソースエージェント
heartbeatの通信チャネル
heartbeatの構成
ha.cfファイル
authkeys ファイル
クラスタ構成をクラスタノードに配布する
heartbeat R1スタイルのクラスタでDRBDを使用する
heartbeatのR1スタイルの構成
heartbeat R1スタイルのクラスタの管理
heartbeat CRM対応クラスタでDRBDを使用する
heartbeat CRM構成
heartbeat CRM クラスタの管理
heartbeatとdopdの使用
heartbeatの構成
DRBDの構成
dopd機能のテスト

[重要項目]重要項目

この章では、旧式のLinux-HAクラスタ管理システム(Heartbeat 2.0と2.1)とDRBDを組み合わせる方法を説明します。現在は代わりにPacemakerが使用されます。可能であれば、Pacemakerを使用することをお勧めします。詳細は、8章DRBDとPacemakerクラスタを参照してください。この章ではポリシー上の理由から、従来のheartbeatシステムを使用する必要があるユーザを対象に、 heartbeat構成の概要を説明します。

Heartbeatのクラスタメッセージ層は、Linux-HAプロジェトが別個で、Heartbeatバージョン3としてサポートし続けています。Pacemakerクラスタ管理システムと組み合わせて使っても構いません。Heartbeatの設定に関する詳しい情報は、http://www.linux-ha.org/doc/のLinux-HA User's Guideでご覧いただけます。

heartbeatの基礎

heartbeatクラスタ管理システム

heartbeatのクラスタ管理システムとしての役割は、クラスタの1つのマシンに障害が発生しても、クラスタがクライアントへのサービスを継続できるようにすることです。 heartbeatがクラスタサービスとして管理するアプリケーションには、次のようなものがあります。

  • ApacheなどのWeb サーバ

  • MySQL、Oracle、PostgreSQLなどのデータベースサーバ

  • NFS、Samba、その他多数のファイルサーバ

基本的には、どのようなサーバアプリケーションでも heartbeatによりクラスタサービスとして管理できます。

heartbeatによって管理されるサービスは、システム起動時の起動スクリプトを無効にし、起動時に開始しないようにします。これらのサービスは、クラスタ構成と状態により必要に応じてクラスタ管理システムが開始および停止します。特定のサービスの実行中にマシン(物理クラスタノード)に障害が発生すると、 heartbeatがクラスタの別のマシンで障害が発生したサービスを開始します。 heartbeatが実行するこの操作は、一般に(自動) フェイルオーバと呼ばれます。

1つのクラスタノードからもう一方へクラスタサービスを手動で移行することを、手動フェイルオーバと呼びます。これはいくらか矛盾した呼び方であるため、本ガイドでは スイッチオーバという用語を使用します。

障害が発生したノードが回復したら、ただちにリソースをこのノードに自動的に再移行することもできます。この処理は フェイルバックと呼ばれます。

heartbeatリソース

一般に、heartbeatが管理するクラスタサービスをノードで開始するには、特定の要件を満たす必要があります。一般的なデータベース駆動型Webアプリケーションの例を考えてみましょう。

  • Webサーバとデータベースサーバの両方が、ある特定のIP アドレスで正常に動作するよう設定されていると仮定します。

  • データベースには、データファイルを取得するファイルシステムが必要です。

  • このファイルシステムには、読み取りと書き込みのために配下にブロックデバイスが必要です。後述のように、ここでDRBDが必要になります。

  • Webサーバも起動されたデータベースに依存します。データベースが起動していなければ、動的コンテンツを提供できません。

heartbeatが制御するサービスおよびサービスが依存する追加要件を、 heartbeatの用語ではリソースと呼びます。このリソースが相互に依存する集合を形成します。この集合をリソースグループと呼びます。

heartbeatリソースエージェント

heartbeatは、RA (リソースエージェント)と呼ばれる標準化されたシェルスクリプトを呼び出してリソースを管理します。 heartbeatクラスタでは、次のようなタイプのリソースエージェントを使用できます。

  • heartbeatリソースエージェント. これらのエージェントは/etc/ha.d/resource.dディレクトリに置かれています。これらはゼロ以上の命名されていない定位置パラメータと 1つのオペレーション引数 (startstop またはstatus)を取ることができます。 heartbeatは、/etc/ha.d/haresourcesの一致するリソースに対して見つかったパラメータを、 RAの定位置パラメータに変換し、RAがこれらを使用してリソースを設定します。

  • LSB リソースエージェント. これは、従来のLinux Standard Base対応の起動スクリプトで、 /etc/init.d に置かれています。 startstopまたはstatus引数を指定して heartbeatが簡単に呼び出すことができます。定位置パラメータは取りません。したがって、リソースの設定パラメータを管理することはできません。これらのサービスは従来の設定ファイルで構成する必要があります。

  • OCFリソースエージェント.  これはOpen Cluster Frameworkのガイドラインに準拠したリソースエージェントで、 CRMモードのクラスタ以外では使用できません。これは通常、システムアーキテクチャとディストリビューションに応じて、 /usr/lib/ocf/resource.d/heartbeatまたは /usr/lib64/ocf/resource.d/heartbeat に置かれています。定位置パラメータは取りませんが、環境変数を使用して設定パラメータを詳細に指定できます。この環境変数は、クラスタ管理プロセスがクラスタ構成から取得し、呼び出し時にリソースエージェントに渡します。

heartbeatの通信チャネル

heartbeatはUDPベースの通信プロトコルを使用し、ノードの可用性を定期的にチェックします。これをハートビートと呼び、"heartbeat" という名前の由来になっています。このために、heartbeatでは次のような通信方法が使えます。

  • IPマルチキャスト

  • IPブロードキャスト

  • IPユニキャスト

  • シリアル回線

中でも、IPマルチキャストとIPブロードキャストが広く使用されています。クラスタが安定して動作するための最低要件として2つの独立した通信チャネルが必要です。

[重要項目]重要項目

ボンディングネットワークインタフェース (bondingドライバを使用した物理インタフェースの仮想集積体)は、 1つのheartbeat通信チャネルを構成します。

ボンディングリンクは、bondingドライバの既知のバグや不明のバグで障害を起こすことがあります。さらに、ボンディングリンクは一般に同一モデルのネットワークインタフェースを使って構成されるため、 NICドライバのバグに対しても脆弱です。独立した第2のheartbeat通信チャネルがない場合は、こうした問題によりクラスタ分割が発生する可能性があります。

したがって、第1のチャネルがボンディングインタフェースを使用するという理由で、クラスタ構成から第2のheartbeatリンクを省略することは お勧めできません