

# 使用 Amazon RDS 的多可用区数据库集群只读副本
<a name="USER_MultiAZDBCluster_ReadRepl"></a>

数据库集群只读副本是从源数据库实例创建的一种特殊类型的集群。在创建只读副本之后，对主数据库实例的任何更新都将异步复制到多可用区数据库集群只读副本。您可以将从应用程序发出的读取查询路由到只读副本，以减轻主数据库实例上的负载。利用只读副本，可以实现弹性扩展并超越单个数据库实例的容量限制，以处理高读取量的数据库工作负载。

还可以从多可用区数据库集群创建一个或多个数据库实例只读副本。数据库实例只读副本可让您将多余的读取流量引导到只读副本，从而扩展到源多可用区数据库集群的计算容量或 I/O 容量之外。目前，您无法从现有的多可用区数据库集群创建多可用区数据库集群只读副本。

在使用只读副本迁移到多可用区数据库集群或从多可用区数据库集群中创建数据库实例只读副本之间进行选择时，请考虑您的特定使用案例和性能要求。

**使用只读副本迁移到多可用区数据库集群**  
当您需要增强数据库的可用性和耐久性，同时最大限度地减少停机时间时，这种方法是理想之选。通过使用只读副本转换到多可用区数据库集群，可以确保持续运行和数据一致性。这种方法对于生产环境特别有用，在这类环境中，保持可用性和减少对实时工作负载的影响至关重要。

**从多可用区数据库集群创建数据库实例只读副本**  
当您想要扩展读取操作或从主数据库实例卸载读取流量时，此方法很适合。通过从现有的多可用区数据库集群创建只读副本，可以在不影响主实例稳定性的情况下，分配读取密集型工作负载并提高性能。

选择正确的方法取决于优先事项是确保高可用性和耐久性，还是扩展读取性能。评估工作负载特征和操作要求来做出明智的决策。

**Topics**
+ [使用只读副本迁移到多可用区数据库集群](multi-az-db-clusters-migrating-to-with-read-replica.md)
+ [从多可用区数据库集群创建数据库实例只读副本](multi-az-db-clusters-create-instance-read-replica.md)

# 使用只读副本迁移到多可用区数据库集群
<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，多可用区数据库集群只读副本无法进行失效转移。

# 从多可用区数据库集群创建数据库实例只读副本
<a name="multi-az-db-clusters-create-instance-read-replica"></a>

您可以从多可用区数据库集群创建一个数据库实例只读副本，以便扩展到集群的计算容量或 I/O 容量之外，以应对读取量繁重的数据库工作负载。可以将这一过多的读取流量引导到一个或多个数据库实例只读副本。还可以使用只读副本从多可用区数据库集群迁移到数据库实例。

要创建只读副本，请将多可用区数据库集群指定为复制源。多可用区数据库集群的读取器实例之一始终是复制源，而并非写入器实例。此条件可确保副本始终与源集群同步，即使在失效转移的情况下也是如此。

**Topics**
+ [比较读取器数据库实例和数据库实例只读副本](#multi-az-db-clusters-readerdb-vs-dbrr)
+ [注意事项](#multi-az-db-clusters-instance-read-replica-considerations)
+ [创建数据库实例只读副本](#multi-az-db-clusters-instance-read-replica-create)
+ [提升数据库实例只读副本](#multi-az-db-clusters-promote-instance-read-replica)
+ [从多可用区数据库集群创建数据库实例只读副本的限制](#multi-az-db-clusters-create-instance-read-replica-limitations)

## 比较读取器数据库实例和数据库实例只读副本
<a name="multi-az-db-clusters-readerdb-vs-dbrr"></a>

多可用区数据库集群的*数据库实例只读副本*在以下各个方面不同于多可用区数据库集群的*读取器数据库实例*：
+ 读取器数据库实例充当自动失效转移目标，而数据库实例只读副本则不是。
+ 读取器数据库实例必须先确认写入器数据库实例中的更改，然后才能提交更改。但是，对于数据库实例只读副本，更新将异步复制到只读副本，而无需确认。
+ 读取器数据库实例始终与多可用区数据库集群的写入器数据库实例共享相同的实例类、存储类型和引擎版本。但是，数据库实例只读副本不一定必须与源集群共享相同的配置。
+ 可以将数据库实例只读副本提升为单独的数据库实例。您无法将多可用区数据库集群的读取器数据库实例提升为独立实例。
+ 读取器端点仅将请求路由到多可用区数据库集群的读取器数据库实例。该端点从不将请求路由到数据库实例只读副本。

有关读取器和写入器数据库实例的更多信息，请参阅[多可用区数据库集群架构](multi-az-db-clusters-concepts.md#multi-az-db-clusters-concepts-overview)。

## 注意事项
<a name="multi-az-db-clusters-instance-read-replica-considerations"></a>

在从多可用区数据库集群创建数据库实例只读副本之前，请考虑以下事项：
+ 创建数据库实例只读副本时，此只读副本必须与其源集群属于相同的主版本以及相同或更高的次要版本。创建只读副本后，您可以选择将此只读副本升级到比源集群更高的次要版本。
+ 创建数据库实例只读副本时，分配的存储空间必须与源多可用区数据库集群的已分配存储空间相同。创建只读副本后，您可以更改分配的存储空间。
+ 对于 RDS for MySQL，源多可用区数据库集群的 `gtid-mode` 参数必须设置为 `ON`。有关更多信息，请参阅 [使用多可用区数据库集群的数据库集群参数组](USER_WorkingWithDBClusterParamGroups.md)。
+ 长时间运行的活动事务会减慢创建只读副本的过程。我们建议您等待长时间运行的事务完成，然后再创建只读副本。
+ 如果您删除数据库实例只读副本的源多可用区数据库集群，则该集群正在写入的任何只读副本都将提升为独立的数据库实例。

## 创建数据库实例只读副本
<a name="multi-az-db-clusters-instance-read-replica-create"></a>

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

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

### 控制台
<a name="multi-az-db-clusters-create-instance-read-replica-console"></a>

要从多可用区数据库集群创建数据库实例只读副本，请使用 AWS 管理控制台完成以下步骤。

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

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

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

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

1. 对于**副本源**，请确保选择了正确的多可用区数据库集群。

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

1. 对于其余部分，请指定数据库实例设置。有关设置的信息，请参阅 [数据库实例的设置](USER_CreateDBInstance.Settings.md)。
**注意**  
为数据库实例只读副本分配的存储空间必须与为源多可用区数据库集群分配的存储空间相同。

1. 选择**创建只读副本**。

### AWS CLI
<a name="multi-az-db-clusters-create-instance-read-replica-cli"></a>

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

对于 Linux、macOS 或 Unix：

```
aws rds create-db-instance-read-replica \
  --db-instance-identifier myreadreplica \
  --source-db-cluster-identifier mymultiazdbcluster
```

对于：Windows

```
aws rds create-db-instance-read-replica ^
  --db-instance-identifier myreadreplica ^
  --source-db-cluster-identifier mymultiazdbcluster
```

### RDS API
<a name="multi-az-db-clusters-create-instance-read-replica-api"></a>

要从多可用区数据库集群创建数据库实例只读副本，请使用 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html) 操作。

## 提升数据库实例只读副本
<a name="multi-az-db-clusters-promote-instance-read-replica"></a>

如果您不再需要数据库实例只读副本，则可以将该只读副本提升为独立的数据库实例。提升只读副本时，数据库实例将在重启后变得可用。有关说明，请参阅[将只读副本提升为独立的数据库实例](USER_ReadRepl.Promote.md)。

如果您使用只读副本将多可用区数据库集群部署迁移到单可用区或多可用区数据库实例部署，请确保停止正在向源数据库集群写入的任何事务。然后，等待对只读副本完成所有更新。在多可用区数据库集群的其中一个读取器数据库实例上发生数据库更新后，只读副本会发生数据库更新。这种复制滞后可能会有很大差异。使用 `ReplicaLag` 指标确定只读副本完成所有更新的时间。有关复制滞后的更多信息，请参阅 [监控只读复制](USER_ReadRepl.Monitoring.md)。

提升只读副本后，请等待已提升的数据库实例的状态变为 `Available`，然后再引导应用程序使用提升的数据库实例。或者，如果您不再需要多可用区数据库集群部署，请将其删除。有关说明，请参阅[删除 Amazon RDS 的多可用区数据库集群](USER_DeleteMultiAZDBCluster.Deleting.md)。

## 从多可用区数据库集群创建数据库实例只读副本的限制
<a name="multi-az-db-clusters-create-instance-read-replica-limitations"></a>

以下限制适用于从多可用区数据库集群部署创建数据库实例只读副本。
+ 您无法在与拥有源多可用区数据库集群的 AWS 账户不同的 AWS 账户中创建数据库实例只读副本。
+ 您无法在与源多可用区数据库集群不同的 AWS 区域中创建数据库实例只读副本。
+ 您无法将数据库实例只读副本还原到某个时间点。
+ 存储加密在源多可用区数据库集群和数据库实例只读副本上必须具有相同的设置。
+ 如果源多可用区数据库集群已加密，则必须使用相同的 KMS 密钥对数据库实例只读副本进行加密。
+ 要对源多可用区数据库集群执行次要版本升级，必须先对数据库实例只读副本执行次要版本升级。
+ 数据库实例只读副本不支持级联只读副本。
+ 对于 RDS for PostgreSQL，源多可用区数据库集群必须运行 PostgreSQL 版本 13.11、14.8 或 15.2.R2 或更高版本，才能创建数据库实例只读副本。
+ 您可以对数据库实例只读副本的源多可用区数据库集群执行主要版本升级，但复制到只读副本的操作会停止且无法重新启动。