Route53のHealth CheckターゲットをELBで試してみた
先日、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は
のように設定しました。health checkの最小時間をセットしました。
Route53のレコードはA(Alias)で設定し、以下のように設定しています。
- Primary
Alias TargetはELBのAレコードです
- Secondary
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アドレスが返ってきています。
サイトも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アドレスが返ってきています。
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ページを返せたら嬉しいですね。