Route53を利用したフェイルオーバーシステムの作成

AWSのRoute53サービスを利用し、冗長構成のあるシステムをつくる。

TL;DR

同一のレコードをPrimaryとSecondaryで作成し
Primary、SecondaryそれぞれでHealth Check to Associateを設定する。
PrimaryのHealth Checkが失敗した場合、Secondaryに遷移する。
SecondaryもダメだったらPrimaryに変わる。
両方同じタイミングでダメになったらPrimaryのまま。

手順

Health Checkの設定

1. Health Checks にてヘルスチェック対象のホスト・サービスを設定

Health Checkを利用するレコードの作成

2-1. Hosted Zones にてフェイルオーバーを行いたいDNSを設定
2-2. Create Record Set にてレコードの作成(Primary)
2-3. Routing Policy にて Failover を選択
2-4. Failover Record Type にて Primary を選択
2-5. Associate with Health Check にて Yes を選択
2-6. Health Check to Associate にて 1. で作成したヘルスチェックを選択
2-7. Create Record Set にてレコードの作成(Secondary)
2-8. Routing Policy にて Failover を選択
2-9. Failover Record Type にて Secondary を選択
2-10. Associate with Health Check にて Yes を選択
2-11. Health Check to Associate にて 1. で作成したヘルスチェックを選択

2つの同じレコードを作成し、応答するレコードをそれぞれ
Primary, Secondaryと指定することでフェイルオーバーする仕組み。

www.example.com:80

=> Primary hoge01.example.com:80 (health check http://hoge01.example.com)

=> Secondary hoge02.example.com:80 (health check http://hoge02.example.com)

こんな構成で http://www.example.com へのアクセスは通常だと
hoge01 へアクセスが行くようになっていて、 hoge01
レスポンスに異常があった場合に hoge02 へ行くようになる。

試しに ヘルスチェックを tcp:24224 にしても問題なく認識したので
fluentdの集約サーバを冗長構成にしておいて

log.example.com:24224

=> Primary hoge01.example.com (health check tcp://hoge01.example.com:24224)

=> Secondary hoge02.example.com (health check tcp://hoge02.example.com:24224)

通常は hoge01 にて集約し、メンテナンスなど
行いたい場合に hoge01 のfluentdを落としたら、自動的に
レコードが切り替わり、 hoge02 の方へログが流れていくような構成が組めたりする。
hoge01 のfluentd を立ち上げるとPrimaryが正常になったことが認識され
レコードは元の hoge01 へ向き直る。

SPOFをなるべくなくしていきたいので、この機能は役立ちそうだ。