ちょっと話題の記事

【AWS】RDSのインスタンスタイプ変更にかかる時間を調べてみた

2014.01.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは植木和樹です。AWSでEC2と並んでよく使われているサービスがRDSだと思います。障害時のフェイルオーバーやバックアップも自動で行ってくれるため、データベースを手間をかけずに利用することができ本当に便利なサービスです。

さてRDSを用いたサービスをリリースしてしばらく経つと、徐々にCPUやメモリなどの使用率が増えていき、いよいよインスタンスタイプの見直しを検討しなければならなくなるかと思います。その時に気になるのが「インスタンスタイプ変更にはどれくらい時間がかかるのか?」「サービスの停止が必要なのか?」という点です。

本日はSingle-AZ/Multi-AZそれぞれのRDSについて、インスタンスタイプの変更にかかる時間や挙動を調べてみました。

今回のブログに記載したインスタンスタイプ変更の流れは、AWS公式のものでなくイベントログやDBの動きから筆者個人が「おそらくこういう処理が行われているのだろう」と推測したものです。今後AWSの仕様変更により挙動が変わる可能性がありますのでご注意ください。

環境

RDSは以下の環境で作成しました。

Engine mysql(5.5.33)
Primary-AZ ap-northeast-1c
Secondary-AZ ap-northeast-1a(Multi-AZ時)
Storage 5GB
Instance-Type m1.small -> m1.large

RDSスケールアップの動き

Single-AZ

RDSイベント

# Time System Notes
1 2014-01-25 18:08:34 Applying modification to database instance class
  (ここからDBに接続できなくなる)
2 2014-01-25 18:14:25 Finished applying modification to DB instance class
  (ここからDBに接続できるようになる)

インスタンスタイプ変更の流れ

  1. Sigle-AZのRDSインスタンスがシャットダウンし、インスタンスタイプの変更が行われる。DBのセッションはクローズされ、接続もできなくなる。
  2. インスタンスタイプ変更後、再びRDSが起動し接続できるようになる。

結果

  • インスタンスタイプの変更にはインスタンスのリブートが伴う。
  • サービス停止時間はインスタンスタイプの変更とリブート時間に依存する。
  • サービス停止は最低でも6分程度かかる。

Multi-AZ

RDSイベント

# Time System Notes
1 January 25, 2014 7:28:31 PM UTC+9 Applying modification to database instance class
2 January 25, 2014 7:35:22 PM UTC+9 Multi-AZ instance failover started
  (ここからDBに接続できなくなる)
3 January 25, 2014 7:35:32 PM UTC+9 DB instance restarted
4 January 25, 2014 7:36:37 PM UTC+9 Multi-AZ instance failover completed
  (ここからDBに接続できるようになる)
5 January 25, 2014 7:44:56 PM UTC+9 Finished applying modification to DB instance class

インスタンスタイプ変更の流れ

  1. Multi-AZのセカンダリ側インスタンスのインスタンスタイプの変更が行われる。
  2. アクティブ→スタンバイへのフェイルオーバーが行われる。DBのセッションはクローズされ、接続もできなくなる。
  3. セカンダリ側AZでインスタンスが起動する。その後クラッシュリカバリプロセスが実行される。
  4. フェイルオーバーが完了する。再びRDSが起動し接続できるようになる。
  5. プライマリ側インスタンスのインスタンスタイプの変更が完了する。

結果

  • インスタンスタイプの変更にはインスタンスのフェイルオーバーが伴う。
  • サービス停止時間はフェイルオーバーの時間に依存する。
  • サービス停止は最低でも1分程度かかる。

まとめ

RDSは更新処理のスケールアウトが設計しずらくボトルネックになりやすいサービスです。ユーザーの利便性をあげるためサービスに次々と機能を追加すれば、どうしてもDBの負荷もあがりがちです。しかし24x365でサービスを提供している場合は、なかなかスペックアップのためのメンテナンスのための時間もとりにくいと思います。サービスイン時、まずはインスタンスタイプ変更によるサービス停止時間が短くなるMulti-AZ構成にしておくようにしましょう。また1分程の停止も難しいサービスの場合は、あらかじめ少々大きめのインスタンスタイプを選択することも検討しておくのが良いかと思います。