Heartbeat導入検証

 
両サーバの障害監視をするために、Heartbeat構築の検証を行った。
 
検証環境
 
サーバ1
debhost01:192.168.36.121
サーバ2
debhost02:192.168.36.122
 
本検証では、一方のサーバが障害発生した場合、このサーバ上の
サービスをもう一方のサーバ上へフェールオーバーできることを
目的にし、heartbeatを構築
 
 
 イメージ図の挿入、以下どうかな~・・・
 
 
 
 
 
障害が起るとき
 
 
Heartbeatは、リソースに対する監視・制御が、リソース・エージェント(RA)によって実現される。
制御できるリソースは、RAを参照してください。
提供されているものは、以下参考に
PostgreSQL, MySQL, Oracle, DRBD, Apache,仮想アドレス,ファイルシステムなど・・・
 
 
 
Heartbeatの導入
 
・Heartbeatインストール
# apt-get update
# apt-get install heartbeat-2
 
Heartbeatの設定
 
・Heartbeat設定
 
Heartbeatの設定ファイルは、以下3つある。
 
ディレクトリ/etc/ha.d/の中に
①authkeys→ノードの認証
②ha.cf→Heartbeatの全般構成
③Heartbeatのv1とv2の設定が異なる。
・v1の場合:
haresources→リソースの構成
を作成する必要がある。
・v2の場合:(今回採用し実行)
ファイル/var/lib/heartbeat/crm/cib.xml の設定を行う。
 
サンプルファイルをコピーで持ってくる。
# cp /usr/share/doc/heartbeat/authkeys /etc/ha.d/.
# cp /usr/share/doc/heartbeat/ha.cf.gz /etc/ha.d/.
# cp /usr/share/doc/heartbeat/haresources.gz /etc/ha.d/.
# cd /etc/ha.d/
# gunzip ha.cf.gz
# gunzip haresources.gz
以下それぞれの設定について、説明していく。。
 
①ファイルauthkeysの編集
# vi /etc/ha.d/authkeys

以下のコメントを解除
------------------
#auth 1
→auth 2
#2 sha1 HI!
→2 sha1 FooFunFactory
------------------

パーミッション変更
# chmod 600 /etc/ha.d/authkeys
 
ファイルauthkeysの説明は以下を参照してください。
-----------------------
authkeysファイルを使用して、クラスタのメンバーを認証します。
以下の3種類の認証方法を使用できます。
crc:セキュリティをほとんど持たず、多くのリソースを使用しません。
   実際のネットワークでは使用しないでください。
md5:セキュリティを備え、それほど多くのCPUリソースを消費しません。
sha1:現在使用可能な中では最高のセキュリティを備えています。
-----------------------

②ファイルha.cfの編集

# vi /etc/ha.d/ha.cf
ハートビットは、eth0を使用し、仮想IPは192.168.36.126に設定する。
------------------
#logfacility    local0
→コメントアウトを外す:logfacility    local0
keepalive 2 #Heartbeatの実行間隔
deadtime 30 #Heartbeatに応答しなくなってから、ノードが死んだと認識するまでの時間
warntime 10 #Heartbeatに応答しなくなってから警告を出すまでの時間
initdead 120 #起動時のノードが停止していると判断するまでの待機時間
udpport 694 #Heartbeatで使うudpのport番号。デフォルトは694です。
bcast eth0 #Heartbeatのブロードキャストをeth0経由で流す
auto_failback on #primary復帰時に切り戻す
node debhost01 #クラスタに参加するのノード名
node debhost02 #クラスタに参加するのノード名
ping 192.168.36.126 #ipfailでチェックするターゲット
respawn hacluster /usr/lib/heartbeat/ipfail #ネットワークの正常性チェック
#respawn root /usr/lib/heartbeat/pingd -m 100 -d 5s -a default_ping_set
use_logd yes #logdデーモンの利用
crm on #Heartbeatでv2設定をする場合はon→v1の場合、設定項目ない
------------------
 
ファイルha.cf説明は以下を参照してください。
-----------------------
udpport
 ノード間の通信にHeartbeatが使用するポートを指定します。デフォルトは694です。
keepalive
 キープ・アライブ・パケットの間隔を指定します。
deadtime
 Heartbeatがクラスタのノードが停止していると判断するまでの時間を指定します。
initdead
 起動時間とネットワーク初期化を考慮して、(再起動後などに)全てが最初に起動してから、ノードが停止していると
判断するまでの待機時間を指定します。
bcast
 キープ・アライブ・パケットを送信するインターフェースを指定します(ブロードキャストを使用する場合)。
use_logd
 ha-logdを使用します。「yes」に設定することをお勧めします。

ログデーモンの構成ファイルをチェックしてください(デフォルトは/etc/logd.cfです)。
/usr/share/doc/heartbeat-2/ha_logd.cfでは、例が紹介されています。
logfacility
 メッセージのログに使用するsyslogログファシリティを定義します。use_logdが有効な場合は無視されます。
logfile
 Heartbeatのデバッグ以外のメッセージは全て、このファイルに出力されます。use_logdが有効な場合は無視されます。
debugfile
 Heartbeatがデバッグメッセージを書き込むファイルを指定します。use_logdが有効な場合は無視されます。
node
 どのマシンがクラスタ内にあるかを通知します。
crm
 Heartbeatでv2スタイルのクラスタマネージャを実行するかどうかを指定します。ここではonに設定しています。
 
注: Heartbeat 1セットアップを使用する場合は、crmをoffに設定します。
-----------------------
 
 
③ファイル/var/lib/heartbeat/crm/cib.xml の設定を行う。
 Heartbeat v2で編集を行う。
 
・heartbeatの起動
 両サーバ上、以下実行
# /etc/init.d/heartbeat start
・クラスタステータスの確認
# /usr/sbin/crm_mon -i 3
 
下の画面が出力されるので、しばらくしたら各Nodeが”online”になるのを確認。
Refresh in 1s...

============
Last updated: Fri Jan 15 14:48:24 2010
Current DC: debhost02 (986d636d-1ee5-4a48-a241-0bb23468fb32)
2 Nodes configured.
0 Resources configured.
============

Node: debhost02 (986d636d-1ee5-4a48-a241-0bb23468fb32): online
Node: debhost01 (14cdc6fb-abec-4c88-bacc-867aea34c829): online

これで、基本的な設定は完了。
※この時点で、/var/lib/heartbeat/crm/cib.xmlが自動的に生成されている。

 
次、cib.xmlについて、RAを参考しリソース追加し、各サービスの制御を行う。
 
RAは,リソースを監視・制御する、シェル・スクリプトで記述されたプログラムで、
次のディレクトリに配置されている。
/usr/lib/ocf/resource.d/heartbeat
 
たとえば、Heartbeatでは、仮想IPアドレスなどのリソースを監視・制御するものは、
IPaddrというRA(リソースエージェント)で実現する。
上述ディレクトリの下に配置されているRAのファイルを開いて、各「</parameter>」を確認し、
設定の値をcib.xmlへ反映する。
 
自動生成されたcib.xmlに、各リソースを追加するやり方もあるのが、
以下、cib.xmlは変換ツールを使い、ひな形のharesourcesを作成する。
 
必要に応じて、リソースを追加してください。
# vi ~/haresources.tmp

記載する内容:
------------------
プライマリホスト名
仮IP/マスク/インターフェース
drbdのリソース
ファイルシステム/デバイス/マウント先/使用ファイルシステム
Xenの設定ファイル
------------------

リソース編集内容:
------------------
debhost01 \
IPaddr::192.168.36.126/24/eth0/192.168.36.255 \
drbddisk::r0 \
Filesystem::/dev/drbd0::/drbd::ext3 \
Xen::/etc/xen/xenvm1.cfg
------------------

自動生成されたcib.xmlがすでにあると怒られるので削除する。

# rm /var/lib/heartbeat/crm/cib.xml*
※heartbeatを停止し、cib.xmlを修正して再起動する時、この削除手順も必要!
 
変換ツールを実行

# python /usr/lib/heartbeat/haresources2cib.py ~/haresources.tmp
ホストdebhost02にも同じcib.xmlが必要なので、scpにて転送する
# scp /var/lib/heartbeat/crm/cib.xml root@ 192.168.36.122:/var/lib/heartbeat/crm/
  
cib.xmlの権限を注意!!
# chown -R hacluster:haclient /var/lib/heartbeat/crm/cib.xml
# chmod -R 600 /var/lib/heartbeat/crm/cib.xml
 
cib.xmlの記述が正しいかどうか確認
# crm_verify -x /var/lib/heartbeat/crm/cib.xml
 
Heartbeatにて各サービスを制御
 
・リソースが仮IP(RA:IPaddr)の場合
 
ツール変換のバッグがあるみたいですので、手動で以下3箇所を修正/追加:
------------------
一箇所:
<nvpair id="IPaddr_192_168_36_123_attr_1" name="nic" value="24"/>
→<nvpair id="IPaddr_192_168_36_123_attr_1" name="nic" value="eth0"/>
二箇所:
<nvpair id="IPaddr_192_168_36_123_attr_2" name="cidr_netmask" value="eth0"/>
→<nvpair id="IPaddr_192_168_36_123_attr_2" name="cidr_netmask" value="24"/>
三箇所:
<rule id="prefered_location_group_1" score="100">
→<rule id="prefered_location_group_1" role="Master" score="200">
------------------
 
修正した後、両サーバ上、以下実行
# /etc/init.d/heartbeat start
 
しばらく待って、両サーバがonlineになり、設定したリソースがサーバ1上でstartされた。
 
・リソースがDRBD(RA:drbd)の場合:
 
プライマリノードで df の結果を見ると DRBD ディスクが自動的にマウントされる。
#drbdadm state r0
# df -h
プライマリ側で HeartBeat を停止し、フェイルオーバーするか確認する。
# /etc/init.d/heartbeat stop
セカンダリ側でcrm_mon を実行して確認してみます。
正常に切り替わり、DRBDディスクも自動的にマウントされている。
#drbdadm state r0
# df -h
# crm_mon -i 3

プライマリ側で再び HeartBeat を起動し、フェイルバックするか確認。
# /etc/init.d/heartbeat start
 
プライマリ側でcrm_mon を実行して確認してみます。
正常に切り替わり、DRBDディスクも再び自動的にマウントされている。
#drbdadm state r0
# df -h
# crm_mon -i 3

・Heartbeatコマンドの参考:
 
一個のノートをstanbdyにしたい場合:
# crm_standby -v true -U ホスト名
 
stanbdy解除:
# crm_standby -D -U ホスト名
リソースリスト:
# crm_resource -L
リソースID確認:
# crm_resource -W -r リソースID
フェイルカウントのクリア
# crm_failcount -D -r リソースID -U ホスト名 -G
リソース移動: 
# crm_resource -M -r リソースID
 HeartbeatとXenの連携は次回の予定