Confirming which availability zone is used for the RDS DB instance when changing from Multi-AZ to Single-AZ configuration

2018.11.04

In this post, we will explain how to determine which availability zones is used for the RDS DB instance when changing from Multi-AZ configuration to Single-AZ configuration.

Overview

We will use RDS for MySQL and we will check what happens to AZ with the following four patterns.

  • When changing from Multi-AZ configuration to Single-AZ configuration
  • When changing from Single-AZ configuration to Multi-AZ configuration
  • When changing from Multi-AZ configuration to Single-AZ configuration and change instance class.
  • When changing from Single-AZ configuration to Multi-AZ configuration and change instance class.

When changing from Multi-AZ configuration to Single-AZ configuration (No failover)

Current DB instance information

Currently MultiAZ is true and us-west-2a is primary.

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

Changing to Single-AZ configuration

Change from Multi-AZ to Single-AZ using the --no-multi-az option.

$ aws rds modify-db-instance \
      --db-instance-identifier test-db \
      --no-multi-az \
      --apply-immediately

DB instance information after change

After changing to the Single-AZ configuration, we can confirm that the DB instance is in us-west-2a which was Primary in the Multi-AZ configuration.

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

Viewing events

$ 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"}

When changing from Single-AZ configuration to Multi-AZ configuration

We switched back from the Single-AZ configuration to the Multi-AZ configuration, but in this case there was no change in AZ.

Changing to Multi-AZ configuration

Change from Single-AZ to Multi-AZ using the --multi-az option.

aws rds modify-db-instance \
      --db-instance-identifier test-db \
      --multi-az \
      --apply-immediately

DB instance information after change

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

Viewing events

$ 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"}

When changing from Multi-AZ configuration to Single-AZ configuration and changing instance class (with failover)

Next, let's change from the Multi-AZ configuration to the Single-AZ configuration together with a change that causes failover. This time, we are changing the instance class causing the failover to occur.

Current DB instance information

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

Changing to Single-AZ configuration

Changing the instance class using the --db-instance-class option and change from Multi-AZ to Single-AZ using the --no-multi-az option.

aws rds modify-db-instance \
      --db-instance-identifier test-db \
      --no-multi-az \
      --db-instance-class db.t2.small \
      --apply-immediately

DB instance information after change

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

The AZ in which the DB instance runs in has changed. We will check the events.

Viewing events

We can see that Multi-AZ instance failover has occurred when changing the instance class, after which it seems that the AZ has changed to Single-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"}

Finally, let's try to change the AZ configuration about from Single-AZ configuration to Multi-AZ configuration and changing the instance class.

When changing from Single-AZ configuration to Multi-AZ configuration and change instance class

Let me get to the point first. When we change the instance class and the AZ configuration from Single-AZ configuration to Multi-AZ configuration at the same time, there is no change in AZ.

Changing to Multi-AZ configuration

Change from Single-AZ to Multi-AZ using the --multi-az option and changing the instance class using the --db-instance-class option

$ aws rds modify-db-instance \
      --db-instance-identifier test-db \
      --no-multi-az \
      --db-instance-class db.t2.micro \
      --apply-immediately

DB instance information after change

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

Viewing events

$ 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"}

Conclusion

We introduced what happens to the Availability Zone where the DB Instance runs in when changing between Single-AZ and Multi-AZ RDS configurations.

Please see the table below for the results.

Configuration change content Changing the Primary AZ of the DB Instance
From Multi-AZ configuration to Single-AZ configuration(No failover) No change
From Multi-AZ configuration to Single-AZ configuration(With failover) With change
From Single-AZ configuration to Multi-AZ configuration No change