2013年1月31日木曜日

"Corosync&Pacemaker"の自動フェイルオーバーでEC2(VPC)の"Public IP"と"Private IP"を同時に切り替える

スズキです。

下記のように、EC2(VPC)のIPの付け替え(Floating IPパターン)を試してきましたが、
いよいよ、"Corosync & Pacemaker"で自動的に付け替える(フェイルオーバ)部分を
紹介します。


といっても、次の記事の「"corosync"と"pacemaker"の導入と設定」までの
手順は同様となります。
"High Availability NAT"の作成(CentOS6)

そして、フェイルオーバに使うスクリプトは下記となり、
# cat /etc/init.d/associate-private-ip 
#!/bin/sh
#
# chkconfig: 2345 99 10
# description: Associate EIP

# Source Function Library
. /etc/init.d/functions

# System Variable
prog=${0##*/}
lock=/var/lock/subsys/$prog

# User Variavle
PRIVATE_IP=0.0.0.0

# Source Config
if [ -f /etc/sysconfig/$prog ] ; then
    . /etc/sysconfig/$prog
fi

#
case "$1" in
    start)
        touch $lock
        AZ=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
        REGION=`echo $AZ | cut -c 1-$((${#AZ} - 1))`
        MAC=`curl -s http://169.254.169.254/latest/meta-data/mac`
        INTERFACE_ID=`curl -s http://169.254.169.254/latest/meta-data/network/interfaces/macs/$MAC/interface-id`
        aws --region $REGION ec2 assign-private-ip-addresses \
        --network-interface-id $INTERFACE_ID \
        --private-ip-addresses $PRIVATE_IP \
        --allow-reassignment \
        | logger -s -i -t $prog
        exit ${PIPESTATUS[0]}
        ;;
    stop)
        rm -f $lock
        exit 0
        ;;
    status)
        if [ -f $lock ] ; then
            exit 0
        else
            exit 3
        fi
        ;;
    *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
esac
可変情報は、次のファイルに設定します。
# cat /etc/sysconfig/associate-private-ip 
PRIVATE_IP=10.10.8.200

Pacemakerへの登録は下記の通りです。
crm configure property no-quorum-policy="ignore" stonith-enabled="false"
crm configure rsc_defaults resource-stickiness="INFINITY" migration-threshold="1"
crm configure primitive httpd lsb:httpd op monitor interval="5s"
crm configure primitive associate-private-ip lsb:associate-private-ip
crm configure group ha-web httpd associate-private-ip
※Apacheに障害が発生したらフェイルオーバー(IPの切り替え)を行うようにしています。

ここまでで、下記のような状態になっているはずです。
# crm_mon
============
Last updated: Wed Jan 30 20:46:08 2013
Last change: Wed Jan 30 20:46:01 2013 via cibadmin on ip-10-10-8-114
Stack: openais
Current DC: ip-10-10-8-122 - partition with quorum
Version: 1.1.7-6.el6-148fccfd5985c5590cc601123c6c16e966b85d14
2 Nodes configured, 2 expected votes
2 Resources configured.
============

Online: [ ip-10-10-8-122 ip-10-10-8-114 ]

 Resource Group: ha-web
     httpd (lsb:httpd):    Started ip-10-10-8-114
     associate-private-ip (lsb:associate-private-ip):     Started ip-10-10-8-114

アクティブなEC2の方でApacheを停止すると、
# service httpd stop
httpd を停止中:                                            [  OK  ]
下記のようにフェイルオーバーされ、IPアドレスが切り替わります。
============
Last updated: Wed Jan 30 20:48:08 2013
Last change: Wed Jan 30 20:46:01 2013 via cibadmin on ip-10-10-8-114
Stack: openais
Current DC: ip-10-10-8-122 - partition with quorum
Version: 1.1.7-6.el6-148fccfd5985c5590cc601123c6c16e966b85d14
2 Nodes configured, 2 expected votes
2 Resources configured.
============

Online: [ ip-10-10-8-122 ip-10-10-8-114 ]

 Resource Group: ha-web
     httpd (lsb:httpd):    Started ip-10-10-8-122
     associate-private-ip (lsb:associate-private-ip):     Started ip-10-10-8-122

Failed actions:
    httpd_monitor_5000 (node=ip-10-10-8-114, call=4, rc=7, status=complete): not running
※AWSコンソールで実際のIPアドレスの切り替わりは確認できます。

ちなみに、二つ目のIPアドレスをCentOS6で利用するためには、
下記で紹介したような手順が実際には必要になります。
ENIに"Secondary IP"をつけてCentOS(6)で利用

実際にApacheのフェイルオーバー時の停止時間を確認したところ、
下記のように、約10秒程度でした。
connected to 54.249.50.18:80 (198 bytes), seq=272 time=2.40 ms 
connected to 54.249.50.18:80 (198 bytes), seq=273 time=4.78 ms 
connected to 54.249.50.18:80 (198 bytes), seq=274 time=2.65 ms 
could not connect (Connection refused)
could not connect (Connection refused)
could not connect (Connection refused)
could not connect (Connection refused)
could not connect (Connection refused)
could not connect (Connection refused)
connected to 54.249.50.18:80 (198 bytes), seq=281 time=8201.49 ms 
connected to 54.249.50.18:80 (198 bytes), seq=282 time=3.06 ms 
connected to 54.249.50.18:80 (198 bytes), seq=283 time=2.86 ms 

これも自動で作成できるようにしたい...
--------
http://www.suz-lab.com

0 コメント: