第9章 DRBDとheartbeatクラスタの統合

目次

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

DRBDは、Linux-HAクラスタマネージャ(heartbeat)を使用するシステム構成でよく 利用されます。 現在はheartbeatに代わりPacemakerクラスタマネージャが使用されています。 ただし、この章ではポリシー上の理由から、 従来のheartbeatシステムを使用する必要があるユーザを対象に、 heartbeat構成の概要を説明します。

ここでは、DRBDをLinux-HA高可用性クラスタの レプリケートされたストレージとして使用する場合について取り上げます。 従来のheartbeatリリース1対応クラスタと、 より新しいCRM (Cluster Resource Manager: クラスタリソースマネージャ)対応 heartbeat 2クラスタの両方について説明します。

heartbeatの基礎

heartbeatクラスタマネージャ

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

  • ApacheなどのWebサーバ

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

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

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

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

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

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

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対応のinitスクリプトで、 /etc/init.d に置かれています。 startstopまたはstatus引数を指定して heartbeatが簡単に呼び出すことができます。 定位置パラメータは取りません。 したがって、heartbeatで対応するリソースの構成を管理することはできません。 これらのサービスは従来の設定ファイルで構成する必要があります。

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

heartbeatの通信チャネル

heartbeatはUDPベースの通信プロトコルを使用し、 ノードの可用性を定期的にチェックします("heartbeat" proper)。 このために、heartbeatでは次のような通信方法を使用することができます。

  • IPマルチキャスト

  • IPブロードキャスト

  • IPユニキャスト

  • シリアル回線

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

[重要項目]重要項目

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

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

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