

# 使用只读副本迁移到多可用区数据库集群
<a name="multi-az-db-clusters-migrating-to-with-read-replica"></a>

要将单可用区部署或多可用区数据库实例部署迁移到停机时间更少的多可用区数据库集群部署，您可以创建多可用区数据库集群只读副本。对于源，您可以在单可用区部署中指定数据库实例，或在多可用区数据库实例部署中指定主数据库实例。数据库实例可以在迁移到多可用区数据库集群期间处理写入事务。

在创建多可用区数据库集群只读副本之前，请考虑以下事项：
+ 源数据库实例的版本必须支持多可用区数据库集群。有关更多信息，请参阅 [支持 Amazon RDS 中多可用区数据库集群的区域和数据库引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.MultiAZDBClusters.md)。
+ 多可用区数据库集群只读副本的主版本必须与其源的版本相同，次要版本必须相同或更高。
+ 您必须先通过将备份保留期设置为一个非零值来在源数据库实例上开启自动备份。
+ 源数据库实例的分配存储空间必须为 100GiB 或更高。
+ 对于 RDS for MySQL，源数据库实例的 `gtid-mode` 和 `enforce_gtid_consistency` 参数都必须设置为 `ON`。您必须使用自定义参数组，而不是原定设置参数组。有关更多信息，请参阅 [Amazon RDS 数据库实例的数据库参数组](USER_WorkingWithDBInstanceParamGroups.md)。
+ 长时间运行的活动事务会减慢创建只读副本的过程。我们建议您等待长时间运行的事务完成，然后再创建只读副本。
+ 如果您删除多可用区数据库集群只读副本的源数据库实例，则只读副本会被提升为独立的多可用区数据库集群。

## 创建和提升多可用区数据库集群只读副本
<a name="multi-az-db-clusters-migrating-to-create-promote"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 创建和提升多可用区数据库集群只读副本。

**注意**  
我们强烈建议您基于源数据库实例的 Amazon VPC，在相同的虚拟私有云（VPC）中创建所有只读副本。  
如果您在与源数据库实例不同的 VPC 中创建只读副本，则副本和 Amazon RDS 系统之间的无类别域间路由（CIDR）范围可能会重叠。CIDR 重叠会使副本不稳定，从而对连接到副本的应用程序产生负面影响。如果您在创建只读副本时收到错误，请选择其他目标数据库子网组。有关更多信息，请参阅 [在 VPC 中使用数据库实例](USER_VPC.WorkingWithRDSInstanceinaVPC.md)。

### 控制台
<a name="multi-az-db-clusters-migrating-to-create-promote-console"></a>

要使用只读副本将单可用区部署或多可用区数据库实例部署迁移到多可用区数据库集群，请使用 AWS 管理控制台 完成以下步骤。

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 创建多可用区数据库集群只读副本。

   1. 在导航窗格中，选择 **Databases (数据库)**。

   1. 选择要作为只读副本源的数据库实例。

   1. 对于 **Actions (操作)**，选择 **Create read replica (创建只读副本)**。

   1. 对于 **Availability and durability**（可用性与持久性），选择 **Multi-AZ DB cluster**（多可用区数据库集群）。

   1. 对于**数据库实例标识符**，输入该只读副本的名称。

   1. 对于其余部分，请指定数据库集群设置。有关设置的信息，请参阅 [创建多可用区数据库集群的设置](create-multi-az-db-cluster.md#create-multi-az-db-cluster-settings)。

   1. 选择 **Create read replica (创建只读副本)**。

1. 准备就绪后，将只读副本提升为独立的多可用区数据库集群：

   1. 停止任何事务向源数据库实例写入，然后等待对只读副本完成所有更新。

      在主数据库实例上完成数据库更新后，只读副本进行数据库更新。这种复制滞后可能会有很大差异。使用 `ReplicaLag` 指标确定只读副本完成所有更新的时间。有关复制滞后的更多信息，请参阅 [监控只读复制](USER_ReadRepl.Monitoring.md)。

   1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

   1. 在 Amazon RDS 控制台中，选择**数据库**。

      随后会显示**数据库**窗格。每个只读副本在**角色**列中显示**副本**。

   1. 选择要提升的多可用区数据库集群只读副本。

   1. 对于**操作**，请选择**提升**。

   1. 在 **Promote read replica**（提升只读副本）页面上，输入新提升的多可用区数据库集群的备份保留期和备份时段。

   1. 根据需要完成设置后，选择 **Promote read replica**（提升只读副本）。

   1. 等待所提升的多可用区数据库集群的状态变为 `Available`。

   1. 指示您的应用程序使用提升的多可用区数据库集群。

   （可选）如果不再需要单可用区部署或多可用区数据库实例部署，则将其删除。有关说明，请参阅 [删除数据库实例](USER_DeleteInstance.md)。

### AWS CLI
<a name="multi-az-db-clusters-migrating-to-create-promote-cli"></a>

要使用只读副本将单可用区部署或多可用区数据库实例部署迁移到多可用区数据库集群，请使用 AWS CLI 完成以下步骤。

1. 创建多可用区数据库集群只读副本。

   要从源数据库实例创建只读副本，请使用 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-cluster.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-cluster.html)。对于 `--replication-source-identifier`，指定源数据库实例的 Amazon 资源名称（ARN）。

   对于 Linux、macOS 或 Unix：

   ```
   aws rds create-db-cluster \
     --db-cluster-identifier mymultiazdbcluster \
     --replication-source-identifier arn:aws:rds:us-east-2:123456789012:db:mydbinstance
     --engine postgres \
     --db-cluster-instance-class db.m5d.large \
     --storage-type io1 \
     --iops 1000 \
     --db-subnet-group-name defaultvpc \
     --backup-retention-period 1
   ```

   对于 Windows：

   ```
   aws rds create-db-cluster ^
     --db-cluster-identifier mymultiazdbcluster ^
     --replication-source-identifier arn:aws:rds:us-east-2:123456789012:db:mydbinstance
     --engine postgres ^
     --db-cluster-instance-class db.m5d.large ^
     --storage-type io1 ^
     --iops 1000 ^
     --db-subnet-group-name defaultvpc ^
     --backup-retention-period 1
   ```

1. 停止任何事务向源数据库实例写入，然后等待对只读副本完成所有更新。

   在主数据库实例上完成数据库更新后，只读副本进行数据库更新。这种复制滞后可能会有很大差异。使用 `Replica Lag` 指标确定只读副本完成所有更新的时间。有关复制滞后的更多信息，请参阅 [监控只读复制](USER_ReadRepl.Monitoring.md)。

1. 准备就绪后，将只读副本提升为独立的多可用区数据库集群。

   要提升多可用区数据库集群只读副本，请使用 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica-db-cluster.html](https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica-db-cluster.html)。对于 `--db-cluster-identifier`，指定多可用区数据库集群只读副本的标识符。

   ```
   aws rds promote-read-replica-db-cluster --db-cluster-identifier mymultiazdbcluster
   ```

1. 等待所提升的多可用区数据库集群的状态变为 `Available`。

1. 指示您的应用程序使用提升的多可用区数据库集群。

（可选）如果不再需要单可用区部署或多可用区数据库实例部署，则将其删除。有关说明，请参阅 [删除数据库实例](USER_DeleteInstance.md)。

### RDS API
<a name="multi-az-db-clusters-migrating-to-create-promote-api"></a>

要使用只读副本将单可用区部署或多可用区数据库实例部署迁移到多可用区数据库集群，请使用 RDS API 完成以下步骤。

1. 创建多可用区数据库集群只读副本。

   要创建多可用区数据库集群只读副本，请使用带有所需参数 `DBClusterIdentifier` 的 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html) 操作。对于 `ReplicationSourceIdentifier`，指定源数据库实例的 Amazon 资源名称（ARN）。

1. 停止任何事务向源数据库实例写入，然后等待对只读副本完成所有更新。

   在主数据库实例上完成数据库更新后，只读副本进行数据库更新。这种复制滞后可能会有很大差异。使用 `Replica Lag` 指标确定只读副本完成所有更新的时间。有关复制滞后的更多信息，请参阅 [监控只读复制](USER_ReadRepl.Monitoring.md)。

1. 准备就绪后，将只读副本提升为独立的多可用区数据库集群。

   要提升多可用区数据库集群只读副本，请使用带有所需参数 `DBClusterIdentifier` 的 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplicaDBCluster.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplicaDBCluster.html) 操作。指定多可用区数据库集群只读副本的标识符。

1. 等待所提升的多可用区数据库集群的状态变为 `Available`。

1. 指示您的应用程序使用提升的多可用区数据库集群。

（可选）如果不再需要单可用区部署或多可用区数据库实例部署，则将其删除。有关说明，请参阅 [删除数据库实例](USER_DeleteInstance.md)。

## 创建多可用区数据库集群只读副本的限制
<a name="multi-az-db-clusters-migrating-to-limitations"></a>

以下限制适用于从单可用区部署或多可用区数据库实例部署创建多可用区数据库集群部署只读副本。
+ 您无法在与拥有源数据库实例的 AWS 账户不同的 AWS 账户中创建多可用区数据库集群只读副本。
+ 您无法在与源数据库实例不同的 AWS 区域 中创建多可用区数据库集群只读副本。
+ 您无法将多可用区数据库集群只读副本还原到某个时间点。
+ 存储加密在源数据库实例和多可用区数据库集群上必须具有相同的设置。
+ 如果源数据库实例已加密，则必须使用相同的 KMS 密钥对多可用区数据库集群只读副本进行加密。
+ 如果源数据库实例使用通用型 SSD（gp3）存储且分配的存储空间低于 400 GiB，则无法修改多可用区数据库集群只读副本的预调配 IOPS。
+ 要对源数据库实例执行次要版本升级，必须先对多可用区数据库集群只读副本执行次要版本升级。
+ 在对 RDS for PostgreSQL 多可用区数据库集群只读副本执行次要版本升级时，在升级之后，读取器数据库实例不会切换到写入器数据库实例。因此，在 Amazon RDS 升级写入器实例时，数据库集群可能会遇到停机。
+ 您无法对多可用区数据库集群只读副本执行主要版本升级。
+ 您可以对多可用区数据库集群只读副本的源数据库实例执行主要版本升级，但复制到只读副本的操作会停止且无法重新启动。
+ 多可用区数据库集群只读副本不支持级联只读副本。
+ 对于 RDS for PostgreSQL，多可用区数据库集群只读副本无法进行失效转移。