跳至内容

如何将 Amazon RDS 实例移出可用区?

2 分钟阅读
0

我想将 Amazon Relational Database Service (Amazon RDS) 或 Amazon Aurora 实例移出可用区。我还想删除 Amazon RDS 数据库子网组中的子网。

简短描述

要启动 Amazon RDS 数据库实例,数据库子网组必须包含至少两个子网。您只能在关联的数据库子网组内的子网中启动 RDS 实例。子网必须位于同一 AWS 区域的不同可用区中。为了最大限度地减少中断,最佳做法是拥有来自至少三个可用区的子网。

解决方法

**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

确定可用区

可用区 ID

使用可用区 ID 确定一个 AWS 账户中资源相对于另一个账户中资源的位置。例如,您拥有在位于 use1-az2 的账户中运行的 Amazon Elastic Compute Cloud (Amazon EC2) 实例。这些 EC2 实例与在位于 use1-az3 的账户中运行的 RDS 数据库进行通信。为避免跨可用区流量产生的额外成本和延迟,请在同一个可用区中运行两个实例。要在发生中断时减少停机时间,请使用多可用区部署。

要检查账户中的可用区映射并获取可用区名称,请运行 describe-availability-zones 命令:

aws ec2 describe-availability-zones --zone-ids ZONE ID --region REGION

**注意:**将 ZONE ID 替换为您的可用区的 ID,将 REGION 替换为您的区域。

识别要移动的 RDS 实例

要识别要移动的 RDS 实例,请使用 AWS Config 中的可用区名称,或在 AWS CLI 中运行列表命令。

AWS Config

打开 AWS Config。然后,运行以下命令以返回在可用区中运行或具有辅助节点的数据库实例的列表:

SELECT
  resourceId,
  resourceName,
  accountId,
  awsRegion,
  configuration.availabilityZone,
  configuration.secondaryAvailabilityZone
WHERE
  resourceType = 'AWS::RDS::DBInstance'
  AND (
    configuration.availabilityZone = 'us-east-1e'
    OR configuration.secondaryAvailabilityZone = 'us-east-1e'
  )

**注意:**在前面的查询中,可用区必须与您账户中映射的区域名称相匹配。

AWS CLI

运行 describe-db-instances 命令以列出当前部署在可用区中的 RDS 数据库实例:

aws rds describe-db-instances \
    --query 'DBInstances[?Engine!=`aurora-postgresql`&&Engine!=`aurora-mysql`&&(AvailabilityZone==`AVAILABILITY ZONE` || SecondaryAvailabilityZone==`AVAILABILITY ZONE`)].{"0-Engine":Engine, "1-DBInstanceIdentifier":DBInstanceIdentifier, "2-DBSubnetGroupName":DBSubnetGroup.DBSubnetGroupName, "3-AvailabilityZone":AvailabilityZone, "4-SecondaryAvailabilityZone":SecondaryAvailabilityZone} | sort_by([], &"1-DBInstanceIdentifier")' \
    --region us-east-1

运行 describe-db-instances 命令以列出当前部署在可用区中的 Aurora 数据库实例:

aws rds describe-db-instances \
    --query 'DBInstances[?Engine==`aurora-postgresql`&&Engine==`aurora-mysql`&&AvailabilityZone==`AVAILABILITY ZONE`].{"0-Engine":Engine, "1-DBClusterIdentifier":DBClusterIdentifier, "2-DBInstanceIdentifier":DBInstanceIdentifier, "3-DBSubnetGroupName":DBSubnetGroup.DBSubnetGroupName, "4-AvailabilityZone":AvailabilityZone} | sort_by([], &"1-DBClusterIdentifier")'  \
    --region us-east-1

将实例移出可用区

RDS 数据库实例

**注意:**您无法更改单可用区部署的可用区。

要将 RDS 实例移出可用区,请完成以下步骤:

  1. 如果 RDS 实例为单可用区部署,请将数据库实例修改为多可用区部署。多可用区部署会在使用不同子网的不同可用区中创建备用数据库实例。
  2. 通过失效转移重启数据库实例。备用数据库实例成为主数据库实例。
    **注意:**确保数据库实例在失效转移后出现在新的可用区中。
  3. 将数据库实例修改为单可用区数据库实例。然后,将单可用区数据库实例从您要删除的子网中移除。

Aurora 数据库实例

要将 Aurora 实例移出可用区,请完成以下步骤:

  1. 如果您的 Aurora 数据库实例为单可用区部署,请向您的 Aurora 数据库集群添加新的读取器实例。创建新的读取器实例时,请从您的数据库子网组中选择一个可用区。
  2. 强制进行数据库集群失效转移,以将新的读取器实例提升为新的写入器数据库实例。
    **注意:**如果您有多个目标读取器实例,但未指定一个,则 Amazon RDS 会使用最高的提升等级对读取器进行提升。优先级从 0(最高优先级)到 15(最低优先级)不等。有关详细信息,请参阅 Aurora 数据库集群的容错
  3. 删除先前的主数据库实例

从数据库子网组中移除子网

**注意:**如果您在子网中启动了实例,则无法删除该子网。如果您在要删除的子网中启动了数据库实例,则会收到以下错误消息: “We're sorry, your request to modify DB subnet group has failed.Some of the subnets to be deleted are currently in use:(很抱歉,您修改数据库子网组的请求已失败。要删除的部分子网当前正在使用中:)”

要从数据库子网组中移除子网,请完成以下步骤:

  1. 打开 Amazon RDS 控制台

  2. 在导航窗格中,选择 Subnet groups(子网组)。

  3. 选择与数据库实例关联的子网组,然后选择 Edit(编辑)。

  4. Edit DB subnet groups(编辑数据库子网组)页面的 Add subnets(添加子网)下,移除要删除的子网

  5. 要检查哪些 RDS 数据库实例仍在可用区中,请运行 describe-db-instances 命令:

    aws rds describe-db-instances \
        --query 'DBInstances[?Engine!=`aurora-postgresql`&&Engine!=`aurora-mysql`&&(AvailabilityZone==`AVAILABILITY ZONE` || SecondaryAvailabilityZone==`AVAILABILITY ZONE`)].{"0-Engine":Engine, "1-DBInstanceIdentifier":DBInstanceIdentifier, "2-DBSubnetGroupName":DBSubnetGroup.DBSubnetGroupName, "3-AvailabilityZone":AvailabilityZone, "4-SecondaryAvailabilityZone":SecondaryAvailabilityZone} | sort_by([], &"1-DBInstanceIdentifier")' \
        --region us-east-1

    要检查哪些 Aurora 数据库实例仍在可用区中,请运行 describe-db-instances 命令:

    aws rds describe-db-instances \
        --query 'DBInstances[?Engine==`aurora-postgresql`&&Engine==`aurora-mysql`&&AvailabilityZone==`AVAILABILITY ZONE`].{"0-Engine":Engine, "1-DBClusterIdentifier":DBClusterIdentifier, "2-DBInstanceIdentifier":DBInstanceIdentifier, "3-DBSubnetGroupName":DBSubnetGroup.DBSubnetGroupName, "4-AvailabilityZone":AvailabilityZone} | sort_by([], &"1-DBClusterIdentifier")'  \
        --region us-east-1
  6. 选择 Save(保存)。

将 RDS 实例恢复到原始部署

如果您一开始采用多可用区部署,请将数据库实例修改为多可用区部署。如果您一开始采用单可用区部署,则无需采取进一步的步骤。

如果您从 Aurora 数据库集群中移除了读取器实例,请向您的集群添加新的读取器数据库实例。如果您一开始采用单可用区部署,则无需采取进一步的步骤。

相关信息

使用数据库子网组

如何将 Amazon RDS 数据库实例从公有子网迁移到同一 VPC 内的私有子网?

如何删除属于 Amazon RDS 数据库子网组的子网?