はじめに
RDSデータベースのデプロイオプションの一つである、マルチAZ DBインスタンスデプロイを使うにあたって気になることを調べてみる。
補足:デプロイオプションの種類
デプロイオプションの種類としては以下が存在する。- マルチ AZ DB クラスターデプロイ
- マルチ AZ DB インスタンスデプロイ
- シングル AZ DB インスタンスデプロイ
それぞれについての説明はこちら。
構成
(出典:Amazon RDS のマルチ AZ DB インスタンスデプロイ | AWS)
できること
自動フェイルオーバー
データの損失と手動による介入なしで、60 秒という速さで完了する自動データベースフェイルオーバーにより、アプリケーションの高可用性をサポートします。データベースのパフォーマンスを保護する
スタンバイインスタンスからバックアップすることにより、バックアップ中にプライマリでの I/O アクティビティの一時停止を回避します。耐久性を向上させる
RDS マルチ AZ 同期レプリケーションテクノロジーを使用して、スタンバイデータベースインスタンスのデータをプライマリに合わせた最新の状態に保ちます。可用性を高める
2 つ目の AZ にスタンバイインスタンスをデプロイすることで可用性を高め、AZ またはデータベースインスタンスに障害が発生した場合の耐障害性を実現します。
(出典:Amazon RDS マルチ AZ 配置 > 1 つのスタンバイを備えた RDS マルチ AZ | AWS)
同期レプリケーションなので、応答はプライマリへの書き込み後ではなく、プライマリ→スタンバイへの書き込み後となるかんじか。
マネジメントコンソール上の見え方
Aurora and RDS > データベース にて一覧に表示されるのは1行だけで、プライマリ、スタンバイの別はない。

Aurora and RDS > データベース にて対象のDB識別子をクリックすると遷移先の画面の設定タブにて以下について確認できる。
シングルAZ → マルチAZへの変更可否
可能。
しかし、I/Oレイテンシーが増加しデータベースのパフォーマンスに影響を与える可能性があるため、本番稼働中のDBにおいては避けたほうがいいらしい。
(参考:Amazon RDS の DB インスタンスをマルチ AZ 配置に変換する | AWS)
フェイルオーバー処理
以下のことが行われるらしい(どちらが先か、もしくは並列か、といったことはわからない)。
- DNSレコードの変更(スタンバイ DB インスタンスをポイントするように)
- トランザクションのリカバリー
(参考:Amazon RDS マルチ AZ 配置 > マルチ AZ のフェイルオーバー中どのようなことが起こるのですか? またこれはどれくらいの間継続するのですか? | AWS)
たしかに、フェイルオーバー実施前後でエンドポイントのIPが変わっている。
【フェイルオーバー前】
$ dig +short ****.****.ap-northeast-1.rds.amazonaws.com
**.*.**.**9
$
【フェイルオーバー後】
$ dig +short ****.****.ap-northeast-1.rds.amazonaws.com
**.*.**.**6
$
ちなみにエンドポイントのDNSのTTLは5秒
$ dig ****.****.ap-northeast-1.rds.amazonaws.com @[権威サーバーのドメイン] +noall +answer
****.****.ap-northeast-1.rds.amazonaws.com. 5 IN A **.*.**.**6
$
フェイルオーバーのトリガー
Amazon RDS によって自動的にフェイルオーバーが実行されるのは、次のことが発生したときです。
- プライマリ利用可能ゾーンの可用性損失
- プライマリに対するネットワーク接続の喪失
- プライマリ上でのコンピューティングユニット障害
- プライマリ上でのストレージ障害
なお、Amazon RDS マルチ AZ 配置での自動フェイルオーバーは、データベース操作におけるエラー (長時間実行クエリ、デッドロック、データベース破損など) の発生に対しては行われません。
(出典:Amazon RDS マルチ AZ 配置 > Amazon RDS によるスタンバイレプリカへのフェイルオーバーは、どのようなイベントのときに発生しますか? | AWS)
データベース操作におけるエラーについては別途対応が必要か。
フェイルオーバーの手動実行可否
可能。
Amazon RDS は、さまざまな障害状態のときにユーザーが介入しなくても、自動的にフェイルオーバーを行います。さらに、Amazon RDS ではインスタンスが再起動されたときにフェイルオーバーを開始することもできます。この機能にアクセスするには、AWS マネジメントコンソールを使用するか、RebootDBInstance API 呼び出しを使用してください。
(出典:Amazon RDS マルチ AZ 配置 > マルチ AZ DB インスタンス配置に対して 「強制フェイルオーバー」 を開始できますか? | AWS)
マネジメントコンソールにて実施する場合、
Aurora and RDS > データベース にて対象のDB識別子を選択し、アクション > 再起動をクリック。

遷移先の画面にて"フェイルオーバーで再起動しますか?"にチェックを入れ、確認をクリックすると再起動(フェイルオーバー)が開始される。

確認をクリックすると確認画面に遷移するものと思っていたが、すぐに再起動が開始されるので注意。
フェイルオーバーを行うと、障害発生の有無と関係なく、ダウンタイムが発生するので注意。


