2012年4月30日月曜日

Heartbeat(Pacemaker)でEIPの付け替え

スズキです。

CDPネタです。今回の対象は「Floating IPパターン」です。



このパターンの「その他」に
障害検知を行う際は、HeartBeatやNagios、Zabbixといった監視ソフトを
利用してもよい。EIPの付け替えはプログラムから実行できるので、
監視ソフトと組み合わせれば自動化を行うこともできる。
といった記載があります。

今回は、Heartbeat(Pacemaker)を利用して自動的にEIPを付け替える方法を
試してみました。

すでに、Heartbeat(Pacemaker)に関しては下記で導入し
VPC上のCentOS6.2にHeartbeatをインストールし起動(アップデート版)
EIPを付け替えるPHPスクリプトも次のように用意はしています。
EIPを付け替えるPHPスクリプト
後はPacemakerのリソース管理で上記のスクリプトを利用して、
アクティブサーバに障害が発生して場合にEIPをスタンバイサーバに
付け替える ように設定するだけです。

PacemakerによるEIPの付け替え設定は、LSBで行うことにします。
これは、EIPを付け替える"/etc/init.d/eip"のような起動スクリプトを
用意して、モニタリングやフェイルオーバー時の起動/停止を
Pacemakerがこの起動スクリプトを利用するように設定する方法です。

ということで、"/etc/init.d/eip"を下記のように用意しました。
スクリプト中にでてくる"/opt/aws/bin/associate-eip"は、
上記ブログ(EIPを付け替えるPHPスクリプト)で紹介したものとなります。
#!/bin/bash
#
# eip        Associate EIP.
#
# chkconfig: 2345 99 10
# description: Associate EIP
 
# Source function library.
. /etc/init.d/functions
 
prog=eip
lock=/var/lock/subsys/$prog
log=/opt/aws/log/error.log
 
# Source config
if [ -f /etc/sysconfig/$prog ] ; then
    . /etc/sysconfig/$prog
fi

case "$1" in
    start)
        echo `date +"%Y-%m-%d %T"` "begin associate-eip" >> $log
        touch $lock
        /opt/aws/bin/associate-eip >> $log 2>&1
        exit $?
        ;;
    stop)
        echo `date +"%Y-%m-%d %T"` "end   associate-eip" >> $log
        rm -f $lock
        exit $?
        ;;
    status)
        if [ -f $lock ]
        then
            exit 0
        else
            exit 3
        fi
        ;;
    *)
        echo $"Usage: $0 {start|stop}"
        exit 1
esac
注意点として、上記のリターンコードは下記に準じている必要があります。
Is This init Script LSB Compatible?
特に注意するべき点は、サービスが停止状態で"status"を実行した時に、 リターンコードを3にする点でしょうか?

そして最後に下記のように、Pacemakerへの設定です。
# crm configure property no-quorum-policy="ignore" stonith-enabled="false"
# crm configure rsc_defaults resource-stickiness="INFINITY" migration-threshold="1"
# crm configure primitive eip lsb:eip
※resource-stickiness="INFINITY"で自動フェイルバックしないようにしています。

それでは実際にフェイルオーバーの確認をしてみます。

最初の状態は下記の通り、"ha-b"がアクティブで、
============
Last updated: Mon Apr 30 02:07:33 2012
Stack: Heartbeat
Current DC: ha-b (ea5894a8-4664-3723-dc36-77d7f1e1ad08) - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, unknown expected votes
1 Resources configured.
============

Online: [ ha-a ha-b ]

eip     (lsb:eip): Started ha-b
EIPも"ha-b"に振られています。


次に"ha-b"のHeartbeatを停止します。
# /etc/init.d/heartbeat stop
Stopping High-Availability services: Done.

すると"ha-b"がオフラインになり、"ha-b"がアクティブになっていることが
わかります。
============
Last updated: Mon Apr 30 02:12:08 2012
Stack: Heartbeat
Current DC: ha-a (7974d41a-897b-ee90-0770-7ec9e990db35) - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, unknown expected votes
1 Resources configured.
============

Online: [ ha-a ]
OFFLINE: [ ha-b ]

eip     (lsb:eip): Started ha-a
EIPも"ha-a"の方に付け替えられています。


フェイルオーバー前後のPing結果は下記のような感じです。
$ ping 54.248.108.190
PING 54.248.108.190 (54.248.108.190): 56 data bytes
...
64 bytes from 54.248.108.190: icmp_seq=8 ttl=50 time=5.862 ms
64 bytes from 54.248.108.190: icmp_seq=9 ttl=50 time=5.040 ms
64 bytes from 54.248.108.190: icmp_seq=10 ttl=50 time=5.072 ms
Request timeout for icmp_seq 11
64 bytes from 54.248.108.190: icmp_seq=12 ttl=50 time=5.435 ms
64 bytes from 54.248.108.190: icmp_seq=13 ttl=50 time=7.674 ms
64 bytes from 54.248.108.190: icmp_seq=14 ttl=50 time=4.928 ms
64 bytes from 54.248.108.190: icmp_seq=15 ttl=50 time=4.796 ms
64 bytes from 54.248.108.190: icmp_seq=16 ttl=50 time=5.321 ms
64 bytes from 54.248.108.190: icmp_seq=17 ttl=50 time=5.048 ms
64 bytes from 54.248.108.190: icmp_seq=18 ttl=50 time=4.873 ms
64 bytes from 54.248.108.190: icmp_seq=19 ttl=50 time=5.381 ms
Request timeout for icmp_seq 20
Request timeout for icmp_seq 21
Request timeout for icmp_seq 22
64 bytes from 54.248.108.190: icmp_seq=23 ttl=50 time=6.571 ms
64 bytes from 54.248.108.190: icmp_seq=24 ttl=50 time=6.282 ms
64 bytes from 54.248.108.190: icmp_seq=25 ttl=50 time=6.488 ms
(昨日、試したときは、切り替えにもっと時間がかかってましたが...)

図にすると、こんな感じでしょうか?


ENIの付け替えも試したいなー...
--------
http://www.suz-lab.com

0 コメント: