Auroraのインスタンスタイプ変更をフェイルオーバで行ってみた

はじめに

AWSチームのすずきです。

インスタンスタイプの変更が必要となったAmazon Aurora。 DBの停止時間を最小限にするため、リードレプリカの設置とフェイルオーバにより実施する機会がありました。 その内容を紹介させて頂きます。

手順

リードレプリカ作成

  • 対象のDBを選択、リードレプリカを作成を指定します。

aurora-switch-specup-01

  • 希望するインスタンスクラスを指定します。
  • Writerノードの稼働AZの変更を避けるため、同一のAZを指定しました。

aurora-switch-specup-02-2

  • 10〜15分程度でリードレプリカが利用可能となります。

aurora-switch-specup-03

フェイルオーバ操作

  • 変更対象のWriterノードを選択し、「フェイルオーバー」を実施します。

aurora-switch-specup-04

aurora-switch-specup-05

  • イベント情報でフェイルオーバの開始、完了は確認可能です。

aurora-switch-specup-06

DB停止時間の計測

  • フェイルオーバ中のDB停止時間を求めるため、AuroraにDB接続し、現在時刻とDBステータス情報を取得するスクリプトを用意しました
  • スクリプトを1秒毎に実行し、DB接続不能な時間を求めました。

スクリプト

DBENDPOINT='#####.cluster-#####.ap-northeast-1.rds.amazonaws.com'
DBUSER='test####'

for i in {0..900};
do 
  echo 'SELECT CURTIME();\s' | mysql -h ${DBENDPOINT} -P 3306 -u ${DBUSER} >> $i.txt 2>&1 &
  sleep 1
done;

結果

  • 今回のフェイルオーバ検証では、DB接続不能な時間は8秒以下でした。

停止直前

$ cat 22.txt
CURTIME()
08:33:35

接続不能

$ cat 23.txt
ERROR 2003 (HY000): Can't connect to MySQL server on 'test#######-1.cluster-cnaybbyalggi.ap-northeast-1.rds.amazonaws.com' (111)

接続再開

$ cat 29.txt
CURTIME()
08:33:43

比較

  • 比較のため、DB インスタンスの変更を「すぐに適用」とした場合のDB停止時間も同じスクリプトで測定しました。
  • db.t2.smallからdb.t2.mediumの変更に伴うDB停止時間は、約7分でした。

[Aurora] インスタンスタイプをdb.r3.largeからdb.t2.mediumに変更してみた

停止直前

$ cat 116.txt
CURTIME()
08:54:33

接続不能

$ cat 118.txt
ERROR 2003 (HY000): Can't connect to MySQL server on 'test#######-1.cluster-cnaybbyalggi.ap-northeast-1.rds.amazonaws.com' (111)

接続再開

$ cat 541.txt
CURTIME()
09:01:41

まとめ

Auroraのフェイルオーバーを利用する事で、RDSのインスタンスタイプの変更を 短時間で実施できる事が確認できました。

DBの変更作業はシステム影響の少ない深夜、メンテナンスウィンドウを利用して行う事が望ましいですが、 Amazon Auroraの緊急変更が必要となった場合、今回紹介させて頂いた手順をお試しください。