今回は、先日書籍(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が監視)を作成するのみでフェイルオーバーが可能となります。

具体的には以下のようなことになります。

  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を利用しない分、手軽に実装できると思います。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら