こんちには! インフラエンジニアの柳瀬です! AWSにはElastic Load BalancerやRDSのMulti-AZなど冗長化を構成する上で便利な機能が盛り込まれています。
今回は英語版のフォーラムで紹介されているElastic IPとHeartBeatを使用した冗長化を試してみました。 今回テストを行った環境は以下の通りです。
- Ubuntu 10.04 LTS
- HeartBeat 3.0.3
それでは環境を用意しましょう。これから記載する設定はHAを構成するノードそれぞれで行ってください。
まずはそれぞれのUbuntuにHost名を定義します。
$ vi /etc/hostname 1 heartbeat01
次にHeartBeatをインストールして設定を行います。
$ sudo apt-get install heartbeat $ sudo vi /etc/ha.d/ha.cf 1 logfile /var/log/heartbeat.log 2 node heartbeat01 heartbeat02 3 keepalive 1 4 deadtime 10 5 ucast eth0 10.150.170.180 #internal IP of the peer 6 auto_failback no $ sudo i /etc/ha.d/haresources 1 heartbeat01 elastic-ip $ sudo vi /etc/ha.d/authkeys 1 auth 1 2 1 sha1 yourpassword
Elastic IPの付け替えのスクリプトに使用しているツールをインストールします。
$ curl https://raw.github.com/timkay/aws/master/aws -o aws % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 76826 100 76826 0 0 43721 0 0:00:01 0:00:01 --:--:-- 80869 $ sudo mv ./aws /usr/local/bin/ $ chmod +x /usr/local/bin/aws $ vi .awssecret 1 YOURACCESSID 2 YOURSECRETACCESSKEY $ chmod 600 .awssecret $ sudo cp .awssecret /root/ $ aws describe-addresses --region ap-northeast-1 +---------------+------------+ | publicIp | instanceId | +---------------+------------+ | 111.12.123.12 | i-xxxxxxxx | | 111.21.210.21 | | +---------------+------------+
最後にElastic IPのつけかえを行っているスクリプトを用意します。
※例では東京リージョンを指定していますが、こちらはそれぞれの環境で変更してください
$ sudo vi /etc/init.d/elastic-ip 1 #!/bin/bash 2 3 4 MY_ID="i-6efaef6f" # different for each node 5 ELASTIC_IP="176.32.87.217" 6 REGION="ap-northeast-1" 7 8 case $1 in 9 start) 10 aws associate-address "$ELASTIC_IP" -i "$MY_ID" --region "$REGION" > /dev/null 11 echo $0 started 12 ;; 13 stop) 14 aws disassociate-address "$ELASTIC_IP" --region "$REGION" > /dev/null 15 echo $0 stopped 16 ;; 17 status) 18 aws describe-addresses --region "$REGION" | grep "$ELASTIC_IP" | grep "$MY_ID" > /dev/null 19 # grep will return true if this ip is mapped to this instance 20 [ $? -eq 0 ] && echo $0 OK || echo $0 FAIL 21 ;; 22 esac $ chmod +x /etc/init.d/elastic-ip
最後にHeartBeatを実行して準備完了です。
$ sudo /etc/init.d/heartbeat start
動作確認として以下のようにHeartBeat01のHeartBeatを停止してみると、無事にElastic IPが02に移動しています。
$ sudo /etc/init.d/heartbeat stop
これはあくまでHeartBeatを使用してElastic IPを付け替えるだけなので実際にはデータはS3に外出ししたり、lsyncdなどのツールでサーバ間で同期をとるなどの設計が必要です。
今回は通常のEC2インスタンスで実験を行いましたが、ローカルIPが固定出来てElastic Load Balancerが使えないVPCとかではニーズがありそうですね。