5. heartbeatとの組み合わせ

5.1. heartbeatとは何ですか?

heartbeatはハイアベイラビリティフェールオーバークラスタを構築するために使用します。 これを使うと2ノード間のIPアドレスの引継ぎをさせることができます。 これは2台のマシン間でシリアルケーブルやイーサネット、あるいは両方を使って"heartbeat(心臓の鼓動)"を送ることによって実現しています。 heartbeatが失敗すれば、セカンダリマシンはプライマリマシンがダウンしたと認識し、 プライマリマシン上で動作していたサービスを引き継ぎます。 heartbeatソフトウェアについてのより詳細な情報は、linux-ha.orgを 参照してください。

5.2. drbd及びheartbeatのスクリプト

DRBDにはheartbeatとの統合が非常に簡単にできるよう、2つのスクリプトが用意されています。 1つ目のスクリプトはdrbdで、/etc/rc.d/init.d/drbdとしてインストールされます。 このdrbdスクリプトはマシン起動時にDRBDサービスを自動起動させるためのものです。 2つ目のスクリプトはdatadiskで、/etc/ha.d/resource.d/datadiskとしてインストールされます。 このdatadiskスクリプトは、DRBDデバイスをセカンダリ状態からプライマリ状態へ切り替えるのに使用されるもので、 /etc/ha.d/haresourcesから呼び出されて起動します。

5.3. heartbeatと組み合わせた例 - Webサーバ

ここでは、前出のdrbd.confセクションでの例をもとに構築します。 そのセクションでは、thost1(10.1.1.31)とthost2(10.1.1.32)と名づけられた2台のマシンがありました。 ここではHTMLファイルがDRBDデバイス上に保存されていると仮定したWebサーバを構築します。 最終的には、これらの手順をすべて自動で実行できるようにしたいところですが、このHOWTO文書では手動で実行していきます。

最初にheartbeatパッケージを正常に構築、設定します。ここでheartbeatパッケージ のセットアップの説明に入るつもりはありません。 ここまでの説明を理解してこれたとすれば、あなたの環境ですでにheartbeatが動作しているはずです。 heartbeatが動作し、drbd.confファイルが正確に設定されているとすると、 ここで実行すべき最初の作業は両方のノード上でdrbdを起動することです。 thost1上で、下記のコマンドを実行してください:

$ insmod drbd
$ /etc/rc.d/init.d/drbd start

thost2上でも同様に下記のコマンドを実行してください:

$ insmod drbd
$ /etc/rc.d/init.d/drbd start

これでDRBDが起動しているはずです。 thost1上でDRBDがプライマリ状態になっていることを確認したら、マウントしてください。 ファイルシステムをまだDRBDデバイス上に作成していなければ、作成してください。 最後に、DRBDデバイスのマウントポイントがドキュメントルートになるよう、両マシンのWebサーバを設定してください。

[root@10-0-1-31 ha.d]# cat /proc/drbd
version       : 58

0: cs:Connected st:Primary/Secondary ns:208 nr:36 dw:88 dr:373 gc:5,25,13

両ノードの/etc/ha.d/ha.cfファイルの設定が正確だとすると、次の作業は /etc/ha.d/haresourcesファイルの編集です。 このファイルに下記の行を追加してください。

10-0-1-31.linux-ha.org  10.0.10.10/16 datadisk::drbd0 httpd 

10.0.10.10はWebサーバのIPアドレスです。 これについての詳細はheartbeatのドキュメントを参照してください。 基本的に、上記の行ではheartbeatソフトウェアが/etc/ha.d/resource.d/datadiskスクリプトをdrbd0パラメータを付けて 実行するように指定しています。 マシンダウン時には、datadiskスクリプトがセカンダリノードで実行され、drbd0のDRBDデバイスをセカンダリ状態から プライマリ状態に切り替えます。

さらに両ノードの/etc/fstabファイルも編集する必要があります。 重要な点は、マシン起動時にDRBDデバイスを決してマウント"しない"ように設定しておくことです。noauto フラグをつけることで、そのように設定できます。

/dev/nb0                /mnt/disk               ext2    noauto          0 0

これで、heartbeatを起動することができます。

/etc/rc.d/init.d/heartbeat start

全ての設定が正しければ、heartbeatはWebサーバを起動し、仮想インターフェースに割り当てます。 この時点で、thost1の電源を落としてみてください。 全て順調に動作していれば、約30秒でthost2が引き継ぎを実行し、Webサーバを起動します。 このテストが成功したら、マシン起動時に自動起動するようdrbdとheartbeatを設定し、腰をおろしてハイアベイラビリティ の世界を楽しんでください!

5.4. heartbeatの組み合わせ例 - NFSサーバ

ここでの短い例では、保持されているステータス情報を必要とするサービスのフェールオーバー時に考慮すべき 事柄をいくつか説明します。DRBDデバイス上のファイルシステムをエクスポートするNFSサーバを設定したいと思います。 ここでも、手動での手順を説明します。

前出のとおり、heartbeatの設定が完了していると仮定して、Webサーバの設定をNFSサーバの設定 に変更して、NFSサーバのフェールオーバーができるようにします。 ここでも同様に、thost1上で下記のコマンドを実行してください。:

 $ insmod drbd
 $ /etc/rc.d/init.d/drbd start
 

thost2上でも同様に実行してください。:

 $ insmod drbd
 $ /etc/rc.d/init.d/drbd start
 

これでDRBDが起動しているはずです。 DRBDがthost1上でプライマリ状態になっていることを確認してください。 DRBDデバイスを/mnt/diskにマウントすると仮定します。 少なくともRedHatやSuSEベースのシステムでは、NFSサーバのステータス情報は/var/lib/nfs にあります。共有されているデバイス上でこのステータス情報を見ることができるようにしたいと思います。 thost1上で、NFSサーバを停止し、下記を実行してください。:

 $ mkdir /mnt/disk
 $ mount /proc/nb0 /mnt/disk
 $ mkdir /mnt/disk/var; mkdir /mnt/disk/var/lib
 $ mv /var/lib/nfs /mnt/disk/var/lib
 $ ln -s /mnt/disk/var/lib/nfs /var/lib/nfs
 

thost2上で、NFSサーバが動作していないことを確認して、下記を実行してください。:

 $ mkdir /mnt/disk
 $ rm -r /var/lib/nfs
 $ ln -s /mnt/disk/var/lib/nfs /var/lib/nfs
 

最後の手順は、実際にNFSマウント用にエクスポートするファイルシステムを設定する手順です。 これは/mnt/disk/export下の階層になります。NFSクライアントが10.0.20.1というIPアドレスを持っていると仮定します。 thost1上で下記を実行してください。:

 $ mkdir /mnt/disk/export
 $ echo "/mnt/disk/export	10.0.20.1(rw)" >> /etc/exports
 

thost2上で下記を実行してください。:

 $ echo "/mnt/disk/export	10.0.20.1(rw)" >> /etc/exports
 

/etc/ha.d/ha.cfファイルでクラスタ内の両ノードの定義を正しく設定しているなら、次に/etc/ha.d/haresources ファイルを編集します。 両方のノードで下記の行をこのファイルに追加してください。

 10-0-1-31.linux-ha.org  10.0.10.10/16 datadisk::drbd0 nfsserver
 

NFSサーバのスクリプトをheartbeatが見つけられるか確認する必要があります。詳細はheartbeatの ドキュメントを参照してください。

10.0.10.10はNFSサーバに設定したIPアドレスです。詳細はheartbeatの ドキュメントを参照してください。 基本的に、この行ではheartbeatが/etc/ha.d/resource.d/datadiskスクリプトをパラメータdrbd0を付けて実行するように 指定しています。 マシンダウン時には、datadiskスクリプトがセカンダリノード上で動作し、drbd0のDRBDデバイスをセカンダリ状態からプライマリ状態 に切り替えます。

両方のマシンで/etc/fstabファイルの編集も必要です。 DRBDデバイスをマシン起動時にマウントしないよう設定することが重要です。これはnoautoフラグで指定します。

 /dev/nb0                /mnt/disk               ext2    noauto          0 0
 

これで、heartbeatを起動することができます。

 /etc/rc.d/init.d/heartbeat start
 

全て正しく設定されていれば、heartbeatはNFSサーバを起動し、仮想インターフェースと結合します。 この時点で、thost1の電源を落とすことができます。すべてが順調に動作すれば、約30秒でthost2が引き継いでNFSサーバを 起動します。テストとして、10.0.20.1のマシンからのNFSマウントや、30秒以上かかるようなファイル操作をいくつか実行してみてください。 いったん一時停止しますが、再び動くようになるので、それが切り替わったサーバであるという事実に気づかないでしょう。ハイアベイラビリティの世界を楽しんでください!