インフラ

RDSリードレプリカのメンテナンスでダウンタイムを発生させない方法

こんにちは、ちゃりおです。

この前、RDSのリードレプリカのHWメンテナンスがありました。
メンテナンスによって、メンテナンスウィンドウ内に数分停止してしまいます。

停止するのを避けたいという要望があったので、手間はかかりますが停止しない方法についてです。

ちゃりお
ちゃりお
RDSリードレプリカのメンテナンスについて

環境

環境

RDSマスター(シングルAZ) × 1
RDSリードレプリカ × 1

今回は、RDSリードレプリカがメンテナンス対象になりました。

対策

リードレプリカをもう一台作って、アプリケーションの接続先を変更する。

切り替え

メンテナンスによるダウンタイムは避けたかったので
新規にリードレプリカを作成し切り替えて古い方は削除する方法で対応しました。

手順

マスターをマルチAZにする

公式ドキュメントによるとシングルAZの場合、スナップショットの作成のため1分間のI/O停止が発生します。
マルチAZにすることで、I/O停止を回避できます。

リードレプリカを作成すると、Amazon RDS はソース DB インスタンスの DB スナップショットを取得し、レプリケーションを開始します。その結果、DB スナップショットを作成する間、ソース DB インスタンスに短期間の I/O 停止が発生します。I/O 停止は通常、約 1 分間続きます。ソース DB インスタンスがマルチ AZ 配置の場合は、I/O 停止を回避できます。スナップショットがセカンダリ DB インスタンスから取得されるためです。

AWSユーザーガイド リードレプリカの使用

また、マルチAZにする際もダウンタイムは発生しません。

AWSユーザガイド DBインスタンスを変更してマルチAZにする

リードレプリカをもう一台作る

マルチAZになったことを確認したら、リードレプリカを作成します。
だいたい10分以内で作成されます。

マスターをシングルAZに戻す

マルチAZのままだと、料金がかかってしまうのでシングルAZに戻します。
この際も、ダウンタイムは発生しません。

アプリケーションのリードレプリカの接続先を変更する

Route53でCNAMEでエンドポイントを登録していなかったので
アプリケーションのリードレプリカの接続先を変更する必要がありました。(envにエンドポイント直書き)

Route53で登録している場合は、該当ドメインのレコードを書き換えるだけでコードを変更する必要ありません。

古いリードレプリカを削除する

切り替えが終わって、動作確認ができたら古いリードレプリカを削除します。

所感

Route53でRDSのエンドポイント指定しておけば、楽でした

あとは、リードレプリカは用途ごとに作っておいたほうがいいと感じました。
アプリケーションからの参照系と分析用を兼用していました。

参照系のリードレプリカはできれば止めたくないですが、分析系は多少とまっていても大丈夫だったので
変更範囲は減らすことができました。

メンテナンスウィンドウ内のダウンタイムを受け入れる方針にすれば、手間はなかったのですが
今後DBをAuroraに移行するなど検討しているのでいい予行練習になった気がします。

DMS Aurora 移行
DMSでRDS Mysql5.7をAurora Mysql5.7互換に移行してみるこんにちは、ちゃりおです。 Aurora移行を検証してみました。 Aurora移行の方法としては、RDSでAuroraリードレプリカ...
RDSのVPCを 変更する方法
RDSのVPCを変更する方法を比較してみるこんにちは、ちゃりおです。 「VPC作ったけど、ネットワークの構成がいまいちで新しく作り直したい」と思うことありませんか。 僕は、最近...
VPCアンチパターン
VPCをつくる前に見てほしいVPCアンチパターンこんにちは、ちゃりおです。 勉強会や資格勉強で、最近VPCについて考えることが多いです。 今回は、VPCを作成する際に個人的によくな...

Amazonで「AWS」の本をみてみる!!