2012年10月1日月曜日

ELBとHeartbeatでアクティブ/スタンバイ構成

スズキです。

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


以前このパターンを、Heartbeat(Pacemaker)を利用して、障害時に自動的に
切り替える方法を紹介しました。
Heartbeat(Pacemaker)でEIPの付け替え

今回は、EIPで切り替えるのではなく、ELBを利用して切り替える方法を試してみます。

これは、このパターンの「その他」に記載されている下記の内容の実現方法の一つです。
予備サーバへの切り替えはEIPを用いず、ELBを利用してヘルスチェックファイルの
追加/削除で行う手段もある。
基本的には上記で紹介した「Heartbeat(Pacemaker)でEIPの付け替え」同様にHeartbeatで
相互監視を行い、アクティブなEC2に障害が発生したら、スタンバイのEC2に
フェールオーバーします。


しかし、こちらは上図のようにELBを利用しているので、フェイルオーバーはスタンバイの
EC2のヘルスチェックファイル(ELBが監視)を作成するのみで可能です。

つまり、
  1. アクティブEC2のみヘルスチェックファイルを配置し、スタンバイEC2には
    配置しないことで、スタンバイEC2はELBから切り離された状態にしておく。

  2. アクティブEC2に障害が発生した場合は、相互監視しているHeartbeatが
    スタンバイEC2のヘルスチェクファイルを配置しELBと接続できるようにする。

  3. アクティブEC2は、そもそも障害中なのでELBから切り離された状態になっている
といった感じでしょか?

Heartbeatがフェイルオーバーに利用するスクリプト(/etc/init.d/failover)は下記のように
しています。
#!/bin/sh
#
# chkconfig: 2345 99 10
# description: Failover

# Source function library.
. /etc/init.d/functions
  
prog=${0##*/}
lock=/var/lock/subsys/$prog
  
# Source config
if [ -f /etc/sysconfig/$prog ] ; then
    . /etc/sysconfig/$prog
fi
 
case "$1" in
    start)
        logger -s -i -t $prog "start"
        touch ${HEALTH_CHECK_FILE} 2 > &1 | logger -s -i -t $prog
        touch $lock
        exit $?
        ;;
    stop)
        logger -s -i -t $prog "stop"
        rm -f ${HEALTH_CHECK_FILE} 2 > &1 | logger -s -i -t $prog
        rm -f $lock
        exit $?
        ;;
    status)
        if [ -f $lock ]
        then
            exit 0
        else
            exit 3
        fi
        ;;
    *)
        echo $"Usage: $0 {start|stop|status}"
        exit 1
esac
対象のヘルスチェックファイルは"/etc/sysconfig/failover"で次のように指定します。
HEALTH_CHECK_FILE=/var/www/html/healthcheck.txt

EIPの付け替えより、こちらの方がAWSのAPIを利用しない分、手軽に実装できると思います。

HeartbeatよりCorosync使った方がいいのかなー?
--------
http://www.suz-lab.com

0 コメント: