RDS の Multi-AZ構成から Single-AZ構成へ変更したとき Availability Zone はどこになるか確認してみた

2018.09.04

今回はMulti-AZ構成から Single-AZ構成へ変更した時に Availability Zone はプライマリが稼働しているAZになるのか、セカンダリが稼働しているAZになるのか確認してみましたのでご紹介します。

概要

RDS for MySQL で確認しました。 また、以下4つのパターンでAZがどうなるか確認していきます。

  • Multi-AZ構成からSingle-AZ構成に変更した場合
  • Single-AZ構成からMulti-AZ構成に変更した場合
  • Multi-AZ構成からSingle-AZ構成への変更とインスタンスクラスを変更した場合
  • Single-AZ構成からMulti-AZ構成への変更とインスタンスクラスを変更した場合

Multi-AZ構成からSingle-AZ構成に変更した場合 (フェイルオーバーなし)

現在のDBインスタンス情報

現在は MultiAZtrueus-west-2aプライマリとなっています。

$ aws rds describe-db-instances --db-instance-identifier test-db | jq '.DBInstances[] | {MultiAZ, AvailabilityZone}'
{
  "MultiAZ": true,
  "AvailabilityZone": "us-west-2a"
}

Single-AZ構成へ変更

  • Multi-AZからSingle-AZへ変更
$ aws rds modify-db-instance \
      --db-instance-identifier test-db \
      --no-multi-az \
      --apply-immediately

変更後のDBインスタンス情報

Single-AZ構成へ変更後、 Multi-AZ構成のときにプライマリだった us-west-2a にDBインスタンスが起動していることが確認できます。

$ aws rds describe-db-instances --db-instance-identifier test-db | jq '.DBInstances[] | {MultiAZ, AvailabilityZone}'
{
  "MultiAZ": false,
  "AvailabilityZone": "us-west-2a"
}

イベントログ

$ aws rds describe-events --source-identifier test-db --source-type db-instance | jq -c '.Events[] | {Date, Message}'
{"Date":"2018-09-03T16:56:44.351Z","Message":"Applying modification to convert to a standard (Single-AZ) DB Instance"}
{"Date":"2018-09-03T17:00:53.925Z","Message":"Finished applying modification to convert to a standard (Single-AZ) DB Instance"}

Single-AZ構成からMulti-AZ構成に変更した場合

続いての検証のためにSingle-AZ構成から、Multi-AZ構成へ戻しましたがこの場合もAZの変更はありませんでした。

Multi-AZ構成へ変更

  • Single-AZからMulti-AZへ変更
aws rds modify-db-instance \
      --db-instance-identifier test-db \
      --multi-az \
      --apply-immediately

変更後のDBインスタンス情報

$ aws rds describe-db-instances --db-instance-identifier test-db | jq '.DBInstances[] | {MultiAZ, AvailabilityZone}'
{
  "MultiAZ": true,
  "AvailabilityZone": "us-west-2a"
}

イベントログ

$ aws rds describe-events --source-identifier test-db --source-type db-instance | jq -c '.Events[] | {Date, Message}'
{"Date":"2018-09-03T17:09:19.244Z","Message":"Applying modification to convert to a Multi-AZ DB Instance"}
{"Date":"2018-09-03T17:17:41.706Z","Message":"Finished applying modification to convert to a Multi-AZ DB Instance"}

Multi-AZ構成からSingle-AZ構成への変更とインスタンスクラスを変更した場合 (フェイルオーバーあり)

次に、フェイルオーバーが発生する変更と合わせてMulti-AZ構成から Single-AZ構成へ変更してみます。 今回は、フェイルオーバーが発生するインスタンスクラスの変更を一緒にしています。

現在のDBインスタンス情報

$ aws rds describe-db-instances --db-instance-identifier test-db | jq '.DBInstances[] | {MultiAZ, AvailabilityZone}'
{
  "MultiAZ": true,
  "AvailabilityZone": "us-west-2a"
}

Single-AZ構成へ変更

  • インスタンスクラスを変更
  • Multi-AZからSingle-AZへ変更
aws rds modify-db-instance \
      --db-instance-identifier test-db \
      --no-multi-az \
      --db-instance-class db.t2.small \
      --apply-immediately

変更後のDBインスタンス情報

$ aws rds describe-db-instances --db-instance-identifier test-db | jq '.DBInstances[] | {MultiAZ, AvailabilityZone}'
{
  "MultiAZ": false,
  "AvailabilityZone": "us-west-2b"
}

DBインスタンスの稼働するAZが変わりました。 イベントログを確認してみます。

イベントログ

インスタンスクラスの変更の際にMulti-AZ instance failoverが発生していることがわかります。 その後、Single-AZになっているのでAZが変更したようです。

$ aws rds describe-events --source-identifier test-db --source-type db-instance | jq -c '.Events[] | {Date, Message}'
{"Date":"2018-09-03T17:25:36.553Z","Message":"Applying modification to database instance class"}
{"Date":"2018-09-03T17:29:50.993Z","Message":"DB instance shutdown"}
{"Date":"2018-09-03T17:30:53.738Z","Message":"Multi-AZ instance failover started"}
{"Date":"2018-09-03T17:31:03.340Z","Message":"DB instance restarted"}
{"Date":"2018-09-03T17:31:33.748Z","Message":"Multi-AZ instance failover completed"}
{"Date":"2018-09-03T17:40:46.647Z","Message":"Finished applying modification to DB instance class"}
{"Date":"2018-09-03T17:40:51.886Z","Message":"Applying modification to convert to a standard (Single-AZ) DB Instance"}
{"Date":"2018-09-03T17:45:01.242Z","Message":"Finished applying modification to convert to a standard (Single-AZ) DB Instance"}

最後にSingle-AZ構成からMulti-AZへAZ構成とインスタンスクラスを変更した場合を試してみます。

Single-AZ構成からMulti-AZ構成への変更とインスタンスクラスを変更した場合

インスタンスクラスを変更と同時にSingle-AZ構成から、Multi-AZ構成へ戻しましたがこの場合もAZの変更はありませんでした。

Multi-AZ構成へ変更

  • インスタンスクラスを変更
  • Single-AZからMulti-AZへ変更
$ aws rds modify-db-instance \
      --db-instance-identifier test-db \
      --no-multi-az \
      --db-instance-class db.t2.micro \
      --apply-immediately

変更後のDBインスタンス情報

$ aws rds describe-db-instances --db-instance-identifier test-db | jq '.DBInstances[] | {MultiAZ, AvailabilityZone}'
{
  "MultiAZ": false,
  "AvailabilityZone": "us-west-2b"
}

イベントログ

$ aws rds describe-events --source-identifier test-db --source-type db-instance | jq -c '.Events[] | {Date, Message}'
{"Date":"2018-09-03T17:59:38.155Z","Message":"Applying modification to database instance class"}
{"Date":"2018-09-03T18:01:04.717Z","Message":"DB instance shutdown"}
{"Date":"2018-09-03T18:04:30.623Z","Message":"DB instance restarted"}
{"Date":"2018-09-03T18:05:19.334Z","Message":"Finished applying modification to DB instance class"}
{"Date":"2018-09-03T18:05:25.811Z","Message":"DB instance shutdown"}
{"Date":"2018-09-03T18:05:35.110Z","Message":"DB instance restarted"}

結果

変更内容 DBインスタンスのプライマリAZの変更
Multi-AZからSingle-AZへ変更(フェイルオーバーなし) なし
Multi-AZからSingle-AZへ変更(フェイルオーバーあり) あり
Single-AZからMulti-AZへ変更 なし

まとめ

RDSのMulti-AZ構成から Single-AZ構成と構成を変更したときのDBインスタンスが稼働するAvailability Zoneについてご紹介しました。