HeartbeatでHAクラスタ構築

システムを構築する上では冗長化するのは当たり前みたいな感じの世の中ですが
冗長化すると言ってもその実現方法は多種多様です。
今回はそんな冗長化の中でもコストを控えて1台マシンを遊ばせちゃう?
Active-Standby構成をHeartbeatで実現させる手順を紹介します。
正直この構成はあまり好きになれません。なんでって遊ぶサーバが増えちゃうからw
まぁ厳密には遊んでるわけじゃなく待ってる状態なんですけどね。
Heartbeatについては概要など詳しくはここがいい感じ→http://www.atmarkit.co.jp/flinux/rensai/heartbeat01/heartbeat01a.html
さて、今回はこんな構成で手順を紹介していきます。
Heartbeatは、クラスタを組んでいるサーバ同士の死活監視を行い、仮想IPの付け替え
ミドルウェアの起動/停止ディスクのマウントなどの制御を一元的に行ってくれるソフトウェアです。
要するに自分が死んだら引き継ぎ相手に自動的に
ミドルウェアの起動とかディスクのマウントの制御とかVIPの切り替えを行ってくれるわけです。
スクリプトで書いてももちろん実現可能ですが、そこに力を入れるよりカスタマイズをして
アドオン的に使える用に力を入れた方がいいですよね。既に汎用的にも使える訳ですし。
前置きが長くなりましたがいざ構築手順へ。
今回はOSがRHEL5_x86の環境で行ってます。
(RHELではHeartbeatはパッケージが配布されていないのでrpmでこそこそ入れていきます)
まずは、Heartbeatをインストールする前の下準備を。
必要なパッケージとHeartbeatを制御する専用のユーザとグループを作成します。
# yum install libtool-ltdl-devel PyXML lm_sensors*
# groupadd -g 200 haclient
# useradd -u 200 -g haclient -d /home/hacluster -s /bin/bash -c HACLUSTER -m hacluster
# passwd hacluster
rpmパッケージでHeartbeatを入れる場合は必須の作業です。
ユーザ作成を行っておかないと無駄なユーザが勝手に作られてしまうらしい。
次は必要なパッケージをクラスタを組む2台のサーバそれぞれにDL&インストール。
# cd /usr/local/src
# wget http://wiki.linux-ha.org/ja/ReleaseRpm_ja?action=AttachFile&do=get&target=heartbeat-2.1.4-1.rhel5.x86_64.RPMS.tar.gz
# tar zxvf heartbeat-2.1.4-1.rhel5.x86_64.RPMS.tar.gz
# cd heartbeat-2.1.4-1.rhel5.x86_64.RPMS
# rpm -ivh pils-2.1.4-1.x86_64.rpm
# rpm -ivh stonith-2.1.4-1.x86_64.rpm
# rpm -ivh heartbeat-2.1.4-1.x86_64.rpm
無事にパッケージのインストールが完了したら、必要な設定ファイルをいじっていきます。
まずは、お互いを認証するためのファイルを作成(Active, Standby両方)。
# vi /etc/ha.d/authkeys
————————–
auth 1
1 md5 md5でハッシュ化したpasswd
————————–
# chmod 600 /etc/ha.d/authkeys
本来であれば次にcib.xmlを作成するのですが、crmが意図した動きを全くしてくれなかったので断念。
crmはoffの前提で進めていきます。
ここが詳しく構築の手ほどきをしてくれてます→http://enterprisezine.jp/article/detail/162
上記のサイトではPostgreSQLをDBとしてフェイルオーバ時にVIPの付け替え、ストレージのマウントを行う
設定方法が解説されています。
Heartbeatは、/etc/ha.d/haresourcesファイルでVIP制御やミドルウェアの制御、ディスク制御などを
規定にそった書式で書いていきます。
Heartbeatの起動時に、このファイルに書いた順番で左から順に処理されていきます。
たとえば以下の様に書いた場合は
[hostname] drbddisk Filesystem::/dev/drbd0::/data::ext3 pgsql IPaddr::192.168.0.10/24/eth0/192.168.1.255
DRBDのデバイスをマウントして、PostgreSQLを起動させ、192.168.0.10のVIPを付与するといった動作になります。
Standby機側でも同じ書式で記述し設置しておけば、フェイルオーバ時に同じ順番で起動してくれます。
また、Heartbeatで制御したいミドルウェアの起動/停止スクリプトは/etc/ha.d/resource.d/以下に配置します。
(今回であればpgsqlというファイル名でスクリプトを設置)
ここまできたら残りはHeartbeatの核の設定となる/etc/ha.d/ha.cfを編集します。
ログの出力先や死活監視を行う相手のIPアドレスの設定、自分で用意した監視スクリプトの設定
自動フェイルバックなどこと細かく設定します。
簡単な設定ならここを参考にしてください→http://www.thinkit.co.jp/cert/compare/17/9/4.htm
最後に実際にHeartbeatを2台のマシンで起動させ、Active側を落としたりして
ちゃんとフェイルオーバするか確認するだけです。
起動直後にすぐVIPの付与などされないので、初回起動時は気長に待ちましょう。
今回CRMはoffにして構築しましたが原因を特定するために検証を今後していく予定です。
他サイトでは構築手順はあるのですが実際に動かしてみてどうのこうのは
ないんですよね。きっと同じところで苦しんでいる人がいるはず。たぶん。。。
Heartbeatはいろいろと楽しませてくれそうです。他のミドルウェアと組み合わせることで
強固で安くHAクラスタを実現してくれそうですからね。
