今回は、先日書籍(Amazon Web Servicesクラウドデザインパターン設計ガイド)が発売された
Cloud Design Pattern(CDP)の記事になります。
対象は「Floating IPパターン」です。
以前、上記のパターンをHeartbeat(Pacemaker)でEIPの付け替えの記事で紹介しました。
今回は、EIPで切り替えるのではなく、ELBを利用して切り替える方法を試してみます。
これは、本パターンの「その他」に記載されている下記の内容を実現する方法の一つになります。
予備サーバへの切り替えはEIPを用いず、ELBを利用して
ヘルスチェックファイルの追加/削除で行う手段もある。
基本的には上記で紹介した「Heartbeat(Pacemaker)でEIPの付け替え」同様、Heartbeatで相互監視を行いアクティブなEC2に障害が発生した際、スタンバイのEC2にフェールオーバーします。
しかし、今回は上図のようにELBを利用している為、スタンバイのEC2のヘルスチェックファイル(ELBが監視)を作成するのみでフェイルオーバーが可能となります。
具体的には以下のようなことになります。
- アクティブEC2のみヘルスチェックファイルを配置する。
スタンバイEC2には配置しないことで、スタンバイEC2はELBから切り離された状態にしておく。 - アクティブEC2に障害が発生した場合、相互監視しているHeartbeatが
スタンバイEC2にヘルスチェクファイルを配置し、ELBと接続できるようにする。 - その際アクティブ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を利用しない分、手軽に実装できると思います。