【Route53+EC2】リージョンを跨いだフェイルオーバ型の冗長化を行う

ELBではリージョンを跨いだフェイルオーバ型の冗長化は行えない。 何かあったときに海外のリージョンに待機してあるサーバに切り替えれるよう冗長化したい。   そんなときは、Route53とEC2を使うことでリージョンを跨いだフェイルオーバ型の冗長化が簡単にできる。

以下を進めるには、サーバが2ついるので用意してください。

Route53のヘルスチェックを作成

[Route53] > [Health checks] > [Create health check]と進み、ヘルスチェックの方法を3つから選べるので任意のものを選択(今回はEndpoint)

  • Endpoint
  • Status of other health checks (calculated health check)
  • State of CloudWatch alarm

Endpointを選択した場合はIPアドレスかドメイン名でチェックを行えるので任意のものを選択し入力する

  • IP address
  • Domain name

Nextをクリック。
設定したサーバが死んだら通知するかの設定になるが、今回はしない。
設定したい場合はYesにして通知したいメールアドレスのSNSトピックを入力する。
最後に[Create health check]をクリックし、ヘルスチェックが作成される。

同様にSecondaryサーバ用のヘルスチェックを作成する。
もし、ヘルスチェックの間隔や閾値、その他の細かい設定をしたい場合は[Advanced configuration]で出来る。
切り替えを早くしたい場合は、この間隔や閾値を変更することで早くなる。(弊害もあるので注意)
デフォルトだと2分くらいで切り替えられる。

Route53のレコード設定

[Route53] > [Hosted zones]と進み、任意のHosted zoneを選択、ない場合は作成する。

[Create Record Set]でレコードを作成、外部ドメインを使う場合はインポートする。
先にPrimary用を設定していく。

[Alias]はNoにして、[Name]は任意の値、[Value]にはPrimaryサーバのIPアドレスを設定。
[Routing Policy]にFailoverを設定し、Primaryを選択する。
[Set ID]は勝手に設定されるが、任意のものに変更しても良い。
[Associate with Health Check]をYesにして、先ほど作成したPrimaryのヘルスチェックを選択し、[Save Record Set]をクリックすると作成される。

同様にSecondaryも設定する。
この際に[Name]は先程と同じにし、[Routing Policy]はSecondaryを選択し、[Associate with Health Check]はSecondaryのヘルスチェックを選択する。

設定し終わったら、以下の手順で冗長化の確認を行う。
1. Route53で設定したドメインでアクセスし、Primaryにアクセスすることを確認
2. PrimaryでWebサーバを停止し、再びドメインでアクセスしたときにSecondaryに接続されるかを確認する

確認ができたらフェイルオーバ型の冗長化が完了。

これでサーバが死んだときの自動切り替えはできるが、データベースの同期ができていない。
マスタースレーブで同期することができる「Amzon RDS」を使う必要がある。
作成方法は省くが、作成したときのデータベース名、データベースユーザ名、データベースパスワード、データベースホストをWordPressのwp-config.phpまたは初期インストール時の設定に適用すれば、WordPressでAmazon RDSを使えるので、Amaozn RDSでマスタースレーブにすればデータベースの同期ができる。
非常に簡単!