HeartBeatによるHAクラスタの設定

HaertbeatはHAクラスタリングを実現するソフトウェアです。

Heartbeatを利用する事により、2台のサーバでサービスのアクティブ/スタンバイ構成をとり、サービスの冗長化が実現出来ます。

 

例えば、httpサービスをしているサーバがあるとします。この時にHeartbeatを使えば、1台のサーバが何らかの障害でサービスを継続する事が困難になった場合、もう1台の呼びサーバに自動で切り替えてサービスを継続する事が可能です。

 

このような構成をHAクラスタ(ハイアベイラビリティーフェールオーバクラスタ)と言い、Heartbeatを利用する事によりこの機能を実現できます。

また、NFSやNAS、DRBD(ネットワークディスクミラー)などと組み合わせる事により、ファイルストレージが必須のサービスも冗長化することができますので、より多くのサービスをHAクラスタ構成にする事が出来ます。

HeartbeattとDRBD(ネットワークディスクミラー)との組み合わせは、DRBD(ネットワークディスクミラー)の設定をご覧ください。

なお、Heartbeatを利用する場合は、ntpなどで時刻を合わせるようにしておいてください。

ここでは、CentOS-5を利用して設定する例を示します。

 

 

Haertbeat構築時の事前計画

heartbeartでHAクラスタを構築する場合、システム構成を事前に決めておく事をお勧めします。たとえば、以下のような項目は事前に決めておきましょう。

本番系サーバのIPアドレス

待機系サーバのIPアドレス

実サービス用(仮想)のIPアドレス

管理サービス(httpなど)

 

今回のサーバ構成例

     仮想IPアドレス(eth0)
            |
   |-----------------------|
   |eth0                   |eth0
------    eth1(監視用)   -------
|    |------------------|     |
| SV1|                  | SV2 |
|    |------------------|     |
------   シリアルケーブ   -------

eth0がサービス系のネットワークインタフェースとし、IPアドレスは以下の通りとします。

仮想IP eth0 192.168.1.1

SV1 eth0 192.168.1.2

SV2 eth0 192.168.1.3

 

eth1はSV1、SV2との死活監視用のネットワークインタフェースとして利用し、IPアドレスは以下の通りとします。

SV1 eth1 192.168.100.1

SV2 eth2 192.168.100.2

 

シリアルケーブルもSV1、SV2との死活監視用に利用します。シリアルケーブルはクロスケーブルを用意してください。

 

シリアルインタフェースの設定

シリアルインタフェースを利用出来るか確認しておきます。

シリアルケーブル(クロス)でSV1、SV2を接続し作業します。

 

片側のサーバで、シリアルインタフェースの/dev/ttyS0を読み込みます。

cat < /dev/ttyS0

 

もう片側のサーバで、/dev/ttyS0に文字列を送ります。

echo "Serial Test" > /dev/ttyS0

 

正常に接続されていれば、読み込んでいるサーバ側でメッセージが表示されます。

Serial Test

この確認ができれば、シリアルケーブルの接続はOKです。

 

 

Heartbeatのインストール

CentOS-5では、Hearbeatのパッケージが標準で提供されているのでこれを利用します。

yum install hearbeat

 

自動起動させるには以下のコマンドで行います。

chkconfig heartbeat on

 

Heartbeatの設定

設定は、/etc/ha.d/以下のha.cfharesourcesauthkeysファイルで行います。

なお、テンプレートファイルが、/usr/share/doc/heartbeat-2.1.3/以下にありますので、これを利用します。

cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/ha.cf 
cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/authkeys 

 

認証方式と認証鍵の設定

/etc/ha.d/authkeysでサーバ間で行われる通信の暗号方式をを指定します。

指定出来る種類は以下の通りです。

sha1:SHA1暗号化方式を使用します。

md5:MD5暗号化方式を使用します。

crc:暗号化は行わずにCRCによるパケットのチェックのみ行います。

今回は、crc方式で設定します。

 

/etc/ha.d/authkeys

auth 1
1 crc

 

また、authkeysのファイルパーミッションは600にする必要があります。

chmod 600 authkeys

なお、設定は2台のサーバで同一にする必要があります。

 

クラスタの設定

ha.cfでheartbeatの基本設定を行います。

設定例を以下に示します。

/etc/ha.d/ha.cf

#logfile        /var/log/ha-log <---ログの出力先を指定します
logfacility     local0 <---ログをsyslogに送ります

keepalive 2 <---ハートビートの監視間隔
deadtime 30 <---相手ホストがダウンしたと判断する時間
warntime 10 <---相手ホストがダウンしたと警告を出すまでの時間
initdead 120 <---起動時、ハートビート監視を開始するまでの時間

udpport	694 <---ブロードキャスト/ユニキャスト利用時のポート番号

baud   19200 <---シリアルのポートレート
serial /dev/ttyS0 <---シリアルのデバイス

ucast eth1 192.168.100.2 <---ハートビートをユニキャストで行う場合のデバイスと相手先IP

auto_failback on <---自動フェールバックのon/off

node sv1 <---クラスタに参加するサーバを指定(uname -nで求める)
node sv2

 

リソースの設定

/etc/ha.d/haresourcesでHAクラスタで管理するリソースの設定を行います。

ここでは、仮想IPとhttpd(Apache)を、Heartbeatの管理リソースとします。

ここでの注意点は、Heartbeatのリソースとして管理されるデーモンのhttpdは、Heartbeatから起動や停止が行われます。

そのため、OSの起動時などにhttpdが自動起動しないよう、あらかじめ停止しておきます。

/etc/init.d/httpd stop

 

また、自動起動もOFFにしておきます。

chkconfig httpd off

 

Heartbeatのリソース設定は以下の通りです。

haresources

sv1       192.168.1.1/24 httpd

 

Heartbeatの動作確認

ここでは、設定したHeartbeatの動作確認を行います。

まずは、両サーバでhearbeatを起動しますが、起動順は、本番系、待機系の順で行います。

/etc/init.d/heartbeat start

 

heartbeatが起動すると、本番系サーバにリソースとして、仮想IPが割り当てられhttpdサーバが起動していると思いますので確認してください。

 

 

フェールオーバ、フェールバックのテスト

現在の設定では、両サーバともauto_failback onになってると思いますので、この状態でフェールオーバ、フェールバックのテストを行います。

 

フェールオーバのテスト

本番系のheartbeatを停止し、本番系から待機系にフェールオーバさせます。

/usr/lib64/heartbeat/heartbeat -k

これで本番系のheartbeatが停止、待機系にフェールオーバするはずです。

待機系にリソースが移り、仮想IP割当とhttpdが起動しているか確認してください。

 

フェールバックのテスト

今度は待機系から本番系にフェールバックを行います。

先ほど、本番系のheartbeatを停止したために、待機系にフェールオーバしていると思います。

この場合、本番系のheartbeatを起動すればフェールバックします。

/etc/init.d/heartbeat start

本番系にリソースが戻り、仮想IP割当とhttpdが起動しているか確認してください。

 

 

オートフェールバックの停止

何らかの障害でフェールオーバした場合には、障害の対応などのため復旧作業をすることになりますが、この時、再起動などによる意図しないタイミングでフェールバックが起らないように、フェールバックは手動オペレーションにする方がより安全かもしれません。

そのような設定をする場合は、待機系サーバのha.cfを以下のように変更してください。

auto_failback off

この設定で、本番系から待機系へはオートフェールオーバがかかりますが、待機系から本番系へはオートフェールバックはかかりません。

 

待機系がリソースを保持している場合に本番系に戻すには、本番系のheartbeatを起動し、全てのシステムが正常に動作している事を確認してから、待機系のheartbeatを再起動します。

/etc/init.d/heartbeat restart

本番系にリソースが戻り、仮想IP割当とhttpdが起動しているか確認してください。

 

 

外部チェックプログラムの利用

ここまでは、フェールオーバするトリガーがheartbeatの停止や2台間でチェックしている死活監視のみでしたが、より実践的にするためにサービスをチェックしてフェールオーバさせる事も可能です。

ここでは、あるIPアドレスにpingが通らなかった場合にフェールオーバするシェルスクリプトを以下のように作成します。

/usr/local/bin/hacheck.sh

#!/bin/sh

CMD=/usr/local/bin/hacheck.sh
VIP=192.168.1.1
INTERVAL=30

while true
do

コマンドファイルが存在しない場合は停止する
## command file check
if [ ! -f $CMD ]; then
        exit -1
fi

仮想IPを持っていない場合はサービスチェックを行わない
## Check Alive
CVIP=`/sbin/ifconfig | grep $VIP | wc -l`
if [ 0 -eq $CVIP ]; then
        sleep $INTERVAL
        continue
fi

対象IPにPingが2回以上通らなかった場合にフェールオーバ
## Check Ping
PING=`/bin/ping -c 5 192.168.1.254 | grep -v grep | grep Unreachable | wc -l`
if [ 2 -lt $PING ];then
	/usr/lib64/heartbeat/heartbeat -k
fi

sleep $INTERVAL
done

 

次に、このスクリプトファイルをheartbeatから起動するようにします。

設定は、/etc/ha.d/ha.cfに以下の行を追加します。

respawn root /usr/local/bin/hacheck.sh

これで、heartbeatを起動すれば、スクリプトが起動しサービスチェックを行ってくれます。

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">

Trackbacks and Pingbacks: