読者です 読者をやめる 読者になる 読者になる

まめ畑

ゆるゆると書いていきます

Route53のHealth CheckターゲットをELBで試してみた

AWS S3 R53

先日、Amazon Web Services Blog: Amazon Route 53 Adds ELB Integration for DNS Failover で、Route53のHealth CheckターゲットにELBが指定できるようになりました。

今までも、Route53にはHealth Check機能がありましたが、ELBはHealth Checkターゲットに指定出来ませんでした。それが今回ELBのステータスに連動してDNS Failoverが出来るようになりました。

今回の大きなポイントはRoute53からHealth Checkを行うのではなく、AWS内部でELBとRoute53が連携し、ユーザがHealth Check項目をRoute53に指定するのではなく、ELB配下にインスタンスがいなくなった場合などにDNS Failoverが行われるところです。

設定

実際に設定して、どの位の時間でFailoverするか確認してみました。
Failover先は、S3のStatic Website Hostingです。こちらの設定の説明は割愛しますが、様々なパスでアクセスされてくるので、S3のStatic Website Hostingの設定中の、Error DocumentとIndex Dcoumentで同じメンテナンスページ用のファイルを設定することで、トップへのアクセスも、それ以外のアクセスはNot Foundをトリガーとして指定のメンテナンスページを表示する事が出来ます。

ELBのHealth Checkは
f:id:con_mame:20130602141844p:plain
のように設定しました。health checkの最小時間をセットしました。

Route53のレコードはA(Alias)で設定し、以下のように設定しています。

  • Primary

f:id:con_mame:20130602141839p:plain
Alias TargetはELBのAレコードです

  • Secondary

f:id:con_mame:20130602141841p:plain
Alias TargetはS3のStatic Website Hostingのエンドポイントです。しかし、S3側で表示されるものではないので、このフィールドにフォーカスをすると出てくる物の中から選択します。

この2つの設定でのポイントは、Associate with Health Checkの項目をNOに設定していますが、自動的にELBと連携してくれます。

確認

ELBにぶら下がっているインスタンスすべてのhttpdを止めてどのくらいの時間でFailoverするか確認しました。
ELBのHealth Checkは先の設定で6秒で切り離しと切り戻しが行われるようになっています。

  • 平常時
;; QUESTION SECTION:
;test.conma.me.                 IN      A

;; ANSWER SECTION:
test.conma.me.          60      IN      A       54.xxx.xxx.xxx

ELBのIPアドレスが返ってきています。
f:id:con_mame:20130602141846p:plain
サイトもVPCインスタンスから返ってきています。


ここで、ELB配下のインスタンスすべてのhttpdを停止しました。設定通り約6秒程でELBからの切り離しが行われました。
しかし、実際にDNSから返却されるIPアドレスが変わったのでは2分ほど経過した後でした。

;; QUESTION SECTION:
;test.conma.me.                 IN      A

;; ANSWER SECTION:
test.conma.me.          37      IN      A       27.xxx.xxx.xxx

S3のIPアドレスが返ってきています。
f:id:con_mame:20130602141851p:plain
S3からデータが返ってきています。


ここで、ELB配下のインスタンスを1台でも元に戻すと、やはり6秒程で切り戻されます。しかし、実際にDNSが返却するIPアドレスがELBのものに変わるまで、1-2分程かかりました。

まとめ

数回Failoverを試してみましたが平均して、1−2分ほどDNSからの返却IPアドレスが変わるまで時間がかかります。また、Failover先をS3ではなくInstanceにしても変わりありませんでした。
A(Alias)レコードで設定しているため、CNAMEではなくAレコードが返ってきていますが、A(Alias)はTTLが60秒に自動的に設定されます。IPアドレスが変更されるまで、大体このTTL程かかります。

ISPのDNSではなくRoute53のDNSで名前解決するように変更しても同じくです。

今回の機能拡張で、ELBを用いてサービスを提供しているものに対してもRoute53を用いてSorryサーバへのアクセス振り分けが可能になりました。
しかし、すぐに切り替わるのではく1−2分はアクセスが出来ない時間が発生するので注意が必要です。また、行儀悪くDNSレスポンスをキャッシュするDNSサーバを使っていると上手く切り替えが行えないこともあります。

ELBにSorryサーバが設定出来たり、ELBからStaticなSorryページを返せたら嬉しいですね。