Release: Amazon Relational Database Service on 2010-05-17
これにより、RDSのダウンタイムがほぼ0になるという素敵な機能です!
Multi-AZ deploymentを有効にするとプライマリDBとは別のAvailability Zoneにホットスタンバイとしてレプリカが作成されます。
レプリカはプライマリDBと同期していて、プライマリDBが止まると自動的にレプリカにスイッチします。
フェイルオーバーの仕組みはシンプルで、CNAMEレコードを変更し、スタンバイDBに向けるだけです。
スタンバイDBに切りかわるタイミングは以下のとおりです。
- Availabilyty Zoneが落ちた時
- プライマリDBが落ちた時
- DBのスケールを変更した時
- ソフトウェアにパッチを当てている時
DBのバックアップ時に発生していたI/Oフリーズもなくなるようです。たぶんレプリカの方でバックアップを取るようになるのでしょう。
また、レプリカには直接アクセスすることができないので、Read Onlyなクエリをレプリカに逃がすというスケールアウト的な使い方はできません。
忘れてはならないコストですが、利用料は倍になります。
インスタンスが二つになるのでしょうがないと言えばしょうがないですね。
Multi-AZを適用する方法はすごく簡単です。
まずは以下から最新版のコマンドラインツールをダウンロードして使えるようにします。
Amazon RDS Command Line Toolkit
バージョンが1.1.004ならOKです。
$ rds-version
Relational Database Service CLI version 1.1.004 (API 2010-01-01)
あとは以下のコマンドを叩くだけで既存のインスタンスにMulti-AZ 機能を適用できます。
$ rds-modify-db-instance dbname --multi-az true
既存のインスタンスに適用すると、適用中に数分DBがダウンすると書かれているので、実行するタイミングには注意が必要です。
実際試してみたところ、このコマンドを実行するとインスタンスにPending MultAZフラグが立ちます。(rds-describe-db-instancesコマンドで確認できます。)
僕の環境ではコマンド実行から数時間経過しましたがまだPending状態のままです。
PendingからMulti-AZが有効の状態になるにはかなり時間がかかりそうです。
Pendingの状態でもDBには接続できているので、準備ができて、実際に適用するタイミングでちょっとばかりアクセスできなくなるんだと思います。
また、新規作成の際も--multi-azオプションを指定してやるだけみたいです。
これでますますRDSが手放せなくなりそうです。