

# 配置和管理 Amazon RDS 的多可用区部署
<a name="Concepts.MultiAZ"></a>

多可用区部署可以有一个备用或两个备用数据库实例。当部署有一个备用数据库实例时，称为*多可用区数据库实例部署*。多可用区数据库实例部署有一个备用数据库实例，可提供故障转移支持，但不提供读取流量。当部署有两个备用数据库实例时，称为*多可用区数据库集群部署*。多可用区数据库集群部署具有备用数据库实例，可提供故障转移支持，还可以提供读取流量。

您可以使用 AWS 管理控制台 来确定多可用区部署是多可用区数据库实例部署还是多可用区数据库集群部署。在导航窗格中，选择 **Databases**（数据库），然后选择**数据库标识符**。
+ 多可用区数据库实例部署具有以下特征：
  + 数据库实例只有一行。
  + **Role**（角色）的值为 **Instance**（实例）或 **Primary**（主要）。
  + **Multi-AZ**（多可用区）的值为 **Yes**（是）。
+ 多可用区数据库集群部署具有以下特征：
  + 有一个集群级行，其下有三个数据库实例行。
  + 对于群集级行，**Role**（角色）的值为 **Multi-AZ DB cluster**（多可用区数据库集群）。
  + 对于每个实例级行，**Role**（角色）的值为 **Writer instance**（写入器实例）或 **Reader instance**（读取器实例）。
  + 对于每个实例级行，**Multi-AZ**（多可用区）的值为 **3 Zones**（3 个区域）。

**Topics**
+ [Amazon RDS 的多可用区数据库实例部署](Concepts.MultiAZSingleStandby.md)
+ [Amazon RDS 的多可用区数据库集群部署](multi-az-db-clusters-concepts.md)

此外，以下主题同时适用于数据库实例和多可用区数据库集群。
+ [为 Amazon RDS 资源添加标签](USER_Tagging.md)
+ [Amazon RDS 中的 Amazon 资源名称（ARN）](USER_Tagging.ARN.md)
+ [使用 Amazon RDS 数据库实例的存储](USER_PIOPS.StorageTypes.md)
+ [维护数据库实例](USER_UpgradeDBInstance.Maintenance.md)
+ [升级数据库实例 引擎版本](USER_UpgradeDBInstance.Upgrading.md)

# Amazon RDS 的多可用区数据库实例部署
<a name="Concepts.MultiAZSingleStandby"></a>

Amazon RDS 使用带有一个备用数据库实例的多可用区部署为数据库实例提供高可用性和故障转移支持。这种类型的部署称为*多可用区数据库实例部署*。Amazon RDS 使用几种不同的技术来提供此故障转移支持。用于 MariaDB、MySQL、Oracle、PostgreSQL 和 RDS Custom for SQL Server 数据库实例的多可用区部署使用 Amazon 失效转移技术。Microsoft SQL Server 数据库实例使用 SQL Server 数据库镜像 (DBM) 或 Always On 可用性组 (AG)。有关多可用区的 SQL Server 版本支持的信息，请参阅[Amazon RDS for Microsoft SQL Server 多可用区部署](USER_SQLServerMultiAZ.md)。有关将 RDS Custom for SQL Server 用于多可用区的信息，请参阅[管理 RDS Custom for SQL Server 的多可用区部署](custom-sqlserver-multiaz.md)。

在多可用区数据库实例部署中，Amazon RDS 会自动在不同可用区中配置和维护一个同步备用副本。主数据库实例将跨可用区同步复制到备用副本，以提供数据冗余并在系统备份期间将延迟峰值降至最小。在计划内的系统维护期间，运行具有高可用性的数据库实例可以提高可用性。它还可以帮助您保护数据库，以防数据库实例发生故障和可用区中断。有关可用区的更多信息，请参阅[区域、可用区和 Local Zones ](Concepts.RegionsAndAvailabilityZones.md)。

**注意**  
高可用性选项不是只读场景的扩缩解决方案。您不能使用备用副本来提供读取流量。要提供只读流量，请使用多可用区数据库集群或只读副本。有关多可用区数据库集群的更多信息，请参阅 [Amazon RDS 的多可用区数据库集群部署](multi-az-db-clusters-concepts.md)。有关只读副本的更多信息，请参阅 [使用数据库实例只读副本](USER_ReadRepl.md)。

![\[高可用性场景\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/con-multi-AZ.png)


使用 RDS 控制台，您只需在创建数据库实例时指定多可用区，即可创建多可用区数据库部署。您可以使用控制台修改数据库实例并指定多可用区选项，从而将现有数据库实例转换为多可用区数据库实例部署。您还可以使用 AWS CLI 或 Amazon RDS API 指定多可用区数据库实例部署。使用 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) 或 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 命令，或者 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) 或 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) API 操作。

RDS 控制台显示备用副本的可用区（称为辅助可用区）。您还可以使用 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) CLI 命令或 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) API 操作来查找辅助可用区。

与单可用区部署相比，使用多可用区数据库部署的数据库实例会增加写入和提交延迟。这可能是因为发生了同步数据复制。尽管 AWS 设计用于在可用区之间提供低延迟网络连接，但如果您的部署故障转移到备用副本，延迟可能会发生变化。对于生产工作负载，我们建议您使用预置 IOPS（每秒输入/输出操作数）以获得快速、一致的性能。有关数据库实例类的更多信息，请参阅 [数据库实例类](Concepts.DBInstanceClass.md)。

# 将 Amazon RDS 的数据库实例转换为多可用区部署
<a name="Concepts.MultiAZ.Migrating"></a>

将数据库实例修改为多可用区部署，可通过在另一个可用区中添加一个备用实例来提高可用性。该过程涉及的停机时间极少，需要围绕存储和性能影响进行仔细的规划。此项更改可增强容错能力并减少出现故障时的恢复时间，使其成为高可用性环境的理想之选。

如果您有一个采用单可用区部署的数据库实例，并且要将它修改为多可用区数据库实例部署，则 Amazon RDS 执行以下操作：

1. 拍摄主数据库实例的 Amazon Elastic Block Store（EBS）卷的快照。

1. 从快照中为备用副本创建新卷。这些卷在后台初始化，并在数据完全初始化后达到最大卷性能。

1. 开启主副本卷与备用副本卷之间的同步块级复制。

**重要**  
在单可用区转换到多可用区期间，从快照创建备用数据库实例可以避免停机时间，但可能会影响性能，特别是对于写入敏感型工作负载。同步复制会增加 I/O 延迟，从而影响数据库性能。作为最佳做法，请避免将生产数据库实例转换为多可用区数据库实例。  
而是创建只读副本，对该副本启用备份，将其转换为多可用区，将数据加载到其卷中，然后将它提升为主数据库实例。有关更多信息，请参阅 [使用数据库实例只读副本](USER_ReadRepl.md)。

有两种方法可将数据库实例修改为多可用区数据库实例部署：

**Topics**
+ [使用 RDS 控制台转换为多可用区数据库实例部署](#Concepts.MultiAZ.Migrating.Convert)
+ [将数据库实例修改为多可用区数据库部署](#Concepts.MultiAZ.Migrating.Modify)

## 使用 RDS 控制台转换为多可用区数据库实例部署
<a name="Concepts.MultiAZ.Migrating.Convert"></a>

您可以使用 RDS 控制台将数据库实例转换为多可用区数据库实例部署。

您只能使用控制台来完成转换。要使用 AWS CLI 或 RDS API，请按照[将数据库实例修改为多可用区数据库部署](#Concepts.MultiAZ.Migrating.Modify)中的说明操作。

**使用 RDS 控制台转换为多可用区数据库实例部署**

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

1. 在导航窗格中，选择**数据库**，然后选择要修改的数据库实例。

1. 从 **Actions**（操作）中，选择 **Convert to Multi-AZ deployment**（转换为多可用区部署）。

1. 在确认页面上，选择 **Apply immediately**（立即应用）以立即应用更改。选择此选项不会导致停机，但可能会对性能产生影响。或者，您可以选择在下一个维护时段内应用更新。有关更多信息，请参阅 [使用计划修改设置](USER_ModifyInstance.ApplyImmediately.md)。

1. 选择 **Convert to Multi-AZ**（转换为多可用区）。

## 将数据库实例修改为多可用区数据库部署
<a name="Concepts.MultiAZ.Migrating.Modify"></a>

可以通过以下方式将数据库实例修改为多可用区数据库实例部署：
+ 使用 RDS 控制台，修改数据库实例，并将 **Multi-AZ deployment**（多可用区部署）设置为 **Yes**（是）。
+ 使用 AWS CLI，调用 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令，然后设置 `--multi-az` 选项。
+ 使用 RDS API，调用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作并将 `MultiAZ` 参数设置为 `true`。

有关修改数据库实例的信息，请参阅[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。在修改完成后，Amazon RDS 会触发事件 (RDS-EVENT-0025)，表示该过程已完成。您可以监控 Amazon RDS 事件。有关事件的更多信息，请参阅[使用 Amazon RDS 事件通知](USER_Events.md)。

# 对 Amazon RDS 的多可用区数据库实例执行失效转移
<a name="Concepts.MultiAZ.Failover"></a>

如果由于基础设施缺陷而导致多可用区数据库实例发生计划内或计划外中断，Amazon RDS 会自动切换到另一个可用区中的备用副本。

完成故障转移所用的时间取决于在主数据库实例变为不可用时的数据库活动和其他条件。故障转移时间通常为 60–120 秒。不过，事务较多或时间较长的恢复过程可能延长故障转移时间。完成故障转移后，RDS 控制台还需要一段时间才能反映新的可用区。

**注意**  
在重启多可用区数据库实例时，可以手动强制执行失效转移。有关更多信息，请参阅 [重启数据库实例](USER_RebootInstance.md)。

Amazon RDS 会自动处理故障转移，因此，您可以尽快恢复数据库操作而无需管理干预。如果出现下表中描述的任一情况，主数据库实例会自动切换到备用副本：您可以在事件日志中查看这些故障转移原因。


| 故障转移原因 | 描述 | 
| --- | --- | 
| RDS 数据库实例所在的操作系统正在脱机操作中安装补丁。 |  在操作系统补丁或安全更新的维护时段内触发了故障切换。 有关更多信息，请参阅“[维护数据库实例](USER_UpgradeDBInstance.Maintenance.md)”。  | 
| RDS 多可用区实例的主要主机运行状况不佳。 | 多可用区数据库实例部署检测到受损的主数据库实例并进行故障转移。 | 
| 由于网络连接断开，无法访问 RDS 多可用区实例的主机。 |  RDS 监控检测到主数据库实例的网络可达性故障并触发了故障转移。  | 
| 客户修改了 RDS 实例。 |  RDS 数据库实例修改触发了故障转移。 有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。  | 
| RDS 多可用区主实例正忙且无响应。 |  主数据库实例没有响应。建议您执行以下操作： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.Failover.html) 有关这些建议的更多信息，请参阅 [Amazon RDS 的监控工具](MonitoringOverview.md) 和 [Amazon RDS 的最佳实践](CHAP_BestPractices.md)。  | 
| RDS 多可用区实例的主要主机所在的存储卷出现故障。 | 多可用区数据库实例部署在主数据库实例上检测到存储问题并进行故障转移。 | 
| 用户请求数据库实例的故障转移。 |  您重新启动了数据库实例，并选择了**通过故障转移重启**。 有关更多信息，请参阅 [重启数据库实例](USER_RebootInstance.md)。  | 

要确定多可用区数据库实例是否发生故障转移，您可以执行以下操作：
+ 将数据库事件订阅设置为在故障转移启动时向您发送电子邮件或 SMS 通知。有关事件的更多信息，请参阅 [使用 Amazon RDS 事件通知](USER_Events.md)。
+ 使用 RDS 控制台或 API 操作查看数据库事件。
+ 使用 RDS 控制台和 API 操作查看多可用区数据库实例部署的当前状态。

有关如何响应故障转移、缩短恢复时间以及 Amazon RDS 的其他最佳实践的信息，请参阅 [Amazon RDS 的最佳实践](CHAP_BestPractices.md)。

## 设置 DNS 名称查找的 JVM TTL
<a name="Concepts.MultiAZ.Failover.Java-DNS"></a>

故障转移机制自动更改数据库实例的域名系统 (DNS) 记录，使其指向备用数据库实例。因此，您需要重新建立与数据库实例之间的所有现有连接。在 Java 虚拟机 (JVM) 环境中，由于 Java DNS 缓存机制的工作原理，您可能需要重新配置 JVM 设置。

JVM 缓存 DNS 名称查找。当 JVM 将主机名解析为 IP 地址时，它会在指定时间段内 (称为*存活时间* (TTL)) 缓存 IP 地址。

由于 AWS 资源使用偶尔变更的 DNS 名称条目，因此建议您为 JVM 配置的 TTL 值不超过 60 秒。这样做可确保在资源的 IP 地址发生更改时，您的应用程序可以通过重新查询 DNS 来接收和使用资源的新 IP 地址。

对于一些 Java 配置，将设置 JVM 默认 TTL，以便在重新启动 JVM 之前绝不刷新 DNS 条目。因此，如果 AWS 资源的 IP 地址在应用程序仍在运行时发生更改，则在您手动重新启动 JVM 并刷新缓存的 IP 信息之前，将无法使用该资源。在此情况下，设置 JVM 的 TTL，以便定期刷新其缓存的 IP 信息是极为重要的。

您可以通过检索 [https://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html](https://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html) 属性值来获取 JVM 的原定设置 TTL：

```
String ttl = java.security.Security.getProperty("networkaddress.cache.ttl");
```

**注意**  
默认 TTL 是变化的，具体取决于 JVM 的版本以及是否安装安全管理器。许多 JVM 提供的默认 TTL 小于 60 秒。如果您使用此类 JVM 并且未使用安全管理器，则您可以忽略本主题的剩余内容。有关 Oracle 中安全管理器的更多信息，请参阅 Oracle 文档中的[安全管理器](https://docs.oracle.com/javase/tutorial/essential/environment/security.html)。

要修改 JVM 的 TTL，请设置 `networkaddress.cache.ttl` 属性值。根据您的需求，使用下列方法之一：
+ 要为使用 JVM 的所有应用程序全局设置属性值，请在 `networkaddress.cache.ttl` 文件中设置 `$JAVA_HOME/jre/lib/security/java.security`。

  ```
  networkaddress.cache.ttl=60									
  ```
+ 要仅在本地为应用程序设置属性，请在建立任何网络连接之前，在应用程序的初始化代码中设置 `networkaddress.cache.ttl`。

  ```
  java.security.Security.setProperty("networkaddress.cache.ttl" , "60");								
  ```

# 具有附加存储卷的多可用区失效转移
<a name="MultiAZ.AdditionalStorageVolumes"></a>

多可用区部署支持具有附加存储卷的数据库实例。在失效转移期间，RDS 自动失效转移到备用实例，并将任何附加存储卷连接到该数据库实例。此过程可确保数据一致性和可用性。

当您为具有附加存储卷的数据库实例配置多可用区部署时，Amazon RDS 会自动将所有卷复制到不同可用区中的备用实例。复制的存储包括：
+ 主存储卷
+ 所有连接到数据库实例的附加存储卷

在失效转移期间，Amazon RDS 会提升备用实例，并确保所有存储卷都可用且一致。失效转移保持相同的存储配置，包括卷名称、存储类型和性能特征。

在成功进行失效转移后，您可以通过查看存储配置详细信息，来验证所有存储卷是否已正确连接且可访问。有关更多信息，请参阅 [查看数据库实例的存储卷详细信息](rds-storage-viewing.md)。

具有附加存储卷的数据库实例的失效转移时间与只有主存储的数据库实例类似。

# Amazon RDS 的多可用区数据库集群部署
<a name="multi-az-db-clusters-concepts"></a>

*多可用区数据库集群部署*是 Amazon RDS 的半同步、高可用性部署模式，具有两个可读副本数据库实例。多可用区数据库集群在同一个 AWS 区域 的三个独立可用区中有一个写入器数据库实例和两个读取器数据库实例。与多可用区数据库实例部署相比，多可用区数据库集群可提供高可用性、增加读取工作负载容量以及更低的写入延迟。

您可以使用 [将数据导入 Amazon RDS for MySQL 数据库实例并减少停机时间](mysql-importing-data-reduced-downtime.md) 中的说明将本地数据库中的数据导入到多可用区数据库集群。

您可以为多可用区数据库集群购买预留数据库实例。有关更多信息，请参阅 [多可用区数据库集群的预留数据库实例](USER_WorkingWithReservedDBInstances.md#USER_WorkingWithReservedDBInstances.MultiAZDBClusters)。

功能可用性和支持因每个数据库引擎的特定版本以及 AWS 区域而异。有关使用多可用区数据库集群的 Amazon RDS 的版本和区域可用性的更多信息，请参阅[支持 Amazon RDS 中多可用区数据库集群的区域和数据库引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.MultiAZDBClusters.md)。

**Topics**
+ [多可用区数据库集群的实例类可用性](#multi-az-db-clusters-concepts.InstanceAvailability)
+ [多可用区数据库集群架构](#multi-az-db-clusters-concepts-overview)
+ [多可用区数据库集群的参数组](#multi-az-db-clusters-concepts-parameter-groups)
+ [RDS 代理与多可用区数据库集群](#multi-az-db-clusters-proxy)
+ [副本滞后和多可用区数据库集群](#multi-az-db-clusters-concepts-replica-lag)
+ [多可用区数据库集群快照](#multi-az-db-clusters-concepts-snapshot)
+ [创建 Amazon RDS 的多可用区数据库集群](create-multi-az-db-cluster.md)
+ [连接到 Amazon RDS 的多可用区数据库集群](multi-az-db-clusters-concepts-connection-management.md)
+ [自动连接 Amazon RDS 的 AWS 计算资源和多可用区数据库集群](multi-az-compute-rds-connect.md)
+ [修改 Amazon RDS 的多可用区数据库集群](modify-multi-az-db-cluster.md)
+ [升级 Amazon RDS 的多可用区数据库集群的引擎版本](multi-az-db-clusters-upgrading.md)
+ [重命名 Amazon RDS 的多可用区数据库集群](multi-az-db-cluster-rename.md)
+ [重启 Amazon RDS 的多可用区数据库集群和读取器数据库实例](multi-az-db-clusters-concepts-rebooting.md)
+ [对 Amazon RDS 的多可用区数据库集群执行失效转移](multi-az-db-clusters-concepts-failover.md)
+ [使用多可用区数据库集群为 Amazon RDS 设置 PostgreSQL 逻辑复制](USER_MultiAZDBCluster_LogicalRepl.md)
+ [使用 Amazon RDS 的多可用区数据库集群只读副本](USER_MultiAZDBCluster_ReadRepl.md)
+ [设置从 Amazon RDS 的多可用区数据库集群进行外部复制](multi-az-db-clusters-external-replication.md)
+ [删除 Amazon RDS 的多可用区数据库集群](USER_DeleteMultiAZDBCluster.Deleting.md)
+ [Amazon RDS 的多可用区数据库集群的限制](multi-az-db-clusters-concepts.Limitations.md)

**重要**  
多可用区数据库集群与 Aurora 数据库集群不同。有关使用 Aurora 数据库集群的更多信息，请参阅《[Amazon Aurora 用户指南](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)》。

## 多可用区数据库集群的实例类可用性
<a name="multi-az-db-clusters-concepts.InstanceAvailability"></a>

以下数据库实例类支持多可用区数据库集群部署：`db.m5d`、`db.m6gd`、`db.m6id`、`db.m6idn`、`db.r5d`、`db.r6gd`、`db.x2iedn`、`db.r6id`、`db.r6idn` 和 `db.c6gd`。

**注意**  
c6gd 实例类是仅有的支持 `medium` 实例大小的实例类。

有关数据库实例类的更多信息，请参阅[数据库实例类](Concepts.DBInstanceClass.md)。

## 多可用区数据库集群架构
<a name="multi-az-db-clusters-concepts-overview"></a>

使用多可用区数据库集群，Amazon RDS 使用数据库引擎的本机复制功能将数据从写入器数据库实例复制到两个读取器数据库实例。当对写入器数据库实例进行更改时，它会发送给每个读取器数据库实例。

多可用区数据库集群部署使用半同步复制，这需要来自至少一个读取器数据库实例的确认才能提交更改。它不需要确认事件已在*所有*副本上完全执行和提交。

读取器数据库实例可充当自动故障转移目标，还可提供读取流量以提高应用程序读取吞吐量。如果写入器数据库实例发生中断，RDS 将管理到其中一个读取器数据库实例的故障转移。RDS 会根据具有最近更改记录的读取器数据库实例来执行此操作。

下图显示了一个多可用区数据库集群。

![\[多可用区数据库集群\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/multi-az-db-cluster.png)


与多可用区数据库实例部署相比，多可用区数据库集群的写入延迟通常较低。其还允许在读取器数据库实例上运行只读工作负载。RDS 控制台显示了写入器数据库实例的可用区和读取器数据库实例的可用区。您也可以使用 [describe-db-clusters](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html) CLI 命令或 [DescribeDBClusters](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBClusters.html) API 操作来查找此信息。

**重要**  
为防止 RDS for MySQL 多可用区数据库集群出现复制错误，我们强烈建议所有表都具有主键。

## 多可用区数据库集群的参数组
<a name="multi-az-db-clusters-concepts-parameter-groups"></a>

在多可用区数据库集群中，*数据库集群参数组*就像是引擎配置值的容器，这些值可应用于多可用区数据库集群中的每个数据库实例。

在多可用区数据库集群中，*数据库参数组*设置为数据库引擎和数据库引擎版本的默认数据库参数组。数据库集群参数组中的设置用于集群中的所有数据库实例。

有关参数组的信息，请参阅 [使用多可用区数据库集群的数据库集群参数组](USER_WorkingWithDBClusterParamGroups.md)。

## RDS 代理与多可用区数据库集群
<a name="multi-az-db-clusters-proxy"></a>

您可以使用 Amazon RDS 代理为您的多可用区数据库集群创建代理。通过使用 RDS 代理，您的应用程序可以池化和共享数据库连接，以提高其扩展能力。每个代理都执行连接*多路复用*，也称为连接重用。对于多路复用，RDS 代理使用一个底层数据库连接对事务执行所有操作。RDS 代理还可以将多可用区数据库集群的次要版本升级的停机时间缩短到一秒或更短。有关 RDS 代理优点的更多信息，请参阅 [Amazon RDS 代理](rds-proxy.md)。

要为多可用区数据库集群设置代理，请在创建集群时选择**创建 RDS 代理**。有关创建和管理 RDS 代理端点的说明，请参阅 [使用 Amazon RDS Proxy 终端节点](rds-proxy-endpoints.md)。

## 副本滞后和多可用区数据库集群
<a name="multi-az-db-clusters-concepts-replica-lag"></a>

*副本滞后*是写入器数据库实例上的最新事务与读取器数据库实例上的最新应用事务之间的时间差异。Amazon CloudWatch 指标 `ReplicaLag` 表示这种时间差。有关 CloudWatch 指标的更多信息，请参阅[使用 Amazon CloudWatch 监控 Amazon RDS 指标](monitoring-cloudwatch.md)。

尽管多可用区数据库集群允许高写入性能，但基于引擎的复制的性质仍可能导致副本滞后。由于任何故障转移都必须先解决副本滞后问题，然后才能提升新的写入器数据库实例，因此要考虑监控和管理此副本滞后。

对于 RDS for MySQL 多可用区数据库集群，故障转移时间取决于两个剩余读取器数据库实例的副本滞后。两个读取器数据库实例必须先应用未应用的事务，然后才能将其中一个升级为新写入器数据库实例。

对于 RDS for PostgreSQL 多可用区数据库集群，故障转移时间取决于两个剩余读取器数据库实例的最低副本滞后。具有最低副本滞后的读取器数据库实例必须先应用未应用的事务，然后才能将其升级为新写入器数据库实例。

有关演示副本滞后超过设置时间量时如何创建 CloudWatch 告警的教程，请参阅 [教程：为 Amazon RDS 的多可用区数据库集群副本滞后创建 Amazon CloudWatch 警报](multi-az-db-cluster-cloudwatch-alarm.md)。

### 副本滞后的常见原因
<a name="multi-az-db-clusters-concepts-replica-lag-causes"></a>

一般来说，写入工作负载过高，导致读取器数据库实例无法有效应用事务时，就会出现副本滞后。各种工作负载都可能会产生临时或持续副本滞后。以下是一些常见示例：
+ 写入器数据库实例的高写入并发或大量批处理更新，导致读取器数据库实例上的应用过程落后。
+ 在一个或多个读取器数据库实例上使用资源的繁重的读取工作负载。运行速度慢或查询数量多都可能会影响应用进程，继而导致副本滞后。
+ 由于数据库必须保留提交顺序，因此修改大量数据或 DDL 语句的事务有时会暂时加剧副本滞后问题。

### 缓解副本滞后问题
<a name="multi-az-db-clusters-concepts-replica-lag-mitigating"></a>

对于适用于 RDS for MySQL 和 RDS for PostgreSQL 的多可用区数据库集群，您可以通过减少写入器数据库实例的负载来缓解副本滞后问题。您还可以使用流量控制来减少副本滞后。*流量控制*通过限制写入器数据库实例上的写入操作来发挥作用，从而确保副本滞后时间不会继续无限延长。通过在事务结束时添加延迟来实现写入限制，以此降低写入器数据库实例的写入吞吐量。流量控制不能保证会消除滞后，但可以帮助缩短许多工作负载的总体滞后时间。以下各节提供有关将流量控制与 RDS for MySQL 和 RDS for PostgreSQL 结合使用的信息。

#### 使用 RDS for MySQL 的流量控制来缓解副本滞后
<a name="multi-az-db-clusters-concepts-replica-lag-mitigating.mysql"></a>

当您使用 RDS for MySQL 多可用区数据库集群时，默认情况下，使用动态参数 `rpl_semi_sync_master_target_apply_lag` 启用流量控制。此参数指定副本滞后的上限。当副本滞后接近这一配置的限制时，流量控制会限制写入器数据库实例上的写入事务，以尝试将副本滞后控制在指定值以下。在某些情况下，副本滞后可能会超过指定的限制。默认情况下，该参数设置为 120 秒。要禁用流量控制，请将该参数设置为其最大值 86400 秒（一天）。

要查看流量控制注入的当前延迟，请通过运行以下查询来显示参数 `Rpl_semi_sync_master_flow_control_current_delay`。

```
SHOW GLOBAL STATUS like '%flow_control%';
```

您的输出应类似于以下内容。

```
+-------------------------------------------------+-------+
| Variable_name                                   | Value |
+-------------------------------------------------+-------+
| Rpl_semi_sync_master_flow_control_current_delay | 2010  |
+-------------------------------------------------+-------+
1 row in set (0.00 sec)
```

**注意**  
延迟以微秒为单位显示。

当您为 RDS for MySQL 多可用区数据库集群启用 Performance Insights 时，您可以监控与指示查询通过流量控制延迟的 SQL 语句对应的等待事件。当流量控制引入延迟时，您可以查看与 Performance Insights 控制面板上的 SQL 语句对应的等待事件 `/wait/synch/cond/semisync/semi_sync_flow_control_delay_cond`。要查看这些指标，请确保性能架构已启用。有关 Performance Insights 的信息，请参阅 [在 Amazon RDS 上使用性能详情监控数据库负载](USER_PerfInsights.md)。

#### 使用 RDS for PostgreSQL 的流量控制来缓解副本滞后
<a name="multi-az-db-clusters-concepts-replica-lag-mitigating.postgresql"></a>

使用 RDS for PostgreSQL 多可用区数据库集群时，流量控制作为扩展部署。其为数据库集群中的所有数据库实例开启后台工件。默认情况下，读取器数据库实例上的后台工件会将当前副本滞后情况告知写入器数据库实例上的后台工件信。如果读取器数据库实例的滞后时间超过两分钟，则写入器数据库实例上的后台工件会在事务结束时添加延迟。若要控制滞后阈值，请使用参数 `flow_control.target_standby_apply_lag`。

流量控制限制 PostgreSQL 进程时，`pg_stat_activity` 和 Performance Insights 中的 `Extension` 等待事件会表明该情况。函数 `get_flow_control_stats` 显示当前所添加延迟时长的详细信息。

流量控制可以给大多数短时、高量并发联机事务处理 (OLTP) 工作负载带来益处。如果滞后由长时间运行的事务（如分批操作）造成，流量控制便无法提供特别大的助益。

从 `shared_preload_libraries` 中移除扩展程序，然后重启数据库实例，即可关闭流量控制。

## 多可用区数据库集群快照
<a name="multi-az-db-clusters-concepts-snapshot"></a>

Amazon RDS 会在所配置的备份时段内创建并保存多可用区数据库集群的自动备份。RDS 创建数据库集群的存储卷快照，同时备份整个集群而不仅仅是各个实例。

也可以手动备份多可用区数据库集群。对于非常长期的备份，请考虑将快照数据导出到 Amazon S3。有关更多信息，请参阅 [创建 Amazon RDS 的多可用区数据库集群快照](USER_CreateMultiAZDBClusterSnapshot.md)。

您可以将多可用区数据库集群还原到特定时间点，从而创建新的多可用区数据库集群。有关说明，请参阅[将多可用区数据库集群还原到指定时间](USER_PIT.MultiAZDBCluster.md)。

或者，可以将多可用区数据库集群快照还原到单可用区部署或多可用区数据库实例部署。有关说明，请参阅[从多可用区数据库集群快照还原到数据库实例](USER_RestoreFromMultiAZDBClusterSnapshot.md)。

# 创建 Amazon RDS 的多可用区数据库集群
<a name="create-multi-az-db-cluster"></a>

多可用区数据库集群在三个独立可用区中有一个写入器数据库实例和两个读取器数据库实例。与多可用区部署相比，多可用区数据库集群可提供高可用性、增加读取工作负载容量以及更低的延迟。有关多可用区数据库集群的更多信息，请参阅 [Amazon RDS 的多可用区数据库集群部署](multi-az-db-clusters-concepts.md)。

**注意**  
仅 MySQL 和 PostgreSQL 数据库引擎支持多可用区数据库集群。

## 数据库集群先决条件
<a name="create-multi-az-db-cluster-prerequisites"></a>

**重要**  
在创建多可用区数据库集群之前，必须先完成[设置 Amazon RDS 环境](CHAP_SettingUp.md)中的任务。

以下是创建多可用区数据库集群之前需要完成的先决条件。

**Topics**
+ [为数据库集群配置网络](#create-multi-az-db-cluster-prerequisites-VPC)
+ [其他先决条件](#create-multi-az-db-cluster-prerequisites-additional)

### 为数据库集群配置网络
<a name="create-multi-az-db-cluster-prerequisites-VPC"></a>

您只能在虚拟私有云（VPC）中基于 Amazon VPC 服务创建多可用区数据库集群。它必须位于至少有三个可用区的 AWS 区域 中。为数据库集群选择的数据库子网组必须包含至少三个可用区。此配置可确保数据库集群中的每个数据库实例都位于不同的可用区。

要在同一 VPC 中的新数据库集群和 Amazon EC2 实例之间设置连接，可以在创建数据库集群时执行此操作。要从同一 VPC 中的 EC2 实例以外的资源连接到数据库集群，请手动配置网络连接。

**Topics**
+ [配置与 EC2 实例的自动网络连接](#create-multi-az-db-cluster-prerequisites-VPC-automatic)
+ [手动配置网络](#create-multi-az-db-cluster-prerequisites-VPC-manual)

#### 配置与 EC2 实例的自动网络连接
<a name="create-multi-az-db-cluster-prerequisites-VPC-automatic"></a>

创建多可用区数据库集群时，可以使用 AWS 管理控制台 在 EC2 实例和新数据库集群之间设置连接。当您这样做时，RDS 会自动配置您的 VPC 和网络设置。数据库集群在与 EC2 实例相同的 VPC 中创建，以便 EC2 实例可以访问数据库集群。

以下是将 EC2 实例与数据库集群连接的要求：
+ 在创建数据库集群之前，EC2 实例必须存在于 AWS 区域中。

  如果 AWS 区域中不存在任何 EC2 实例，控制台将提供创建一个此类实例的链接。
+ 创建数据库集群的用户必须具有执行以下操作的权限：
  + `ec2:AssociateRouteTable` 
  + `ec2:AuthorizeSecurityGroupEgress` 
  + `ec2:AuthorizeSecurityGroupIngress` 
  + `ec2:CreateRouteTable` 
  + `ec2:CreateSubnet` 
  + `ec2:CreateSecurityGroup` 
  + `ec2:DescribeInstances` 
  + `ec2:DescribeNetworkInterfaces` 
  + `ec2:DescribeRouteTables` 
  + `ec2:DescribeSecurityGroups` 
  + `ec2:DescribeSubnets` 
  + `ec2:ModifyNetworkInterfaceAttribute` 
  + `ec2:RevokeSecurityGroupEgress` 

使用此选项创建私有数据库集群。数据库集群使用仅包含私有子网的数据库子网组，来限制对 VPC 内资源的访问。

要将 EC2 实例连接到数据库集群，请在 **Create database**（创建数据库）页面上的 **Connectivity**（连接）部分，选择 **Connect to an EC2 compute resource**（连接到 EC2 计算资源）。

![\[连接 EC2 实例\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/ec2-set-up-connection-create.png)


当您选择 **Connect to an EC2 compute resource**（连接到 EC2 计算资源）时，RDS 会自动设置以下选项。除非您通过选择 **Don't connect to an EC2 compute resource**（不要连接到 EC2 计算资源）来选择不与 EC2 实例建立连接，否则您无法更改这些设置。


****  

| 控制台选项 | 自动设置 | 
| --- | --- | 
|  **虚拟私有云（VPC）**。  |  RDS 将 VPC 设置为与 EC2 实例关联的 VPC。  | 
|  **DB subnet group**（数据库子网组）  | RDS 要求在与 EC2 实例相同的可用区中具有带私有子网的数据库子网组。如果存在符合此要求的数据库子网组，则 RDS 将使用现有的数据库子网组。默认情况下，此选项设置为 Automatic setup（自动设置）。当您选择 **Automatic setup**（自动设置）但没有满足此要求的数据库子网组时，将执行以下操作。RDS 在三个可用区中使用三个可用的私有子网，其中一个可用区与 EC2 实例相同。如果私有子网在可用区中不可用，则 RDS 会在可用区中创建私有子网。然后，RDS 创建数据库子网组。当私有子网可用时，RDS 使用与该子网关联的路由表，并将它创建的任何子网添加到该路由表中。当没有可用的私有子网时，RDS 会创建一个没有互联网网关访问权限的路由表，并将它创建的子网添加到该路由表中。RDS 还允许您使用现有的数据库子网组。如果您想使用您选择的现有数据库子网组，请选择 **Choose existing**（选择现有）。 | 
|  **公有访问权限**  |  RDS 选择 **No**（否），以使数据库集群不可供公开访问。 出于安全考虑，最好实践是保持数据库为私有，并确保不能从互联网访问数据库。  | 
|  **VPC security group (firewall) [VPC 安全组（防火墙）**]  |  RDS 创建与数据库集群关联的新安全组。安全组命名为 `rds-ec2-n`，其中 `n` 是一个数值。该安全组包含一条以 EC2 VPC 安全组（防火墙）作为源的入站规则。这个与数据库集群关联的安全组允许 EC2 实例访问数据库集群。 RDS 还会创建一个与 EC2 实例关联的新安全组。安全组命名为 `ec2-rds-n`，其中 `n` 是一个数值。该安全组包含一条以数据库集群的 VPC 安全组作为源的出站规则。该安全组允许 EC2 实例向数据库集群发送流量。 您可以通过选择 **Create new**（新建）并键入新安全组的名称，添加另一个新安全组。 您可以通过选择 **Choose existing**（选择现有）并选择要添加的安全组，添加现有安全组。  | 
|  **可用区**  |  RDS 在多可用区数据库集群部署中为一个数据库实例选择 EC2 实例的可用区。RDS 为其他两个数据库实例随机选择不同的可用区。写入器数据库实例在与 EC2 实例相同的可用区中创建。如果发生失效转移且写入器数据库实例位于不同的可用区，则可能会产生跨可用区成本。  | 

有关这些设置的更多信息，请参阅 [创建多可用区数据库集群的设置](#create-multi-az-db-cluster-settings)。

如果您在创建数据库集群后更改这些设置，则这些更改可能会影响 EC2 实例与数据库集群之间的连接。

#### 手动配置网络
<a name="create-multi-az-db-cluster-prerequisites-VPC-manual"></a>

要从同一 VPC 中的 EC2 实例以外的资源连接到数据库集群，请手动配置网络连接。如果您使用 AWS 管理控制台 创建多可用区数据库集群，您可以让 Amazon RDS 自动为您创建 VPC。或者，您也可以使用现有 VPC 或为您的多可用区数据库集群创建新的 VPC。要在多可用区数据库集群中使用您的 VPC，该 VPC 必须最少在三个可用区中均拥有一个子网。有关 VPC 的信息，请参阅 [Amazon VPC 和 Amazon RDS](USER_VPC.md)。

如果您没有默认 VPC 或尚未创建 VPC，并且您不打算使用控制台，请执行以下操作：
+ 在要部署数据库集群的 AWS 区域中，创建最少在三个可用区中均至少有一个子网的 VPC。有关更多信息，请参阅 [在 VPC 中使用数据库实例](USER_VPC.WorkingWithRDSInstanceinaVPC.md#Overview.RDSVPC.Create)。
+ 指定授权与您的 数据库集群的连接的 VPC 安全组。有关更多信息，请参阅[通过创建安全组提供对 VPC 中的数据库实例的访问](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup)和[使用安全组控制访问权限](Overview.RDSSecurityGroups.md)。
+ 指定 RDS 数据库子网组，该子网组在 VPC 中定义至少三个可由多可用区数据库集群使用的子网。有关更多信息，请参阅 [使用数据库子网组](USER_VPC.WorkingWithRDSInstanceinaVPC.md#USER_VPC.Subnets)。

有关适用于多可用区数据库集群的限制的信息，请参阅[Amazon RDS 的多可用区数据库集群的限制](multi-az-db-clusters-concepts.Limitations.md)。

如果您想连接到与多可用区数据库集群不在同一 VPC 中的资源，请参阅 [在 VPC 中访问数据库实例的场景](USER_VPC.Scenarios.md) 中的相应方案。

### 其他先决条件
<a name="create-multi-az-db-cluster-prerequisites-additional"></a>

在创建多可用区数据库集群前，请考虑以下附加先决条件：
+ 要定制您的数据库集群的配置参数，请通过必需的参数设置来指定数据库集群参数组。有关创建或修改数据库集群参数组的信息，请参阅[多可用区数据库集群的参数组](multi-az-db-clusters-concepts.md#multi-az-db-clusters-concepts-parameter-groups)。
+ 请确定要为数据库集群指定的 TCP/IP 端口号。有些公司的防火墙将会阻止通往这些默认端口的连接。如果您的公司防火墙阻止默认端口，请为数据库集群选择其他端口。数据库集群中的所有数据库实例均使用相同的端口。
+ 如果数据库的主引擎版本已到 RDS 标准支持终止日期，则必须使用 扩展支持CLI 选项或 RDS API 参数。有关更多信息，请参阅[创建多可用区数据库集群的设置](#create-multi-az-db-cluster-settings)中的 RDS 扩展支持。

## 创建数据库集群
<a name="create-multi-az-db-cluster-creating"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 创建多可用区数据库集群。

### 控制台
<a name="create-multi-az-db-cluster-creating-console"></a>

您可以通过选择 **Availability and durability**（可用性与持久性）部分中的 **Multi-AZ DB cluster**（多可用区数据库集群）来创建多可用区数据库集群。

**要使用控制台创建多可用区数据库集群**

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

1. 在 AWS 管理控制台 的右上角，选择要在其中创建数据库集群的 AWS 区域。

   有关支持多可用区数据库集群的 AWS 区域的更多信息，请参阅[Amazon RDS 的多可用区数据库集群的限制](multi-az-db-clusters-concepts.Limitations.md)。

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

1. 选择**创建数据库**。

   要创建多可用区数据库集群，请确保已选择 **Standard Create**（标准创建）并未选择 **Easy Create**（轻松创建）。

1. 在 **Engine type**（引擎类型）中，请选择 **MySQL** 或 **PostgreSQL**。

1. 对于 **Version**（版本），请选择数据库引擎版本。

   有关支持多可用区数据库集群的数据库引擎版本的信息，请参阅[Amazon RDS 的多可用区数据库集群的限制](multi-az-db-clusters-concepts.Limitations.md)。

1. 在 **Templates**（模板）中，请为您的部署选择适当的模板。

1. 在 **Availability and durability**（可用性与持久性）中，选择 **Multi-AZ DB cluster**（多可用区数据库集群）。  
![\[多可用区数据库集群选择\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/multi-az-db-cluster-create.png)

1. 在 **DB cluster identifier**（数据库集群标识符）中，请输入数据库集群的标识符。

1. 在 **Master username**（主用户名）中，请输入您的主用户名，或者保持默认设置。

1. 请输入您的主密码：

   1. 在**设置**部分中，打开**凭证设置**。

   1. 如果要指定密码，请取消勾选已选择的 **Auto generate a password**（自动生成密码）复选框。

   1. （可选）更改 **Master username**（主用户名）的值。

   1. 请在 **Master password**（主密码）和 **Confirm password**（确认密码）中输入相同的密码。

1. 对于**数据库实例类**，请选择数据库实例类。有关支持的数据库实例类的列表，请参阅[多可用区数据库集群的实例类可用性](multi-az-db-clusters-concepts.md#multi-az-db-clusters-concepts.InstanceAvailability)。

1. （可选）为该数据库集群设置与计算资源的连接。

   在创建数据库集群期间，您可以配置 Amazon EC2 实例和新数据库集群之间的连接。有关更多信息，请参阅 [配置与 EC2 实例的自动网络连接](#create-multi-az-db-cluster-prerequisites-VPC-automatic)。

1. 在**连接**部分的 **VPC 安全组（防火墙）**下，如果您选择**新建**，则会创建一个 VPC 安全组，其入站规则允许本地计算机的 IP 地址访问该数据库。

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

1. 选择**创建数据库**。

   如果选择使用自动生成的密码，则**数据库**页面上将显示**查看凭证详细信息**按钮。

   要查看数据库集群的主用户名和密码，请选择**查看凭证详细信息**。

   要以主用户身份连接到数据库集群，请使用显示的用户名和密码。
**重要**  
您无法再次查看主用户密码。

1. 对于 **Databases**（数据库），请选择新数据库集群的名称。

在 RDS 控制台上，将显示新数据库集群的详细信息。在此数据库集群完成创建、可供使用之前，此数据库集群的状态将为 **Creating**（正在创建）。当状态变为 **Available**（可用）时，您便可以连接到该数据库集群。根据所分配的数据库集群类和存储的不同，新数据库集群可能需要数分钟时间才可用。

### AWS CLI
<a name="create-multi-az-db-cluster-creating-cli"></a>

在使用 AWS CLI 创建多可用区数据库集群之前，确保满足所需的先决条件。其中包括创建 VPC 和 RDS 数据库子网组。有关更多信息，请参阅 [数据库集群先决条件](#create-multi-az-db-cluster-prerequisites)。

要使用 AWS CLI 创建多可用区数据库集群，请调用 [create-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-cluster.html) 命令。请指定 `--db-cluster-identifier`。对于 `--engine` 选项，请指定 `mysql` 或 `postgres`。

有关各选项的信息，请参阅 [创建多可用区数据库集群的设置](#create-multi-az-db-cluster-settings)。

有关支持多可用区数据库集群的 AWS 区域、数据库引擎和数据库引擎版本的信息，请参阅[Amazon RDS 的多可用区数据库集群的限制](multi-az-db-clusters-concepts.Limitations.md)。

`create-db-cluster` 命令将为您的数据库集群创建写入器数据库实例，以及两个读取器数据库实例。每个数据库实例都位于不同的可用区。

例如，以下命令将创建一个名为 `mysql-multi-az-db-cluster` 的 MySQL 8.0 多可用区数据库集群。

**Example**  
对于 Linux、macOS 或 Unix：  

```
 1. aws rds create-db-cluster \
 2.    --db-cluster-identifier mysql-multi-az-db-cluster \
 3.    --engine mysql \
 4.    --engine-version 8.0.32  \
 5.    --master-username admin \
 6.    --manage-master-user-password  \
 7.    --port 3306 \
 8.    --backup-retention-period 1  \
 9.    --db-subnet-group-name default \
10.    --allocated-storage 4000 \
11.    --storage-type io1 \
12.    --iops 10000 \
13.    --db-cluster-instance-class db.m5d.xlarge
```
对于：Windows  

```
 1. aws rds create-db-cluster ^
 2.    --db-cluster-identifier mysql-multi-az-db-cluster ^
 3.    --engine mysql ^
 4.    --engine-version 8.0.32 ^
 5.    --manage-master-user-password ^
 6.    --master-username admin ^
 7.    --port 3306 ^
 8.    --backup-retention-period 1 ^
 9.    --db-subnet-group-name default ^
10.    --allocated-storage 4000 ^
11.    --storage-type io1 ^
12.    --iops 10000 ^
13.    --db-cluster-instance-class db.m5d.xlarge
```

以下命令将创建一个名为 `postgresql-multi-az-db-cluster` 的 PostgreSQL 13.4 多可用区数据库集群。

**Example**  
对于 Linux、macOS 或 Unix：  

```
 1. aws rds create-db-cluster \
 2.    --db-cluster-identifier postgresql-multi-az-db-cluster \
 3.    --engine postgres \
 4.    --engine-version 13.4 \
 5.    --manage-master-user-password \
 6.    --master-username postgres \
 7.    --port 5432 \
 8.    --backup-retention-period 1  \
 9.    --db-subnet-group-name default \
10.    --allocated-storage 4000 \
11.    --storage-type io1 \
12.    --iops 10000 \
13.    --db-cluster-instance-class db.m5d.xlarge
```
对于：Windows  

```
 1. aws rds create-db-cluster ^
 2.    --db-cluster-identifier postgresql-multi-az-db-cluster ^
 3.    --engine postgres ^
 4.    --engine-version 13.4 ^
 5.    --manage-master-user-password ^
 6.    --master-username postgres ^
 7.    --port 5432 ^
 8.    --backup-retention-period 1 ^
 9.    --db-subnet-group-name default ^
10.    --allocated-storage 4000 ^
11.    --storage-type io1 ^
12.    --iops 10000 ^
13.    --db-cluster-instance-class db.m5d.xlarge
```

### RDS API
<a name="create-multi-az-db-cluster-creating-api"></a>

在使用 RDS API 创建多可用区数据库集群之前，您必须满足所需的先决条件，例如创建 VPC 和 RDS 数据库子网组。有关更多信息，请参阅 [数据库集群先决条件](#create-multi-az-db-cluster-prerequisites)。

要使用 RDS API 创建多可用区数据库集群，请调用 [CreateDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html) 操作。请指定 `DBClusterIdentifier`。对于 `Engine` 参数，请指定 `mysql` 或 `postgresql`。

有关各选项的信息，请参阅 [创建多可用区数据库集群的设置](#create-multi-az-db-cluster-settings)。

`CreateDBCluster` 操作将为您的数据库集群创建写入器数据库实例，以及两个读取器数据库实例。每个数据库实例都位于不同的可用区。

## 创建多可用区数据库集群的设置
<a name="create-multi-az-db-cluster-settings"></a>

有关创建多可用区数据库集群时所选设置的详细信息，请参阅下表。有关 AWS CLI 选项的更多信息，请参阅 [create-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-cluster.html)。有关 RDS API 参数的更多信息，请参阅 [CreateDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html)。


| 控制台设置 | 设置说明 | CLI 选项和 RDS API 参数 | 
| --- | --- | --- | 
|  **分配的存储空间**  |  为数据库集群中的每个数据库实例分配的存储量（以 GiB 为单位）。有关更多信息，请参阅 [Amazon RDS 数据库实例存储](CHAP_Storage.md)。  |  **CLI 选项：** `--allocated-storage` **API 参数：**  `AllocatedStorage`  | 
| 自动次要版本升级 |  请选择 **Enable auto minor version upgrade**（启用自动次要版本升级），以使数据库集群能够在首选次要数据库引擎版本升级可用时自动接收这些升级。Amazon RDS 在维护时段内执行自动次要版本升级。  |  **CLI 选项：** `--auto-minor-version-upgrade` `--no-auto-minor-version-upgrade` **API 参数：** `AutoMinorVersionUpgrade`  | 
|  备份保留期  |  您希望数据库集群自动备份的保留天数。对于多可用区数据库集群，此值必须设置为 **1** 或更大。 有关更多信息，请参阅 [备份简介](USER_WorkingWithAutomatedBackups.md)。  |  **CLI 选项：** `--backup-retention-period` **API 参数：** `BackupRetentionPeriod`  | 
|  备份时段： |  Amazon RDS 自动备份数据库集群的时间段。除非您知道需要何时进行数据库备份，否则，请使用 **No preference**（无首选项）的默认设置。 有关更多信息，请参阅“[备份简介](USER_WorkingWithAutomatedBackups.md)”。  |  **CLI 选项：** `--preferred-backup-window` **API 参数：** `PreferredBackupWindow`  | 
|  **证书颁发机构**  |  数据库集群使用的服务器证书的证书颁发机构（CA）。 有关更多信息，请参阅 [使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。  |  **CLI 选项：** `--ca-certificate-identifier` **RDS API 参数：** `CACertificateIdentifier`  | 
|  将标签复制到快照  |  在创建快照时，该选项将任何数据库集群标签复制到数据库快照中。 有关更多信息，请参阅 [为 Amazon RDS 资源添加标签](USER_Tagging.md)。  |  **CLI 选项：** `-copy-tags-to-snapshot` `-no-copy-tags-to-snapshot` **RDS API 参数：** `CopyTagsToSnapshot`  | 
|  数据库身份验证  |  您想要使用的数据库身份验证选项。 选择 **Password authentication** 以仅使用数据库密码验证数据库用户的身份。 选择 **Password and IAM DB authentication**（密码和 IAM 数据库身份验证），以通过用户和角色的数据库密码和用户凭证验证数据库用户的身份。有关更多信息，请参阅 [适用于 MariaDB、MySQL 和 PostgreSQL 的IAM 数据库身份验证](UsingWithRDS.IAMDBAuth.md)。  |  **CLI 选项：** `--enable-iam-database-authentication` `--no-enable-iam-database-authentication` **RDS API 参数：** `EnableIAMDatabaseAuthentication`  | 
|  数据库端口： |  要用于访问数据库集群的端口。显示的是默认端口。 创建数据库集群后将无法更改端口。 有些公司的防火墙将会阻止通往这些默认端口的连接。如果您的公司防火墙阻止默认端口，请为数据库集群输入其他端口。  |  **CLI 选项：** `--port` **RDS API 参数：** `Port`  | 
|  数据库集群标识符  |  数据库集群的名称。请使用与命名本地部署服务器相同的方式命名数据库集群。数据库集群标识符最多可以包含 63 个字母数字字符，且必须在所选 AWS 区域中对于您的账户是唯一的。  |  **CLI 选项：** `--db-cluster-identifier` **RDS API 参数：** `DBClusterIdentifier`  | 
|  数据库实例类： |  多可用区数据库集群中各数据库实例（例如 `db.m5d.xlarge`）的计算和内存容量。 如有可能，请选择足够大的数据库实例类以便典型查询工作集能够保留在内存中。如果在内存中保留工作集，系统可以避免写入到磁盘，从而提高性能。 有关支持的数据库实例类的列表，请参阅[多可用区数据库集群的实例类可用性](multi-az-db-clusters-concepts.md#multi-az-db-clusters-concepts.InstanceAvailability)。  |  **CLI 选项：** `--db-cluster-instance-class` **RDS API 参数：** `DBClusterInstanceClass`  | 
|  **数据库集群参数组**  |  要与数据库集群关联的数据库集群参数组。 有关更多信息，请参阅 [多可用区数据库集群的参数组](multi-az-db-clusters-concepts.md#multi-az-db-clusters-concepts-parameter-groups)。  |  **CLI 选项：** `--db-cluster-parameter-group-name` **RDS API 参数：** `DBClusterParameterGroupName`  | 
|  数据库引擎版本  |  要使用的数据库引擎的版本。  |  **CLI 选项：** `--engine-version` **RDS API 参数：** `EngineVersion`  | 
|  数据库集群参数组  |  要与数据库集群关联的数据库实例参数组。 有关更多信息，请参阅 [多可用区数据库集群的参数组](multi-az-db-clusters-concepts.md#multi-az-db-clusters-concepts-parameter-groups)。  |  **CLI 选项：** `--db-cluster-parameter-group-name` **RDS API 参数：** `DBClusterParameterGroupName`  | 
|  数据库子网组： | 要用于数据库集群的数据库子网组。选择 Choose existing（选择现有）以使用现有的数据库子网组。然后，从 Existing DB subnet groups（现有数据库子网组）下拉列表中选择所需的子网组。选择 **Automatic setup**（自动设置），让 RDS 选择兼容的数据库子网组。如果不存在任何子网组，RDS 会为您的集群创建一个新的子网组。有关更多信息，请参阅 [使用数据库子网组](USER_VPC.WorkingWithRDSInstanceinaVPC.md#USER_VPC.Subnets)。 |  **CLI 选项：** `--db-subnet-group-name` **RDS API 参数：** `DBSubnetGroupName`  | 
| 删除保护 |  **启用删除保护**以禁止删除数据库集群。如果使用控制台创建生产数据库集群，预设情况下将开启删除保护。 有关更多信息，请参阅 [删除数据库实例](USER_DeleteInstance.md)。  |  **CLI 选项：** `--deletion-protection` `--no-deletion-protection` **RDS API 参数：** `DeletionProtection`  | 
|  加密  |  请选择 **Enable Encryption**（启用加密）以对该数据库集群开启静态加密。 预设情况下，将对多可用区数据库集群开启加密。 有关更多信息，请参阅 [加密 Amazon RDS 资源](Overview.Encryption.md)。  |  **CLI 选项：** `--kms-key-id` `--storage-encrypted` `--no-storage-encrypted` **RDS API 参数：** `KmsKeyId` `StorageEncrypted`  | 
|  增强监控  |  选择 **Enable enhanced monitoring**（启用增强监控）可为您的数据库集群运行所在的操作系统开启实时指标收集。 有关更多信息，请参阅 [使用增强监控来监控操作系统指标](USER_Monitoring.OS.md)。  |  **CLI 选项：** `--monitoring-interval` `--monitoring-role-arn` **RDS API 参数：** `MonitoringInterval` `MonitoringRoleArn`  | 
|  初始数据库名称： |  数据库集群的数据库名称。如果您未提供名称，Amazon RDS 不会在 MySQL 的数据库集群上创建数据库。但是，它确实会在 PostgreSQL 的数据库集群上创建数据库。名称不能是数据库引擎的保留字。它还有其他约束，具体取决于数据库引擎。 MySQL： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/create-multi-az-db-cluster.html) PostgreSQL： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/create-multi-az-db-cluster.html)  |  **CLI 选项：** `--database-name` **RDS API 参数：** `DatabaseName`  | 
|  **日志导出**  |  要发布到 Amazon CloudWatch Logs 的数据库日志文件的类型。 有关更多信息，请参阅“[将数据库日志发布到 Amazon CloudWatch Logs](USER_LogAccess.Procedural.UploadtoCloudWatch.md)”。  |  **CLI 选项：** `-enable-cloudwatch-logs-exports` **RDS API 参数：** `EnableCloudwatchLogsExports`  | 
|  维护时段  |  30 分钟时段，在这段时间内，将会应用对数据库集群的待处理修改。如果该时段无关紧要，请选择 **No preference**（无首选项）。 有关更多信息，请参阅“[Amazon RDS 维护时段](USER_UpgradeDBInstance.Maintenance.md#Concepts.DBMaintenance)”。  |  **CLI 选项：** `--preferred-maintenance-window` **RDS API 参数：** `PreferredMaintenanceWindow`  | 
|  在 AWS Secrets Manager 中管理主凭证  |  选择**在 AWS Secrets Manager 中管理主凭证**，以在 Secrets Manager 的密钥中管理主用户密码。 （可选）选择用于保护密钥的 KMS 密钥。请从您的账户的 KMS 密钥中进行选择，或输入来自其他账户的密钥。 有关更多信息，请参阅 [使用 Amazon RDS 和 AWS Secrets Manager 管理密码](rds-secrets-manager.md)。  |  **CLI 选项：** `--manage-master-user-password \| --no-manage-master-user-password` `--master-user-secret-kms-key-id` **RDS API 参数：** `ManageMasterUserPassword` `MasterUserSecretKmsKeyId`  | 
|  主密码： |  您的主用户账户密码。  |  **CLI 选项：** `--master-user-password` **RDS API 参数：** `MasterUserPassword`  | 
|  主用户名 –  |  用作登录数据库集群的主用户名，拥有所有数据库权限。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/create-multi-az-db-cluster.html) 您无法在创建多可用区数据库集群之后更改主用户名。 有关授予主用户权限的更多信息，请参阅 [主用户账户权限](UsingWithRDS.MasterAccounts.md)。  |  **CLI 选项：** `--master-username` **RDS API 参数：** `MasterUsername`  | 
| 性能详情 |  请选择 **Enable Performance Insights**（启用性能详情）以监控数据库集群负载，以便您可以分析数据库性能和解决数据库性能问题。 选择保留期以确定要保留的性能详情历史记录数量。保留期设置为**默认值（7 天）**。要将性能数据保留更长时间，请指定 1–24 个月。有关保留期的更多信息，请参阅。[性能详情的定价和数据留存](USER_PerfInsights.Overview.cost.md) 选择一个 KMS 密钥以用来保护用于加密该数据库卷的密钥。请从您的账户的 KMS 密钥中进行选择，或输入来自其他账户的密钥。 有关更多信息，请参阅 [在 Amazon RDS 上使用性能详情监控数据库负载](USER_PerfInsights.md)。  |  **CLI 选项：** `--enable-performance-insights` `--no-enable-performance-insights` `--performance-insights-retention-period` `--performance-insights-kms-key-id` **RDS API 参数：** `EnablePerformanceInsights` `PerformanceInsightsRetentionPeriod` `PerformanceInsightsKMSKeyId`  | 
|  预调配 IOPS  |  最初为数据库集群分配的预置 IOPS（每秒输入/输出操作数）量。  |  **CLI 选项：** `--iops` **RDS API 参数：** `Iops`  | 
|  公有访问权限  |  请选择 **Publicly accessible**（可公开访问）以为数据库集群提供公有 IP 地址，这表示可以在 VPC 外部访问该实例。要可供公开访问，数据库集群还必须在 VPC 的公有子网中。 请选择 **Not publicly accessible**（不可公开访问）以设置只能从 VPC 内部访问数据库集群。 有关更多信息，请参阅 [对互联网隐藏 VPC 中的数据库实例](USER_VPC.WorkingWithRDSInstanceinaVPC.md#USER_VPC.Hiding)。 要从其 VPC 外部连接到数据库集群，该数据库集群必须可公开访问。此外，必须使用数据库集群安全组的入站规则授予访问权限，并且必须满足其他要求。有关更多信息，请参阅 [无法连接到 Amazon RDS 数据库实例](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。 如果您的数据库集群不可公开访问，则您可以使用 AWS Site-to-Site VPN 连接或 Direct Connect 连接从专用网络访问该实例。有关更多信息，请参阅 [互联网络流量隐私](inter-network-traffic-privacy.md)。  |  **CLI 选项：** `--publicly-accessible` `--no-publicly-accessible` **RDS API 参数：** `PubliclyAccessible`  | 
| RDS 扩展支持 | 选择**启用 RDS Extended Support**，以允许受支持的主要引擎版本在 RDS 标准支持终止日期后继续运行。 当您创建数据库集群时，Amazon RDS 默认使用 RDS 扩展支持。为了防止在 RDS 标准支持终止日期后创建新的数据库集群并避免支付 RDS 扩展支持费用，请禁用此设置。在 RDS 扩展支持定价开始日期之前，您的现有数据库集群不会产生费用。 有关更多信息，请参阅 [Amazon RDS 的 Amazon RDS 扩展支持](extended-support.md)。 |  **CLI 选项：** `--engine-lifecycle-support` **RDS API 参数：** `EngineLifecycleSupport`  | 
|  **Storage throughput（存储吞吐量**  |  数据库集群的存储吞吐量值。仅在您为存储类型选择通用型 SSD（gp3）时，此设置才可见。 此设置不可配置，可根据您指定的 IOPS 自动设置。 有关更多信息，请参阅 [gp3 存储（推荐）](CHAP_Storage.md#gp3-storage)。  |  此值是自动计算的，并且没有 CLI 选项。  | 
|  **RDS Proxy（RDS 代理**  |  选择 **Create an RDS Proxy**（创建 RDS 代理），以便为您的数据库集群创建代理。Amazon RDS 会自动为代理创建 IAM 角色和 Secrets Manager 密钥。  |  创建数据库集群时不可用。  | 
|  存储类型  |  数据库集群的存储类型。 仅支持通用型 SSD（gp3）、预调配 IOPS（io1）和预调配 IOPS SSD（io2）存储。 有关更多信息，请参阅 [Amazon RDS 存储类型](CHAP_Storage.md#Concepts.Storage)。  |  **CLI 选项：** `--storage-type` **RDS API 参数：** `StorageType`  | 
|  虚拟私有云（VPC）。 |  基于要与此数据库集群关联的 Amazon VPC 服务的 VPC。 有关更多信息，请参阅 [Amazon VPC 和 Amazon RDS](USER_VPC.md)。  |  对于 CLI 和 API，您可以指定 VPC 安全组 ID。  | 
|  VPC security group (firewall) [VPC 安全组（防火墙）]  |  要与数据库集群关联的安全组。 有关更多信息，请参阅 [VPC 安全组概述](Overview.RDSSecurityGroups.md#Overview.RDSSecurityGroups.VPCSec)。  |  **CLI 选项：** `--vpc-security-group-ids` **RDS API 参数：** `VpcSecurityGroupIds`  | 

## 创建多可用区数据库集群时不适用的设置
<a name="create-multi-az-db-cluster-settings-not-applicable"></a>

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) 和 RDS API 操作 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html) 中的以下设置不适用于多可用区数据库集群。

您也无法在控制台中为多可用区数据库集群指定这些设置。


| AWS CLI 设置 | RDS API 设置 | 
| --- | --- | 
|  `--availability-zones`  |  `AvailabilityZones`  | 
|  `--backtrack-window`  |  `BacktrackWindow`  | 
|  `--character-set-name`  |  `CharacterSetName`  | 
|  `--domain`  |  `Domain`  | 
|  `--domain-iam-role-name`  |  `DomainIAMRoleName`  | 
|  `--enable-global-write-forwarding \| --no-enable-global-write-forwarding`  |  `EnableGlobalWriteForwarding`  | 
|  `--enable-http-endpoint \| --no-enable-http-endpoint`  |  `EnableHttpEndpoint`  | 
|  `--global-cluster-identifier`  |  `GlobalClusterIdentifier`  | 
|  `--option-group-name`  |  `OptionGroupName`  | 
|  `--pre-signed-url`  |  `PreSignedUrl`  | 
|  `--replication-source-identifier`  |  `ReplicationSourceIdentifier`  | 
|  `--scaling-configuration`  |  `ScalingConfiguration`  | 

# 连接到 Amazon RDS 的多可用区数据库集群
<a name="multi-az-db-clusters-concepts-connection-management"></a>

 多可用区数据库集群具有三个数据库实例，而不是单个数据库实例。每个连接均由特定的数据库实例处理。在连接到多可用区数据库集群时，您指定的主机名和端口将指向名为*端点* 的完全限定域名。多可用区数据库集群使用端点机制来提取这些连接，因此，您无需确切指定数据库集群中要连接的数据库实例。因此，当某些数据库实例不可用时，您不必对所有主机名进行硬编码或编写自己的逻辑来重新路由连接。

写入器端点将连接到数据库集群的写入器数据库实例，该实例同时支持读取和写入操作。读取器端点连接到两个读取器数据库实例之一，这两个实例仅支持读取操作。

 通过使用端点，您可以根据使用案例将每个连接映射到相应的数据库实例或数据库实例组。例如，要执行 DDL 和 DML 语句，您可以连接到作为写入器数据库实例的任一数据库实例。要执行查询，您可以连接到读取器端点，并通过多可用区数据库集群自动在读取器数据库实例之间管理连接。对于诊断或优化，您可以连接到特定数据库实例端点以检查有关特定数据库实例的详细信息。

有关连接到数据库实例的信息，请参阅 [连接到 Amazon RDS 数据库实例](CHAP_CommonTasks.Connect.md)。

有关连接到多可用区数据库集群的更多信息，请参阅以下主题。

**主题**
+ [集群端点](#multi-az-db-clusters-concepts-connection-management-endpoints-cluster)
+ [读取器终端节点](#multi-az-db-clusters-concepts-connection-management-endpoints-reader)
+ [实例端点](#multi-az-db-clusters-concepts-connection-management-endpoints-instance)
+ [高可用性连接](#multi-az-db-clusters-concepts-connection-management-endpoints-ha)
+ [使用 AWS 驱动程序连接到 Amazon RDS 的多可用区数据库集群使用 Amazon Web Services（AWS）JDBC 驱动程序连接到多可用区数据库集群](maz-cluster-connect-drivers.md)

## 多可用区数据库集群端点的类型
<a name="multi-az-db-clusters-concepts-connection-management-endpoint-types"></a>

 端点由包含主机地址的唯一标识符表示。可从多可用区数据库集群使用以下类型的端点。

**集群端点**  
 多可用区数据库集群的*集群端点*（或*写入器端点*）连接到该数据库集群的当前写入器数据库实例。此端点是唯一可以执行写操作（如 DDL 和 DML 语句）的端点。此端点还可以执行读取操作。  
 每个多可用区数据库集群均有一个集群端点和一个写入器数据库实例。  
 对数据库集群上的所有写入操作使用集群端点，这些操作包括插入、更新、删除和 DDL 更改。您还可以对读取操作（如查询）使用集群端点。  
 如果数据库集群的当前写入器数据库实例失败，多可用区数据库集群将自动故障转移到新的写入器数据库实例。在故障转移期间，数据库集群将继续为从新的写入器数据库实例到集群端点的请求提供服务，对服务造成的中断最少。  
 以下示例介绍多可用区数据库集群中的集群端点。  
 `mydbcluster.cluster-123456789012.us-east-1.rds.amazonaws.com`   
有关连接到集群端点的更多信息，请参阅[集群端点](#multi-az-db-clusters-concepts-connection-management-endpoints-cluster)。

**读取器端点**  
 多可用区数据库集群的*读取器端点*为数据库集群的只读连接提供支持。对读取操作（如 `SELECT` 查询）使用读取器端点。通过在读取器数据库实例上处理这些语句，此端点可减少写入器数据库实例上的开销。它还可以帮助集群扩展容量以同时 `SELECT` 查询。每个多可用区数据库集群均有一个读取器端点。  
 读取器端点向读取器数据库实例之一发送每个连接请求。在会话中使用读取器端点时，您只能执行只读语句，例如该会话中的 `SELECT`。  
 以下示例介绍多可用区数据库集群的读取器端点。读取器端点的只读意图由集群端点名称中的 `-ro` 指示。  
 `mydbcluster.cluster-ro-123456789012.us-east-1.rds.amazonaws.com`   
有关连接到读取器端点的更多信息，请参阅[读取器终端节点](#multi-az-db-clusters-concepts-connection-management-endpoints-reader)。

**实例端点**  
 *实例端点*会连接到多可用区数据库集群中的特定数据库实例。数据库集群中的每个数据库实例具有自己的唯一实例端点。因此，数据库集群的当前写入器数据库实例具有一个实例端点，并且数据库集群中的每个读取器数据库实例都具有一个实例端点。  
 实例端点提供对数据库集群连接的直接控制。此控制可以帮助您解决可能不适合使用集群端点或读取器端点的场景。例如，客户端应用程序可能根据工作负载类型需要更精细的负载均衡。在这种情况下，您可以配置多个客户端以连接到数据库集群中的不同读取器数据库实例，以便分配读取工作负载。  
 以下示例介绍多可用区数据库集群中数据库实例的实例端点。  
 `mydbinstance.123456789012.us-east-1.rds.amazonaws.com`   
有关连接到实例端点的更多信息，请参阅[实例端点](#multi-az-db-clusters-concepts-connection-management-endpoints-instance)。

## 查看端点
<a name="multi-az-db-clusters-concepts-connection-management-viewing"></a>

使用控制台、AWS CLI 或 Amazon RDS API 查看集群端点、读取器端点和实例端点。

------
#### [ Console ]

 在 AWS 管理控制台 中，您可以在每个多可用区数据库集群的详细信息页面中查看集群端点和读取器端点。您可在每个数据库实例的详细信息页面中查看实例端点。

------
#### [ AWS CLI ]

利用 AWS CLI，您会在 [describe-db-clusters](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html) 命令的输出中看到写入器和读取器端点。例如，以下命令显示当前 AWS 区域中所有集群的端点属性。

```
aws rds describe-db-cluster-endpoints
```

------
#### [ Amazon RDS API ]

 利用 Amazon RDS API，您可以通过调用 [DescribeDBClusterEndpoints](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBClusterEndpoints.html) 操作来检索端点。输出还将显示 Amazon Aurora 数据库集群端点（如果存在）。

------

## 集群端点
<a name="multi-az-db-clusters-concepts-connection-management-endpoints-cluster"></a>

每个多可用区数据库集群都有一个内置读取器端点，其名称和其他属性均由 Amazon RDS 管理。您无法创建、删除或修改此类端点。

在管理数据库集群、执行提取、转换、加载 (ETL) 操作或开发和测试应用程序时，可以使用集群端点。集群端点将连接到集群的写入器数据库实例。写入器数据库实例是您可以在其中创建表和索引、运行 `INSERT` 语句以及执行其他 DDL 和 DML 操作的唯一数据库实例。

当故障转移机制将新数据库实例提升为集群的写入器数据库实例时，集群端点指向的物理 IP 地址会发生更改。如果您使用任意形式的连接池或其他多路复用，请准备刷新或减少任何缓存的 DNS 信息的生存时间。这样做可确保您不会尝试与在故障转移后不可用或现在为只读的数据库实例建立读/写连接。

## 读取器终端节点
<a name="multi-az-db-clusters-concepts-connection-management-endpoints-reader"></a>

您将读取器端点用于多可用区数据库集群的只读连接。此端点可帮助数据库集群处理查询密集型工作负载。读取器端点是您向在集群上执行报告或其他只读操作的应用程序提供的端点。读取器端点向多可用区数据库数据库集群中的可用读取器数据库实例发送连接。

 每个多可用区集群都有一个内置读取器端点，其名称和其他属性由 Amazon RDS 管理。您无法创建、删除或修改此类端点。

## 实例端点
<a name="multi-az-db-clusters-concepts-connection-management-endpoints-instance"></a>

多可用区数据库集群中的每个数据库实例均有自己的内置实例端点，其名称和其他属性由 Amazon RDS 管理。您无法创建、删除或修改此类端点。使用多可用区数据库集群时，与实例端点相比，您通常会更频繁地使用写入器和读取器端点。

在日常操作中，使用实例端点的主要方式是诊断影响多可用区数据库集群中某个特定数据库实例的容量或性能问题。在连接到特定数据库实例时，您可以检查其状态变量、指标等。这样做可以帮助您确定该数据库实例与集群中其他数据库实例的不同之处。

## 高可用性连接
<a name="multi-az-db-clusters-concepts-connection-management-endpoints-ha"></a>

对于高可用性非常重要的多可用区数据库集群，请使用写入器端点进行读/写或通用型连接，并使用读取器端点进行只读连接。写入器和读取器端点比实例端点更好地管理数据库实例故障转移。与实例端点不同，如果集群中的数据库实例变得不可用，写入器和读取器端点会自动更改其连接到的数据库实例。

 如果数据库集群的写入器数据库实例失败，Amazon RDS 将自动故障转移到新的写入器数据库实例。它通过将读取器数据库实例提升为新的写入器数据库实例来实现这一目标。如果发生了故障转移，您可以使用写入器端点重新连接到新提升的写入器数据库实例。或者，您可以使用读取器端点重新连接到数据库集群中的读取器数据库实例之一。在故障转移期间，在将读取器数据可实例提升为新的写入器数据库实例之后，读取器端点可能会在很短的时间内将连接定向到数据库集群的新写入器数据库实例。如果您设计自己的应用程序逻辑来管理实例端点连接，则可以手动或以编程方式搜索数据库集群中生成的可用数据库实例集。

# 使用 AWS 驱动程序连接到 Amazon RDS 的多可用区数据库集群
<a name="maz-cluster-connect-drivers"></a>

借助 AWS 驱动程序套件，可显著缩短切换和失效转移时间，并支持使用 AWS Secrets Manager、AWS Identity and Access Management（IAM）和联合身份进行身份验证。AWS 驱动程序依靠监控数据库集群状态和了解集群拓扑，来确定新的写入器。这种方法将切换和故障转移时间缩短到几秒钟，而开源驱动程序的切换和故障转移时间则为几十秒。

随着新服务功能的推出，使用 AWS 驱动程序套件可为这些服务功能提供内置支持。

## 使用 Amazon Web Services（AWS）JDBC 驱动程序连接到多可用区数据库集群
<a name="maz-cluster-connect-jdbc"></a>

Amazon Web Services（AWS）JDBC 驱动程序设计为高级 JDBC 包装器，可帮助应用程序利用集群数据库的功能。此包装器是对现有 JDBC 驱动程序各项功能的补充和扩展。该驱动程序与以下社区驱动程序兼容：
+ MySQL Connector/J
+ MariaDB Connector/J
+ pgJDBC

要安装 AWS JDBC 驱动程序，请附加 AWS JDBC 驱动程序.jar 文件（位于应用程序 `CLASSPATH` 中），并保留对相应社区驱动程序的引用。按如下方式更新相应的连接 URL 前缀：
+ `jdbc:mysql://`到 `jdbc:aws-wrapper:mysql://`。
+ `jdbc:mariadb://`到 `jdbc:aws-wrapper:mariadb://`。
+ `jdbc:postgresql://`到 `jdbc:aws-wrapper:postgresql://`。

有关 AWS JDBC 驱动程序的更多信息及其完整使用说明，请参阅 [Amazon Web Services (AWS) JDBC Driver GitHub 存储库](https://github.com/awslabs/aws-advanced-jdbc-wrapper)。

## 使用 Amazon Web Services（AWS）Python 驱动程序连接到多可用区数据库集群
<a name="maz-cluster-connect-py"></a>

Amazon Web Services（AWS）驱动程序设计为高级 Python 包装器。这款包装器是对开源 Psycopg 驱动程序的各项功能的补充和扩展。AWS Python 驱动程序支持 Python 3.8 及更高版本。您可以使用 `pip` 命令和 `psycopg` 开源软件包安装 `aws-advanced-python-wrapper` 程序包。

有关 AWS JDBC 驱动程序的更多信息及其完整使用说明，请参阅 [Amazon Web Services（AWS）Python 驱动程序 GitHub 存储库](https://github.com/awslabs/aws-advanced-python-wrapper)。

# 自动连接 Amazon RDS 的 AWS 计算资源和多可用区数据库集群
<a name="multi-az-compute-rds-connect"></a>

您可以自动连接多可用区数据库集群和 AWS 计算资源，例如 Amazon Elastic Compute Cloud（Amazon EC2）实例和 AWS Lambda 函数。

以下主题详细说明了如何配置网络设置、安全组和连接参数，以便在多可用区数据库集群部署中与 Amazon RDS 数据库实例建立可靠的连接。这些主题专注于优化与多可用区数据库集群交互的应用程序的网络连接和性能，从而确保安全、高效的数据操作。

**Topics**
+ [自动连接 EC2 实例和多可用区数据库集群](multiaz-ec2-rds-connect.md)
+ [自动连接 Lambda 函数和多可用区数据库集群](multiaz-lambda-rds-connect.md)

# 自动连接 EC2 实例和多可用区数据库集群
<a name="multiaz-ec2-rds-connect"></a>

您可以使用 RDS 控制台来简化在 Amazon Elastic Compute Cloud（Amazon EC2）实例和多可用区数据库集群之间设置连接的过程。通常，多可用区数据库集群位于私有子网中，而 EC2 实例位于 VPC 内的公有子网中。您可以在 EC2 实例上使用 SQL 客户端来连接到多可用区数据库集群。EC2 实例还可以运行用于访问私有多可用区数据库集群的 Web 服务器或应用程序。

![\[自动连接多可用区数据库集群以及 EC2 实例\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/multi-az-ec2-connect-overview.png)


如果您想连接到与多可用区数据库集群不在同一 VPC 中的 EC2 实例，请参阅[在 VPC 中访问数据库实例的场景](USER_VPC.Scenarios.md)中的相应方案。

**Topics**
+ [与 EC2 实例的自动连接概述](#multiaz-ec2-rds-connect-overview)
+ [自动连接 EC2 实例和多可用区数据库集群](#multiaz-ec2-rds-connect-connecting)
+ [查看连接的计算资源](#multiaz-ec2-rds-connect-viewing)

## 与 EC2 实例的自动连接概述
<a name="multiaz-ec2-rds-connect-overview"></a>

当您自动在 EC2 实例和多可用区数据库集群之间设置连接时，Amazon RDS 会为您的 EC2 实例和数据库集群配置 VPC 安全组。

以下是将 EC2 实例与多可用区数据库集群连接的要求：
+ EC2 实例必须与多可用区数据库集群存在于同一 VPC 中。

  如果同一 VPC 中不存在任何 EC2 实例，控制台将提供创建一个此类实例的链接。
+ 设置连接的用户必须具有执行以下 EC2 操作的权限：
  + `ec2:AuthorizeSecurityGroupEgress` 
  + `ec2:AuthorizeSecurityGroupIngress` 
  + `ec2:CreateSecurityGroup` 
  + `ec2:DescribeInstances` 
  + `ec2:DescribeNetworkInterfaces` 
  + `ec2:DescribeSecurityGroups` 
  + `ec2:ModifyNetworkInterfaceAttribute` 
  + `ec2:RevokeSecurityGroupEgress` 

当您设置与 EC2 实例的连接时，Amazon RDS 会根据与多可用区数据库集群和 EC2 实例关联的安全组的当前配置采取操作，如下表所述。


| 当前 RDS 安全组配置 | 当前 EC2 安全组配置 | RDS 操作 | 
| --- | --- | --- | 
|  有一个或多个安全组与多可用区数据库集群 [其名称与模式 `rds-ec2-n`（其中 `n` 是数字）相匹配] 关联。尚未修改与此模式匹配的安全组。该安全组只具有一条以 EC2 实例的 VPC 安全组作为源的入站规则。  |  有一个或多个安全组与 EC2 实例关联，此实例的名称与模式 `rds-ec2-n`（其中 `n` 是数字）相匹配。尚未修改与此模式匹配的安全组。该安全组只具有一条以多可用区数据库集群的 VPC 安全组作为源的出站规则。  |  Amazon RDS 不执行任何操作。 已在 EC2 实例和多可用区数据库集群之间自动配置了连接。由于 EC2 实例和 RDS 数据库之间已经存在连接，因此不会修改安全组。  | 
|  以下任一条件适用： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/multiaz-ec2-rds-connect.html)  |  以下任一条件适用： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/multiaz-ec2-rds-connect.html)  |  [RDS action: create new security groups](ec2-rds-connect.md#rds-action-create-new-security-groups)  | 
|  有一个或多个安全组与多可用区数据库集群（其名称与模式 `rds-ec2-n` 相匹配）关联。尚未修改与此模式匹配的安全组。该安全组只具有一条以 EC2 实例的 VPC 安全组作为源的入站规则。  |  有一个或多个安全组与 EC2 实例（名称与模式 `ec2-rds-n` 匹配）关联。但是，这些安全组都不能用于与多可用区数据库集群的连接。如果安全组没有一条以多可用区数据库集群的 VPC 安全组作为源的出站规则，则无法使用该安全组。如果已修改了安全组，也不能使用它。  |  [RDS action: create new security groups](ec2-rds-connect.md#rds-action-create-new-security-groups)  | 
|  有一个或多个安全组与多可用区数据库集群（其名称与模式 `rds-ec2-n` 相匹配）关联。尚未修改与此模式匹配的安全组。该安全组只具有一条以 EC2 实例的 VPC 安全组作为源的入站规则。  |  存在用于连接的有效 EC2 安全组，但它与 EC2 实例不关联。此安全组的名称与模式 `rds-ec2-n` 相匹配。尚未修改它。它只具有一条以多可用区数据库集群的 VPC 安全组作为源的出站规则。  |  [RDS action: associate EC2 security group](ec2-rds-connect.md#rds-action-associate-ec2-security-group)  | 
|  以下任一条件适用： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/multiaz-ec2-rds-connect.html)  |  有一个或多个安全组与 EC2 实例关联，此实例的名称与模式 `rds-ec2-n` 相匹配。尚未修改与此模式匹配的安全组。该安全组只具有一条以多可用区数据库集群的 VPC 安全组作为源的出站规则。  |  [RDS action: create new security groups](ec2-rds-connect.md#rds-action-create-new-security-groups)  | 

**RDS 操作：创建新的安全组**  
Amazon RDS 执行以下操作：
+ 创建与模式 `rds-ec2-n` 匹配的新安全组。该安全组具有一条以 EC2 实例的 VPC 安全组作为源的入站规则。该安全组与多可用区数据库集群关联，并允许 EC2 实例访问多可用区数据库集群。
+ 创建与模式 `ec2-rds-n` 匹配的新安全组。该安全组具有一条以多可用区数据库集群的 VPC 安全组作为源的出站规则。该安全组与 EC2 实例相关联，并允许 EC2 实例向多可用区数据库集群发送流量。

**RDS 操作：关联 EC2 安全组**  
Amazon RDS 将有效的现有 EC2 安全组与 EC2 实例关联。该安全组允许 EC2 实例向多可用区数据库集群发送流量。

## 自动连接 EC2 实例和多可用区数据库集群
<a name="multiaz-ec2-rds-connect-connecting"></a>

在 EC2 实例与 RDS 数据库之间设置连接之前，请确保满足[与 EC2 实例的自动连接概述](ec2-rds-connect.md#ec2-rds-connect-overview)中所述的要求。

如果您在配置连接后更改安全组，则这些更改可能会影响 EC2 实例与 RDS 数据库之间的连接。

**注意**  
您只能使用 AWS 管理控制台自动在 EC2 实例与 RDS 数据库之间设置连接。您无法使用 AWS CLI 或 RDS API 自动设置连接。

**自动连接 EC2 实例与 RDS 数据库**

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

1. 在导航窗格中，选择 **Databases**（数据库），然后选择 RDS 数据库。

1. 从**操作**中，选择**设置 EC2 连接**。

   将出现 **Set up EC2 connection**（设置 EC2 连接）页面。

1. 在 **Set up EC2 connection**（设置 EC2 连接）页上，选择 EC2 实例。  
![\[“设置 EC2 连接”页面。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/auto-connect-rds-ec2-set-up.png)

   如果同一 VPC 中不存在任何 EC2 实例，请选择 **Create EC2 instance**（创建 EC2 实例）来创建一个此类实例。在这种情况下，请确保新的 EC2 实例与 RDS 数据库位于同一 VPC 中。

1. 选择**继续**。

   将出现 **Review and confirm**（检查并确认）页面。  
![\[“EC2 连接检查和确认”页面。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/auto-connect-rds-ec2-confirm.png)

1. 在 **Review and confirm**（检查并确认）页面上，检查 RDS 为设置与 EC2 实例的连接而将进行的更改。

   如果更改正确，请选择**确认并设置**。

   如果更改不正确，请选择 **Previous**（上一步）或 **Cancel**（取消）。

## 查看连接的计算资源
<a name="multiaz-ec2-rds-connect-viewing"></a>

您可以使用 AWS 管理控制台查看连接到 RDS 数据库的计算资源。显示的资源包括自动设置的计算资源连接。您可以通过以下方式自动设置与计算资源的连接：
+ 您可以在创建数据库时选择计算资源。

  有关更多信息，请参阅[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)和[创建 Amazon RDS 的多可用区数据库集群](create-multi-az-db-cluster.md)。
+ 您可以在现有数据库和计算资源之间设置连接。

  有关更多信息，请参阅 [自动连接 EC2 实例和 RDS 数据库](ec2-rds-connect.md#ec2-rds-connect-connecting)。

列出的计算资源不包括手动连接到数据库的计算资源。例如，您可以通过向与数据库关联的 VPC 安全组添加规则来允许计算资源手动访问数据库。

要列出计算资源，必须满足以下条件：
+ 与计算资源关联的安全组的名称与模式 `ec2-rds-n` 相匹配（其中 `n` 是数字）。
+ 与计算资源关联的安全组具有出站规则，其端口范围设置为 RDS 数据库使用的端口。
+ 与计算资源关联的安全组具有出站规则，源设置为与 RDS 数据库关联的安全组。
+ 与 RDS 数据库关联的安全组的名称与模式 `rds-ec2-n`（其中 `n` 是数字）相匹配。
+ 与 RDS 数据库关联的安全组具有入站规则，其端口范围设置为 RDS 数据库使用的端口。
+ 与 RDS 数据库关联的安全组有一条入站规则，其源设置为与计算资源关联的安全组。

**查看连接到 RDS 数据库的计算资源**

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

1. 在导航窗格中，选择 **Databases**（数据库），然后选择 RDS 数据库的名称。

1. 在 **Connectivity & security**（连接和安全）选项卡上，在 **Connected compute resources**（连接的计算资源）中查看计算资源。  
![\[连接的计算资源。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/ec2-connected-compute-resources.png)

# 自动连接 Lambda 函数和多可用区数据库集群
<a name="multiaz-lambda-rds-connect"></a>

您可以使用 RDS 控制台来简化在 Lambda 函数和多可用区数据库集群之间设置连接的过程。您可以使用 RDS 控制台来简化在 Lambda 函数和多可用区数据库集群之间设置连接的过程。通常，多可用区数据库集群位于 VPC 内的私有子网中。应用程序可以使用 Lambda 函数访问您的私有多可用区数据库集群。

下图显示了您的多可用区数据库集群与 Lambda 函数之间的直接连接。

![\[自动将多可用区数据库集群与 Lambda 函数连接。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/auto-connect-maz-lambda.png)


您可以通过 RDS 代理在 Lambda 函数和数据库之间设置连接，以提高数据库性能和弹性。通常，Lambda 函数会进行频繁的短期数据库连接，此类连接受益于 RDS 代理提供的连接池。您可以利用已为 Lambda 函数提供的任何 IAM 身份验证，而不是在 Lambda 应用程序代码中管理数据库凭证。有关更多信息，请参阅 [Amazon RDS 代理](rds-proxy.md)。

您可以使用控制台为您的连接自动创建代理。您也可以选择现有代理。控制台更新代理安全组，以允许来自您的数据库和 Lambda 函数的连接。您可以输入数据库凭证或选择访问数据库所需的 Secrets Manager 密钥。

![\[通过 RDS 代理自动将多可用区数据库集群与 Lambda 函数连接。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/auto-connect-maz-lambda-Proxy.png)


**Topics**
+ [与 Lambda 函数的自动连接概述](#multiaz-lambda-rds-connect-overview)
+ [自动连接 Lambda 函数和多可用区数据库集群](#multiaz-lambda-rds-connect-connecting)
+ [查看连接的计算资源](#multiaz-lambda-rds-connect-viewing)

## 与 Lambda 函数的自动连接概述
<a name="multiaz-lambda-rds-connect-overview"></a>

当您自动在 Lambda 函数和多可用区数据库集群之间设置连接时，Amazon RDS 会为您的 Lambda 函数和数据库集群配置 VPC 安全组。

以下是将 Lambda 函数与多可用区数据库集群连接的要求：
+ Lambda 函数必须与多可用区数据库集群存在于同一 VPC 中。

  如果同一 VPC 中不存在任何 Lambda 函数，控制台将提供创建一个此类函数的链接。
+ 设置连接的用户必须具有执行以下 Amazon RDS、Amazon EC2、Lambda、Secrets Manager 和 IAM 操作的权限：
  + Amazon RDS
    + `rds:CreateDBProxies`
    + `rds:DescribeDBInstances`
    + `rds:DescribeDBProxies`
    + `rds:ModifyDBInstance`
    + `rds:ModifyDBProxy`
    + `rds:RegisterProxyTargets`
  + Amazon EC2
    + `ec2:AuthorizeSecurityGroupEgress` 
    + `ec2:AuthorizeSecurityGroupIngress` 
    + `ec2:CreateSecurityGroup` 
    + `ec2:DeleteSecurityGroup`
    + `ec2:DescribeSecurityGroups` 
    + `ec2:RevokeSecurityGroupEgress` 
    + `ec2:RevokeSecurityGroupIngress`
  + Lambda
    + `lambda:CreateFunctions`
    + `lambda:ListFunctions`
    + `lambda:UpdateFunctionConfiguration`
  + Secrets Manager
    + `sercetsmanager:CreateSecret`
    + `secretsmanager:DescribeSecret`
  + IAM
    + `iam:AttachPolicy`
    + `iam:CreateRole`
    + `iam:CreatePolicy`
  + AWS KMS
    + `kms:describeKey`

当您在 Lambda 函数和多可用区数据库集群之间设置连接时，Amazon RDS 会为您的函数和多可用区数据库集群配置 VPC 安全组。如果您使用 RDS 代理，则 Amazon RDS 还会为代理配置 VPC 安全组。Amazon RDS 根据与多可用区数据库集群、Lambda 函数和代理关联的安全组的当前配置执行操作，如下表所述。


| 当前 RDS 安全组配置 | 当前 Lambda 安全组配置 | 当前代理安全组配置 | RDS 操作 | 
| --- | --- | --- | --- | 
|  Amazon RDS 不采取任何措施，因为所有资源的安全组都遵循正确的命名模式并具有正确的入站和出站规则。  |  有一个或多个安全组与多可用区数据库集群 [其名称与模式 `rds-lambda-n`（其中 `n` 是数字）相匹配，或关联代理的 `TargetHealth` 是 `AVAILABLE`] 关联。 尚未修改与此模式匹配的安全组。该安全组只具有一条以 Lambda 函数或代理的 VPC 安全组作为源的入站规则。  |  有一个或多个安全组与 Lambda 函数关联，此函数的名称与模式 `lambda-rds-n` 或 `lambda-rdsproxy-n`（其中 `n` 是数字）相匹配。 尚未修改与此模式匹配的安全组。此安全组只有一条出站规则，此规则以多可用区数据库集群或代理的 VPC 安全组作为目标。  |  有一个或多个安全组与代理关联，此代理的名称与模式 `rdsproxy-lambda-n`（其中 `n` 是数字）相匹配。 尚未修改与此模式匹配的安全组。此安全组具有入站和出站规则，这些规则具有 Lambda 函数和多可用区数据库集群的 VPC 安全组。  | 
|  以下任一条件适用： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/multiaz-lambda-rds-connect.html) 如果安全组没有一条以 Lambda 函数或代理的 VPC 安全组作为源的入站规则，则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。修改示例包括添加规则或更改现有规则的端口。  |  以下任一条件适用： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/multiaz-lambda-rds-connect.html) 如果安全组没有一条以多可用区数据库集群或代理的 VPC 安全组作为源的出站规则，则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。  | 以下任一条件适用：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/multiaz-lambda-rds-connect.html)如果安全组没有入站和出站规则（这些规则具有多可用区数据库集群和 Lambda 函数的 VPC 安全组），则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。 | [RDS action: create new security groups](#maz-lam-action-create-new-security-groups)  | 
|  有一个或多个与多可用区数据库集群（名称与模式 `rds-lambda-n` 匹配或关联代理的 `TargetHealth` 为 `AVAILABLE`）相关联的安全组。 尚未修改与此模式匹配的安全组。该安全组只具有一条以 Lambda 函数或代理的 VPC 安全组作为源的入站规则。  |  有一个或多个安全组与 Lambda 函数关联，此函数的名称与模式 `lambda-rds-n` 或 `lambda-rdsproxy-n` 相匹配。 但是，Amazon RDS 不能使用这些安全组中的任何一个来连接多可用区数据库集群。如果安全组没有一条以多可用区数据库集群或代理的 VPC 安全组作为目标的出站规则，则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。  |  有一个或多个安全组与代理关联，此代理的名称与模式 `rdsproxy-lambda-n` 相匹配。 但是，Amazon RDS 不能使用这些安全组中的任何一个来连接多可用区数据库集群或 Lambda 函数。如果安全组没有入站和出站规则（这些规则具有多可用区数据库集群和 Lambda 函数的 VPC 安全组），则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。  | [RDS action: create new security groups](#maz-lam-action-create-new-security-groups)  | 
|  有一个或多个与多可用区数据库集群（名称与模式 `rds-lambda-n` 匹配或关联代理的 `TargetHealth` 为 `AVAILABLE`）相关联的安全组。 尚未修改与此模式匹配的安全组。该安全组只具有一条以 Lambda 函数或代理的 VPC 安全组作为源的入站规则。  |  存在用于连接的有效 Lambda 安全组，但它与 Lambda 函数不关联。此安全组的名称与模式 `lambda-rds-n` 或 `lambda-rdsproxy-n` 相匹配。尚未修改它。它只有一条出站规则，此规则以多可用区数据库集群或代理的 VPC 安全组作为目标。  |  存在用于连接的有效代理安全组，但它与代理不关联。此安全组的名称与模式 `rdsproxy-lambda-n` 相匹配。尚未修改它。它具有入站和出站规则，这些规则具有多可用区数据库集群和 Lambda 函数的 VPC 安全组。  |  [RDS action: associate Lambda security group](#maz-lam-action-associate-lam-security-group)  | 
|  以下任一条件适用： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/multiaz-lambda-rds-connect.html)  |  有一个或多个安全组与 Lambda 函数关联，此函数的名称与模式 `lambda-rds-n` 或 `lambda-rdsproxy-n` 相匹配。 尚未修改与此模式匹配的安全组。此安全组只有一条出站规则，此规则以多可用区数据库集群或代理的 VPC 安全组作为目标。  |  有一个或多个安全组与代理关联，此代理的名称与模式 `rdsproxy-lambda-n` 相匹配。 尚未修改与此模式匹配的安全组。此安全组具有入站和出站规则，这些规则具有多可用区数据库集群和 Lambda 函数的 VPC 安全组。  |  [RDS action: create new security groups](#maz-lam-action-create-new-security-groups)  | 
|  有一个或多个安全组与多可用区数据库集群 [其名称与模式 `rds-rdsproxy-n`（其中 `n` 是数字）相匹配] 关联。  |  以下任一条件适用： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/multiaz-lambda-rds-connect.html) 如果安全组没有一条以多可用区数据库集群或代理的 VPC 安全组作为目标的出站规则，则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。  | 以下任一条件适用：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/multiaz-lambda-rds-connect.html)如果安全组没有入站和出站规则（这些规则具有多可用区数据库集群和 Lambda 函数的 VPC 安全组），则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。 |  [RDS action: create new security groups](#maz-lam-action-create-new-security-groups)  | 

**RDS 操作：创建新的安全组**  
Amazon RDS 执行以下操作：
+ 创建与模式 `rds-lambda-n` 匹配的新安全组。该安全组具有一条以 Lambda 函数或代理的 VPC 安全组作为源的入站规则。该安全组与多可用区数据库集群关联，并允许函数或代理访问多可用区数据库集群。
+ 创建与模式 `lambda-rds-n` 匹配的新安全组。此安全组具有一条出站规则，此规则以多可用区数据库集群或代理的 VPC 安全组作为目标。此安全组与 Lambda 函数相关联，并允许 Lambda 函数将流量发送到多可用区数据库集群或者通过代理发送流量。
+ 创建与模式 `rdsproxy-lambda-n` 匹配的新安全组。此安全组具有入站和出站规则，这些规则具有多可用区数据库集群和 Lambda 函数的 VPC 安全组。

**RDS 操作：关联 Lambda 安全组**  
Amazon RDS 将有效的现有的 Lambda 安全组与 Lambda 函数关联。此安全组允许该函数向多可用区数据库集群发送流量或通过代理发送流量。

## 自动连接 Lambda 函数和多可用区数据库集群
<a name="multiaz-lambda-rds-connect-connecting"></a>

您可以使用 Amazon RDS 控制台将 Lambda 函数自动连接到您的多可用区数据库集群。这简化了在这些资源之间设置连接的过程。

您也可以使用 RDS 代理在连接中包含代理。Lambda 函数会进行频繁的短期数据库连接，此类连接受益于 RDS 代理提供的连接池。您还可以使用已经为 Lambda 函数设置的任何 IAM 身份验证，而不是在 Lambda 应用程序代码中管理数据库凭证。

您可以使用**设置 Lambda 连接**页面将现有的多可用区数据库集群连接到新的和现有 Lambda 函数。设置过程会自动为您设置所需的安全组。

在 Lambda 函数和多可用区数据库集群之间设置连接之前，请确保：
+ 您的 Lambda 函数和多可用区数据库集群位于同一 VPC 中。
+ 您拥有用户账户的相应权限。有关要求的更多信息，请参阅[与 Lambda 函数的自动连接概述](lambda-rds-connect.md#lambda-rds-connect-overview)。

如果您在配置连接后更改安全组，则这些更改可能会影响 Lambda 函数与多可用区数据库集群之间的连接。

**注意**  
您只能在 AWS 管理控制台中自动设置多可用区数据库集群和 Lambda 函数之间的连接。要连接 Lambda 函数，多可用区数据库集群中的所有实例都必须处于**可用**状态。

**自动连接 Lambda 函数和多可用区数据库集群**

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

1. 在导航窗格中，选择**数据库**，然后选择要连接到 Lambda 函数的多可用区数据库集群。

1. 对于**操作**，选择**设置 Lambda 连接**。

1. 在**设置 Lambda 连接**页面上，在**选择 Lambda 函数**下方，执行以下任一操作：
   + 如果您在与多可用区数据库集群相同的 VPC 中有一个现有的 Lambda 函数，请选择**选择现有函数**，然后选择该函数。
   + 如果您在同一 VPC 中没有 Lambda 函数，请选择**创建新函数**，然后输入**函数名称**。默认运行时系统设置为 Nodejs.18。完成连接设置后，您可以在 Lambda 控制台中修改新 Lambda 函数的设置。

1. （可选）在 **RDS 代理**下，选择**使用 RDS 代理进行连接**，然后执行以下任一操作：
   + 如果您有要使用的现有代理，请选择**选择现有代理**，然后选择此代理。
   + 如果您没有代理，并且希望 Amazon RDS 自动为您创建代理，请选择**创建新代理**。然后，对于**数据库凭证**，执行以下任一操作：

     1. 选择**数据库用户名和密码**，然后输入多可用区数据库集群的**用户名**和**密码**。

     1. 选择 **Secrets Manager 密钥**。然后，对于**选择密钥**，选择一个 AWS Secrets Manager 密钥。如果您没有 Secrets Manager 密钥，请选择**创建新的 Secrets Manager 密钥**以[创建新密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)。创建密钥后，对于**选择密钥**，选择新密钥。

     创建新代理后，选择**选择现有代理**，然后选择该代理。请注意，您的代理可能需要一些时间才能用于连接。

1. （可选）扩展**连接摘要**并验证您的资源的突出显示更新。

1. 选择**设置**。

确认设置后，Amazon RDS 开始连接您的 Lambda 函数、RDS 代理（如果您使用了代理）和多可用区数据库集群的过程。控制台显示**连接详细信息**对话框，其中列出了允许在您的资源之间进行连接的安全组更改。

## 查看连接的计算资源
<a name="multiaz-lambda-rds-connect-viewing"></a>

您可以使用 AWS 管理控制台查看连接到多可用区数据库集群的计算资源。显示的资源包括 Amazon RDS 自动设置的计算资源连接。

列出的计算资源不包括那些手动连接到多可用区数据库集群的计算资源。例如，您可以通过向与多可用区数据库集群关联的 VPC 安全组添加规则，来允许计算资源手动访问该集群。

要使控制台列出 Lambda 函数，必须满足以下条件：
+ 与计算资源关联的安全组的名称与模式 `lambda-rds-n` 或 `lambda-rdsproxy-n`（其中 `n` 是数字）相匹配。
+ 与计算资源关联的安全组具有出站规则，其端口范围设置为多可用区数据库集群或关联代理的端口。出站规则的目标必须设置为与多可用区数据库集群或关联代理关联的安全组。
+ 连接到与您数据库关联的代理的安全组名称与模式 `rds-rdsproxy-n`（其中 `n` 是一个数字）相匹配。
+ 与该函数关联的安全组有一条出站规则，其端口设置为多可用区数据库集群或关联代理使用的端口。目标必须设置为与多可用区数据库集群或关联代理关联的安全组。

**查看自动连接到多可用区数据库集群的计算资源**

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

1. 在导航窗格中，选择**数据库**，然后选择多可用区数据库集群。

1. 在**连接和安全**选项卡上，在**连接的计算资源**下查看计算资源。

# 修改 Amazon RDS 的多可用区数据库集群
<a name="modify-multi-az-db-cluster"></a>

多可用区数据库集群在三个独立可用区中有一个写入器数据库实例和两个读取器数据库实例。与多可用区部署相比，多可用区数据库集群可提供高可用性、增加读取工作负载容量以及更低的延迟。有关多可用区数据库集群的更多信息，请参阅 [Amazon RDS 的多可用区数据库集群部署](multi-az-db-clusters-concepts.md)。

您可以修改多可用区数据库集群以更改其设置。您还可以对多可用区数据库集群执行操作，例如获取其快照。

**重要**  
您无法修改多可用区数据库集群中的数据库实例。所有修改都必须在数据库集群级别完成。您可以对多可用区数据库集群中的数据库实例执行的唯一操作是重启它。

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 修改多可用区数据库集群。

## 控制台
<a name="modify-multi-az-db-cluster-console"></a>

**要修改多可用区数据库集群**

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

1. 在导航窗格中，选择 **Databases**（数据库），然后选择要修改的多可用区数据库集群。

1. 选择**修改**。此时会显示**修改数据库集群**页面。

1. 根据需要更改任意设置。有关每项设置的信息，请参阅 [修改多可用区数据库集群的设置](#modify-multi-az-db-cluster-settings)。

1. 当所有更改都达到您的要求时，选择**继续**并查看修改摘要。

1. （可选）选择**立即应用**以立即应用更改。选择此选项在某些情况下可能导致停机。有关更多信息，请参阅 [立即应用更改](#modify-multi-az-db-cluster-apply-immediately)。

1. 在确认页面上，检查您的更改。如果更改正确无误，请选择 **Modify DB cluster**（修改数据库集群）以保存更改。

   也可以选择 **Back (返回)** 编辑您的更改，或选择 **Cancel (取消)** 取消更改。

## AWS CLI
<a name="modify-multi-az-db-cluster-cli"></a>

要使用 AWS CLI 修改多可用区数据库集群，请调用 [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) 命令。指定数据库集群标识符以及要修改的选项值。有关各选项的信息，请参阅[修改多可用区数据库集群的设置](#modify-multi-az-db-cluster-settings)。

**Example**  
以下代码修改 `my-multi-az-dbcluster`，将备份保留期设置为 1 周 (7 天)。该代码使用 `--deletion-protection` 启用删除保护。要关闭删除保护，请使用 `--no-deletion-protection`。将在下一维护时段使用 `--no-apply-immediately` 应用这些更改。使用 `--apply-immediately` 可立即应用更改。有关更多信息，请参阅 [立即应用更改](#modify-multi-az-db-cluster-apply-immediately)。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-cluster \
    --db-cluster-identifier my-multi-az-dbcluster \
    --backup-retention-period 7 \
    --deletion-protection \
    --no-apply-immediately
```
对于：Windows  

```
aws rds modify-db-cluster ^
    --db-cluster-identifier my-multi-az-dbcluster ^
    --backup-retention-period 7 ^
    --deletion-protection ^
    --no-apply-immediately
```

## RDS API
<a name="modify-multi-az-db-cluster-api"></a>

要使用 Amazon RDS API 修改多可用区数据库集群，请调用 [ModifyDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html) 操作。指定数据库集群标识符，以及您要修改的设置参数。有关每个参数的信息，请参阅[修改多可用区数据库集群的设置](#modify-multi-az-db-cluster-settings)。

## 立即应用更改
<a name="modify-multi-az-db-cluster-apply-immediately"></a>

修改多可用区数据库集群后，您可立即应用更改。要立即应用更改，请选中 AWS 管理控制台中的**立即应用**选项。或者，您可以在调用 AWS CLI 时使用 `--apply-immediately` 选项，或在使用 Amazon RDS API 时将 `ApplyImmediately` 参数设置为 `true`。

如果您没有选择立即应用更改，更改将被放置在等待修改队列中。队列中的所有等待更改都将在下一维护时段应用。如果您选择立即应用更改，将应用您的新更改以及等待修改队列中的所有更改。

**重要**  
如果任何待处理修改需要数据库集群暂时不可用（*停机*），则选择立即应用选项可能会导致意外停机。  
当您选择立即应用更改时，任何待定修改也将立即应用，而不是在下一个维护时段内应用。  
如果您不想将待定更改应用到下一个维护时段，您可以修改数据库实例来恢复更改。您可以通过使用 AWS CLI 和指定 `--apply-immediately` 选项来执行此操作。

一些数据库设置的更改会立即应用，即使您选择延迟更改也是如此。要查看不同数据库的设置如何与“立即应用”设置进行交互，请参阅[修改多可用区数据库集群的设置](#modify-multi-az-db-cluster-settings)。

## 修改多可用区数据库集群的设置
<a name="modify-multi-az-db-cluster-settings"></a>

有关可用于修改多可用区数据库集群的设置的详细信息，请参见下表。有关 AWS CLI 选项的更多信息，请参阅 [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html)。有关 RDS API 参数的更多信息，请参阅 [ModifyDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html)。


| 控制台设置 | 设置说明 | CLI 选项和 RDS API 参数 | 发生更改时 | 停机说明 | 
| --- | --- | --- | --- | --- | 
|  **分配的存储空间**  |  为数据库集群中的每个数据库实例分配的存储量（以 GiB 为单位）。有关更多信息，请参阅 [Amazon RDS 数据库实例存储](CHAP_Storage.md)。    |  **CLI 选项：** `--allocated-storage` **RDS API 参数：**  `AllocatedStorage`  |  如果您选择立即应用更改，则更改立即生效。 如果您不选择立即应用更改，则更改会在下一个维护时段中生效。  |  在此更改期间，不会出现停机。  | 
| 自动次要版本升级 |  请选择 **Enable auto minor version upgrade**（启用自动次要版本升级），以使数据库集群能够在首选次要数据库引擎版本升级可用时自动接收这些升级。Amazon RDS 在维护时段内执行自动次要版本升级。  |  **CLI 选项：** `--auto-minor-version-upgrade` `--no-auto-minor-version-upgrade` **RDS API 参数：** `AutoMinorVersionUpgrade`  |  更改立即发生。此设置忽略立即应用设置。  |  在此更改期间发生停机。  | 
| 备份保留期  |  保留数据库集群的自动备份的天数。该值必须大于零。 有关更多信息，请参阅 [备份简介](USER_WorkingWithAutomatedBackups.md)。  |  **CLI 选项：** `--backup-retention-period` **RDS API 参数：** `BackupRetentionPeriod`  |  如果您选择立即应用更改，则更改立即生效。 如果您不选择立即应用更改，则更改会在下一个维护时段中生效。    | 在此更改期间，不会出现停机。 | 
| 备份时段： |  Amazon RDS 自动备份数据库集群的时间段。除非您知道需要何时进行数据库备份，否则，请使用 **No preference**（无首选项）的默认设置。 有关更多信息，请参阅“[备份简介](USER_WorkingWithAutomatedBackups.md)”。  |  **CLI 选项：** `--preferred-backup-window` **RDS API 参数：** `PreferredBackupWindow`  |  更改会尽快异步应用。  |  在此更改期间，不会停机。  | 
|  **证书颁发机构**  |  数据库集群使用的服务器证书的证书颁发机构（CA）。 有关更多信息，请参阅 [使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。  |  **CLI 选项：** `--ca-certificate-identifier` **RDS API 参数：** `CACertificateIdentifier`  |  如果您选择立即应用更改，则更改立即生效。 如果您不选择立即应用更改，则更改会在下一个维护时段中生效。  | 仅当数据库引擎不支持在不重新启动的情况下轮换时，才会发生停机。您可以使用 [describe-db-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) AWS CLI 命令来确定数据库引擎是否支持在不重新启动的情况下轮换。 | 
|  将标签复制到快照  |  在创建快照时，该选项将任何数据库集群标签复制到数据库快照中。 有关更多信息，请参阅 [为 Amazon RDS 资源添加标签](USER_Tagging.md)。  |  **CLI 选项：** `-copy-tags-to-snapshot` `-no-copy-tags-to-snapshot` **RDS API 参数：** `CopyTagsToSnapshot`  |  更改立即发生。此设置忽略“立即应用”设置。  |  在此更改期间，不会停机。  | 
|  数据库身份验证  |  对于多可用区数据库集群，仅支持 **Password authentication**（密码身份验证）。  |  无，因为密码身份验证是原定设置。  |  如果您选择立即应用更改，则更改立即生效。 如果您不选择立即应用更改，则更改会在下一个维护时段中生效。  |  在此更改期间，不会出现停机。  | 
|  **数据库集群标识符**  |  数据库集群标识符。此值以一个小写字符串存储。 更改数据库集群标识符后，数据库集群端点发生变化。数据库集群中的数据库实例的标识符和端点也会发生变化。新的数据库集群名称必须是唯一的。最大长度为 63 个字符。 数据库集群中的数据库实例的名称将更改为与数据库集群的新名称相对应。新的数据库实例名称不能与现有数据库实例的名称相同。例如，如果您将数据库集群名称更改为 `maz`，则数据库实例名称可能会更改为 `maz-instance-1`。在这种情况下，不能存在名为 `maz-instance-1` 的现有数据库实例。 有关更多信息，请参阅 [重命名 Amazon RDS 的多可用区数据库集群](multi-az-db-cluster-rename.md)。  |  **CLI 选项：** `--new-db-cluster-identifier` **RDS API 参数：** `NewDBClusterIdentifier`  |  如果您选择立即应用更改，则更改立即生效。 如果您不选择立即应用更改，则更改会在下一个维护时段中生效。  |  在此更改期间，不会出现停机。  | 
|  DB cluster instance class（数据库集群实例类  |  多可用区数据库集群中各数据库实例（例如 `db.r6gd.xlarge`）的计算和内存容量。 如有可能，请选择足够大的数据库实例类以便典型查询工作集能够保留在内存中。如果在内存中保留工作集，系统可以避免写入到磁盘，从而提高性能。 有关更多信息，请参阅 [多可用区数据库集群的实例类可用性](multi-az-db-clusters-concepts.md#multi-az-db-clusters-concepts.InstanceAvailability)。  |  **CLI 选项：** `--db-cluster-instance-class` **RDS API 参数：** `DBClusterInstanceClass`  |  如果您选择立即应用更改，则更改立即生效。 如果您不选择立即应用更改，则更改会在下一个维护时段中生效。  |  在此更改期间发生停机。  | 
|  **数据库集群参数组**  |  要与数据库集群关联的数据库集群参数组。 有关更多信息，请参阅 [多可用区数据库集群的参数组](multi-az-db-clusters-concepts.md#multi-az-db-clusters-concepts-parameter-groups)。  |  **CLI 选项：** `--db-cluster-parameter-group-name` **RDS API 参数：** `DBClusterParameterGroupName`  |  参数组更改会立即发生。  |  在此更改期间，不会停机。当您更改参数组时，对某些参数的更改将立即应用于多可用区数据库集群中的数据库实例，而无需重新启动。而对其他一些参数进行的更改，只有在重新启动数据库实例之后才会应用。  | 
|  数据库引擎版本  |  要使用的数据库引擎的版本。  |  **CLI 选项：** `--engine-version` **RDS API 参数：** `EngineVersion`  |  如果您选择立即应用更改，则更改立即生效。 如果您不选择立即应用更改，则更改会在下一个维护时段中生效。  |  在此更改期间发生停机。  | 
| 删除保护 |  **启用删除保护**以禁止删除数据库集群。 有关更多信息，请参阅 [删除数据库实例](USER_DeleteInstance.md)。  |  **CLI 选项：** `--deletion-protection` `--no-deletion-protection` **RDS API 参数：** `DeletionProtection`  |  更改立即发生。此设置忽略“立即应用”设置。  |  在此更改期间，不会停机。  | 
|  维护时段  |  30 分钟时段，在这段时间内，将会应用对数据库集群的待处理修改。如果该时段无关紧要，请选择 **No preference**（无首选项）。 有关更多信息，请参阅“[Amazon RDS 维护时段](USER_UpgradeDBInstance.Maintenance.md#Concepts.DBMaintenance)”。  |  **CLI 选项：** `--preferred-maintenance-window` **RDS API 参数：** `PreferredMaintenanceWindow`  |  更改立即发生。此设置忽略“立即应用”设置。  |  如果有一个或多个待处理的操作导致停机，并且维护时段经过更改，加入了当前时间，则立即应用这些待处理的操作并会出现停机。  | 
|  在 AWS Secrets Manager 中管理主凭证  |  选择**在 AWS Secrets Manager 中管理主凭证**，以在 Secrets Manager 的密钥中管理主用户密码。 （可选）选择用于保护密钥的 KMS 密钥。请从您的账户的 KMS 密钥中进行选择，或输入来自其他账户的密钥。 如果 RDS 已在管理数据库集群的主用户密码，则可以通过选择 **Rotate secret immediately**（立即轮换密钥）来轮换主用户密码。 有关更多信息，请参阅 [使用 Amazon RDS 和 AWS Secrets Manager 管理密码](rds-secrets-manager.md)。  |  **CLI 选项：** `--manage-master-user-password \| --no-manage-master-user-password` `--master-user-secret-kms-key-id` `--rotate-master-user-password \| --no-rotate-master-user-password` **RDS API 参数：** `ManageMasterUserPassword` `MasterUserSecretKmsKeyId` `RotateMasterUserPassword`  |  如果您开启或关闭自动主用户密码管理，则更改会立即发生。此更改忽略立即应用设置。 如果要轮换主用户密码，则必须指定立即应用更改。  |  在此更改期间，不会停机。  | 
|  新建主密码  |  您的主用户账户密码。  |  **CLI 选项：** `--master-user-password` **RDS API 参数：** `MasterUserPassword`  |  更改会尽快异步应用。此设置忽略“立即应用”设置。  |  在此更改期间，不会停机。  | 
|  预调配 IOPS  |  最初为数据库集群分配的预置 IOPS（每秒输入/输出操作数）量。  |  **CLI 选项：** `--iops` **RDS API 参数：** `Iops`  |  如果您选择立即应用更改，则更改立即生效。 如果您不选择立即应用更改，则更改会在下一个维护时段中生效。  |  在此更改期间，不会出现停机。  | 
|  公有访问权限  |  请选择 **Publicly accessible**（可公开访问）以为数据库集群提供公有 IP 地址，这表示可以在 Virtual Private Cloud (VPC) 外部访问该实例。要可供公开访问，数据库集群还必须在 VPC 的公有子网中。 请选择 **Not publicly accessible**（不可公开访问）以设置只能从 VPC 内部访问数据库集群。 有关更多信息，请参阅 [对互联网隐藏 VPC 中的数据库实例](USER_VPC.WorkingWithRDSInstanceinaVPC.md#USER_VPC.Hiding)。 要从其 VPC 外部连接到数据库集群，该数据库集群必须可公开访问。此外，必须使用数据库集群安全组的入站规则授予访问权限，并且必须满足其他要求。有关更多信息，请参阅 [无法连接到 Amazon RDS 数据库实例](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。 如果您的数据库集群不可公开访问，则您可以使用 AWS Site-to-Site VPN 连接或 Direct Connect 连接从专用网络访问该实例。有关更多信息，请参阅 [互联网络流量隐私](inter-network-traffic-privacy.md)。  | 修改数据库集群时不可用。 |  更改立即发生。此设置忽略“立即应用”设置。  |  在此更改期间，不会停机。  | 
| 存储类型 |  数据库集群的存储类型。 仅支持通用型 SSD（gp3）、预调配 IOPS（io1）和预调配 IOPS SSD（io2）存储。 有关更多信息，请参阅 [Amazon RDS 存储类型](CHAP_Storage.md#Concepts.Storage)。  |  **CLI 选项：** `--storage-type` **RDS API 参数：** `StorageType`  |  如果您选择立即应用更改，则更改立即生效。 如果您不选择立即应用更改，则更改会在下一个维护时段中生效。  |  在此更改期间，不会出现停机。  | 
|  VPC security group (VPC 安全组)。 |  要与数据库集群关联的安全组。 有关更多信息，请参阅 [VPC 安全组概述](Overview.RDSSecurityGroups.md#Overview.RDSSecurityGroups.VPCSec)。  |  **CLI 选项：** `--vpc-security-group-ids` **RDS API 参数：** `VpcSecurityGroupIds`  |  更改会尽快异步应用。此设置忽略“立即应用”设置。  |  在此更改期间，不会停机。  | 

## 修改多可用区数据库集群时不适用的设置
<a name="modify-multi-az-db-cluster-settings-not-applicable"></a>

AWS CLI 命令 [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) 和 RDS API 操作 [ModifyDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html) 中的以下设置不适用于多可用区数据库集群。

您也无法在控制台中为多可用区数据库集群修改这些设置。


| AWS CLI 设置 | RDS API 设置 | 
| --- | --- | 
|  `--backtrack-window`  |  `BacktrackWindow`  | 
|  `--cloudwatch-logs-export-configuration`  |  `CloudwatchLogsExportConfiguration`  | 
|  `--copy-tags-to-snapshot \| --no-copy-tags-to-snapshot`  |  `CopyTagsToSnapshot`  | 
|  `--db-instance-parameter-group-name`  |  `DBInstanceParameterGroupName`  | 
|  `--domain`  |  `Domain`  | 
|  `--domain-iam-role-name`  |  `DomainIAMRoleName`  | 
|  `--enable-global-write-forwarding \| --no-enable-global-write-forwarding`  |  `EnableGlobalWriteForwarding`  | 
|  `--enable-http-endpoint \| --no-enable-http-endpoint`  |  `EnableHttpEndpoint`  | 
|  `--option-group-name`  |  `OptionGroupName`  | 
|  `--port`  |  `Port`  | 
|  `--scaling-configuration`  |  `ScalingConfiguration`  | 
|  `--storage-type`  |  `StorageType`  | 

# 升级 Amazon RDS 的多可用区数据库集群的引擎版本
<a name="multi-az-db-clusters-upgrading"></a>

Amazon RDS 提供每个支持的数据库引擎的更高版本，因此，您可以使多可用区数据库集群保持最新。本主题说明将多可用区数据库集群升级到更高版本的过程。

升级多可用区数据库集群需要选择新的兼容引擎版本并规划潜在的停机时间。该过程通过利用多可用区架构的失效转移功能，确保将中断降至最低。最佳实践包括在低流量期间执行升级、在非生产环境中进行测试以及验证应用程序与新版本的兼容性。

**Topics**
+ [次要版本升级](#multi-az-db-clusters-upgrade-minor)
+ [主要版本升级。](#multi-az-db-clusters-upgrade-major)
+ [升级多可用区数据库集群](#multi-az-db-clusters-upgrade-process)
+ [升级多可用区数据库集群只读副本](#multi-az-db-clusters-upgrade-replicas)
+ [使用事件监控多可用区数据库集群升级](#multi-az-db-clusters-upgrade-monitoring)

## 次要版本升级
<a name="multi-az-db-clusters-upgrade-minor"></a>

次要版本升级 仅包含与现有应用程序向后兼容的更改。当您启动次要版本升级时，Amazon RDS 首先一次升级一个读取器数据库实例。然后，其中一个读取器数据库实例将切换为新的写入器数据库实例。然后，Amazon RDS 升级旧的写入器实例（现在是读取器实例）。

升级期间的停机时间限于其中一个读取器数据库实例变为新写入器数据库实例所花费的时间。这一停机时间就像自动失效转移一样。有关更多信息，请参阅 [对 Amazon RDS 的多可用区数据库集群执行失效转移](multi-az-db-clusters-concepts-failover.md)。请注意，多可用区数据库集群的副本滞后可能会影响停机时间。有关更多信息，请参阅 [副本滞后和多可用区数据库集群](multi-az-db-clusters-concepts.md#multi-az-db-clusters-concepts-replica-lag)。

对于 RDS for PostgreSQL 多可用区数据库集群只读副本，Amazon RDS 一次升级一个集群成员实例。升级期间，读取器和写入器集群角色不会切换。因此，在 Amazon RDS 升级集群写入器实例时，数据库集群可能会出现停机。

**注意**  
多可用区数据库集群次要版本升级的停机时间通常为 35 秒。与 RDS 代理一起使用时，您可以将停机时间进一步缩短到一秒或更短。有关更多信息，请参阅 [Amazon RDS 代理](rds-proxy.md)。或者，您可以使用开源数据库代理，例如 [ProxySQL](https://aws.amazon.com/blogs/database/achieve-one-second-or-less-of-downtime-with-proxysql-when-upgrading-amazon-rds-multi-az-deployments-with-two-readable-standbys/)、[PgBouncer](https://aws.amazon.com/blogs/database/fast-switchovers-with-pgbouncer-on-amazon-rds-multi-az-deployments-with-two-readable-standbys-for-postgresql/) 或 [AWS Advanced JDBC Wrapper Driver](https://aws.amazon.com/blogs/database/achieve-one-second-or-less-downtime-with-the-advanced-jdbc-wrapper-driver-when-upgrading-amazon-rds-multi-az-db-clusters/)。

## 主要版本升级。
<a name="multi-az-db-clusters-upgrade-major"></a>

主版本升级可能引入与现有应用程序不兼容的更改。

当您启动 RDS for PostgreSQL 多可用区数据库集群的主要版本升级时，Amazon RDS 会同时升级读取器和写入器实例。因此，在升级完成之前，数据库集群可能不可用。

当您启动 RDS for MySQL 多可用区数据库集群的主要版本升级时，Amazon RDS 将一次升级一个集群成员实例，因此，将从较低的引擎版本复制到更高的引擎版本。在主要版本升级期间，必须确保您的工作负载与源引擎和目标引擎版本兼容，因为引擎版本在语法和功能上可能有所不同。

**注意**  
与次要版本升级一样，RDS for MySQL 主要版本升级期间的停机时间通常为 35 秒。与 RDS 代理一起使用时，您可以将停机时间进一步缩短到一秒或更短。有关更多信息，请参阅 [Amazon RDS 代理](rds-proxy.md)。

## 升级多可用区数据库集群
<a name="multi-az-db-clusters-upgrade-process"></a>

升级多可用区数据库集群的引擎版本的过程与升级数据库实例引擎版本的过程相同。有关说明，请参阅[升级数据库实例 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。唯一的区别是，当使用 AWS Command Line Interface（AWS CLI）时，您使用 [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) 命令并指定 `--db-cluster-identifier` 参数（以及 `--allow-major-version-upgrade` 参数）。

有关主要版本升级和次要版本升级的更多信息，请参阅数据库引擎的以下文档：
+ [升级 RDS for PostgreSQL 数据库引擎](USER_UpgradeDBInstance.PostgreSQL.md)
+ [升级 RDS for MySQL 数据库引擎](USER_UpgradeDBInstance.MySQL.md)

## 升级多可用区数据库集群只读副本
<a name="multi-az-db-clusters-upgrade-replicas"></a>

Amazon RDS 不会自动升级多可用区数据库集群只读副本。对于*次要*版本升级，必须先手动升级所有只读副本，然后升级集群。否则，升级将被阻止。当您执行集群的*主要*版本升级时，所有只读副本的复制状态将更改为**终止**。升级完成后，您必须删除并重新创建只读副本。有关更多信息，请参阅 [监控只读复制](USER_ReadRepl.Monitoring.md)。

## 使用事件监控多可用区数据库集群升级
<a name="multi-az-db-clusters-upgrade-monitoring"></a>

当您升级多可用区数据库集群的引擎版本时，Amazon RDS 在流程的每个阶段都会发出一个特定的事件。要跟踪升级进度，您可以查看或订阅这些事件。

 有关 RDS 事件的更多信息，请参阅[监控 Amazon RDS 事件](working-with-events.md)。

有关引擎升级期间发生的特定 Amazon RDS 事件的详细信息，请参阅[Amazon RDS 事件类别和事件消息](USER_Events.Messages.md)。

# 重命名 Amazon RDS 的多可用区数据库集群
<a name="multi-az-db-cluster-rename"></a>

您可以使用 AWS 管理控制台、AWS CLI `modify-db-cluster` 命令或 Amazon RDS API `ModifyDBCluster` 操作重命名多可用区数据库集群。重命名多可用区数据库集群可能产生显著影响。以下是您在重命名多可用区数据库集群之前需了解的注意事项列表。
+ 当您重命名多可用区数据库集群时，多可用区数据库集群的集群端点会发生变化。这些端点之所以更改，是因为它们包括您分配给多可用区数据库集群的名称。您可以将流量从旧端点重定向到新端点。有关多可用区数据库集群端点的更多信息，请参阅 [连接到 Amazon RDS 的多可用区数据库集群](multi-az-db-clusters-concepts-connection-management.md)。
+ 当您重命名多可用区数据库集群时，多可用区数据库集群使用的旧 DNS 名称会被删除，尽管它可能会在缓存中保留几分钟。重命名的多可用区数据库集群的新 DNS 名称在大约两分钟内生效。重命名的多可用区数据库集群在新名称生效之前不可用。
+ 重命名集群时，您不能使用现有的多可用区数据库集群名称。
+ 如果您重用数据库实例的名称，则与多可用区数据库集群的名称关联的指标和事件保持不变。
+ 无论重命名如何，多可用区数据库集群标签都会保留在多可用区数据库集群中。
+ 对于重命名的多可用区数据库集群，数据库集群快照也会保留下来。

**注意**  
多可用区数据库集群是在云中运行的独立数据库环境。多可用区数据库集群可承载多个数据库。有关更改数据库名称的信息，请参阅数据库引擎文档。

## 重命名以替换现有的多可用区数据库集群
<a name="multi-az-db-cluster-rename-to-replace"></a>

重命名多可用区数据库集群的最常见场景包括从数据库集群快照还原数据或执行时间点故障恢复（PITR）。通过重命名多可用区数据库集群，您可以在不更改任何引用多可用区数据库集群的应用程序代码的情况下替换多可用区数据库集群。在这些情况下，完成以下步骤：

1. 停止流向多可用区数据库集群的所有流量。您可以重定向流量，使其无法访问多可用区数据库集群上的数据库，或者选择其他方式阻止流量访问多可用区数据库集群中的数据库。

1. 重命名现有的多可用区数据库集群。

1. 通过从数据库集群快照进行还原或恢复到某个时间点，创建新的多可用区数据库集群。然后，为新的多可用区数据库集群提供先前多可用区数据库集群的名称。

如果您删除旧的多可用区数据库集群，则您负责删除旧的多可用区数据库集群的任何不需要的数据库集群快照。

## 控制台
<a name="multi-az-db-cluster-rename.CON"></a>

**重命名多可用区数据库集群**

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

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

1. 选择要重命名的多可用区数据库集群。

1. 选择**修改**。

1. 在 **Settings**（设置）中，为 **DB cluster identifier**（数据库集群标识符）输入新名称。

1. 选择 **Continue (继续)**。

1. 要立即应用更改，请选择**立即应用**。选择此选项在某些情况下可能导致中断。有关更多信息，请参阅 [立即应用更改](modify-multi-az-db-cluster.md#modify-multi-az-db-cluster-apply-immediately)。

1. 在确认页面上，检查您的更改。如果更改正确无误，请选择**修改集群**以保存更改。

   或者，选择 **Back**（返回）以编辑您的更改，或者选择 **Cancel**（取消）以放弃更改。

## AWS CLI
<a name="multi-az-db-cluster-rename.CLI"></a>

要重命名多可用区数据库集群，请使用 AWS CLI 命令 [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html)。提供当前 `--db-cluster-identifier` 值并为 `--new-db-cluster-identifier` 参数提供多可用区数据库集群的新名称。

**Example**  
对于 Linux、macOS 或 Unix：  

```
1. aws rds modify-db-cluster \
2.     --db-cluster-identifier DBClusterIdentifier \
3.     --new-db-cluster-identifier NewDBClusterIdentifier
```
对于 Windows：  

```
1. aws rds modify-db-cluster ^
2.     --db-cluster-identifier DBClusterIdentifier ^
3.     --new-db-cluster-identifier NewDBClusterIdentifier
```

## RDS API
<a name="multi-az-db-cluster-rename.API"></a>

要重命名多可用区数据库集群，请使用以下参数调用 Amazon RDS API 操作 [ModifyDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html)：
+ `DBClusterIdentifier` – 数据库集群的现有名称。
+ `NewDBClusterIdentifier` – 数据库集群的新名称。

# 重启 Amazon RDS 的多可用区数据库集群和读取器数据库实例
<a name="multi-az-db-clusters-concepts-rebooting"></a>

您可能需要重启多可用区数据库集群，通常是出于维护目的。例如，如果要进行某些修改或更改与数据库集群关联的数据库集群参数组，则重启该数据库集群。进行此操作以使更改生效。

如果数据库集群未使用对其关联的数据库集群参数组所做的最新更改，则 AWS 管理控制台 将显示状态为 **pending-reboot** 的数据库集群参数组。**pending-reboot** 参数组状态不会在下一个维护时段期间导致自动重启。要向该数据库集群应用最新的参数更改，请手动重启数据库集群。有关参数组的更多信息，请参阅 [多可用区数据库集群的参数组](multi-az-db-clusters-concepts.md#multi-az-db-clusters-concepts-parameter-groups)。

重启数据库集群会重新启动数据库引擎服务。重启数据库集群将导致短暂中断，在此期间，数据库集群状态将被设为 **rebooting**（正在重启）。

如果数据库集群未处于 **Available**（可用）状态，则无法重启。您的数据库可能会由于几个原因而不可用，例如，正在进行备份、以前请求的修改或维护时段操作。

重启数据库集群所需的时间取决于崩溃恢复过程、重启时的数据库活动以及特定数据库集群的行为。为优化重新启动的时间，建议在重启过程中尽可能减少数据库活动。减少数据库活动可减少中转事务的回滚活动。

**重要**  
多可用区数据库集群不支持通过故障转移重启。当您重启多可用区数据库集群的写入器实例时，它不会影响该数据库集群中的读取器数据库实例，也不会发生故障转移。在重启读取器数据库实例时，不会发生故障转移。要对多可用区数据库集群进行故障转移，请在控制台中选择 **Failover**（故障转移），调用 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/rds/failover-db-cluster.html](https://docs.aws.amazon.com/cli/latest/reference/rds/failover-db-cluster.html)，或调用 API 操作 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_FailoverDBCluster.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_FailoverDBCluster.html)。

## 控制台
<a name="USER_RebootMultiAZDBCluster.Console"></a>

**要重启数据库集群**

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

1. 在导航窗格中，请选择 **Databases**（数据库），然后选择要重启的多可用区数据库集群。

1. 对于**操作**，选择**重启**。

   此时将显示 **Reboot DB cluster**（重启数据库集群）页面。

1. 请选择 **Reboot**（重启）以重启您的数据库集群。

   或者选择 **Cancel（取消）**。

## AWS CLI
<a name="USER_RebootMultiAZDBCluster.CLI"></a>

要使用 AWS CLI 重启多可用区数据库集群，请调用 [reboot-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/reboot-db-cluster.html) 命令。

```
aws rds reboot-db-cluster --db-cluster-identifier mymultiazdbcluster
```

## RDS API
<a name="USER_RebootMultiAZDBCluster.API"></a>

要使用 Amazon RDS API 重启多可用区数据库集群，请调用 [RebootDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RebootDBCluster.html) 操作。

# 对 Amazon RDS 的多可用区数据库集群执行失效转移
<a name="multi-az-db-clusters-concepts-failover"></a>

如果多可用区数据库集群中的写入器数据库实例发生计划内或计划外的中断，Amazon RDS 会自动故障转移到另一个可用区中的读取器数据库实例。这可最大限度地减少中断，从而确保高可用性。失效转移可能发生在硬件故障、网络问题或手动请求期间。该主题概述了故障自动检测、失效转移期间的事件序列及其对读取和写入操作的影响。它还提供了监控失效转移和尽可能减少失效转移时间的最佳实践。

完成故障转移所用的时间取决于在写入器数据库实例变为不可用时的数据库活动和其他条件。故障转移时间通常低于 35 秒。当两个读取器数据库实例都应用了来自失败写入器的未完成事务后，故障转移即完成。完成故障转移后，RDS 控制台还需要一段时间才能反映新的可用区。

**Topics**
+ [自动故障转移](#multi-az-db-clusters-concepts-failover-automatic)
+ [手动对多可用区数据库集群执行故障转移](#multi-az-db-clusters-concepts-failover-manual)
+ [确定多可用区数据库集群是否已完成故障转移](#multi-az-db-clusters-concepts-failover-determining)
+ [设置 DNS 名称查找的 JVM TTL](#multi-az-db-clusters-concepts-failover-java-dns)

## 自动故障转移
<a name="multi-az-db-clusters-concepts-failover-automatic"></a>

Amazon RDS 会自动处理故障转移，因此，您可以尽快恢复数据库操作而无需管理干预。要进行故障转移，写入器数据库实例将自动切换到读取器数据库实例。

## 手动对多可用区数据库集群执行故障转移
<a name="multi-az-db-clusters-concepts-failover-manual"></a>

如果您手动对多可用区数据库集群执行失效转移，RDS 将首先终止主数据库实例。然后，内部监控系统检测到主数据库实例运行状况不佳，并提升可读副本数据库实例。故障转移时间通常低于 35 秒。

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 手动对多可用区数据库集群执行故障转移。

### 控制台
<a name="multi-az-db-clusters-concepts-failover-manual-con"></a>

**要手动对多可用区数据库集群执行故障转移**

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

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

1. 选择要进行故障转移的多可用区数据库集群。

1. 对于 **Actions**（操作），请选择 **Failover**（故障转移）。

   此时将会显示**失效转移数据库集群**页面。

1. 请选择 **Failover**（故障转移）以确认手动进行故障转移。

### AWS CLI
<a name="multi-az-db-clusters-concepts-failover-manual-cli"></a>

要手动对多可用区数据库集群执行故障转移，请使用 AWS CLI 命令 [failover-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/failover-db-cluster.html)。

**Example**  

```
1. aws rds failover-db-cluster --db-cluster-identifier mymultiazdbcluster
```

### RDS API
<a name="multi-az-db-clusters-concepts-failover-manual-api"></a>

要手动对多可用区数据库集群执行故障转移，请调用 Amazon RDS API [FailoverDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_FailoverDBCluster.html) 然后指定 `DBClusterIdentifier`。

## 确定多可用区数据库集群是否已完成故障转移
<a name="multi-az-db-clusters-concepts-failover-determining"></a>

要确定多可用区数据库集群是否发生故障转移，您可以执行以下操作：
+ 将数据库事件订阅设置为在故障转移启动时向您发送电子邮件或 SMS 通知。有关事件的更多信息，请参阅 [使用 Amazon RDS 事件通知](USER_Events.md)。
+ 使用 Amazon RDS 控制台或 API 操作查看数据库事件。
+ 使用 Amazon RDS 控制台、AWS CLI 以及 RDS API 查看多可用区数据库集群的当前状态。

有关如何响应故障转移、缩短恢复时间以及 Amazon RDS 的其他最佳实践的信息，请参阅 [Amazon RDS 的最佳实践](CHAP_BestPractices.md)。

## 设置 DNS 名称查找的 JVM TTL
<a name="multi-az-db-clusters-concepts-failover-java-dns"></a>

故障转移机制自动更改数据库实例的域名系统 (DNS) 记录，使其指向读取器数据库实例。因此，您需要重新建立与数据库实例之间的所有现有连接。在 Java 虚拟机 (JVM) 环境中，由于 Java DNS 缓存机制的工作原理，您可能需要重新配置 JVM 设置。

JVM 缓存 DNS 名称查找。当 JVM 将主机名解析为 IP 地址时，它会在指定时间段内 (称为*存活时间* (TTL)) 缓存 IP 地址。

由于 AWS 资源使用偶尔变更的 DNS 名称条目，因此建议您为 JVM 配置的 TTL 值不超过 60 秒。这样做可确保在资源的 IP 地址发生更改时，您的应用程序可以通过重新查询 DNS 来接收和使用资源的新 IP 地址。

对于一些 Java 配置，将设置 JVM 默认 TTL，以便在重新启动 JVM 之前绝不刷新 DNS 条目。因此，如果 AWS 资源的 IP 地址在应用程序仍在运行时发生更改，则在您手动重新启动 JVM 并刷新缓存的 IP 信息之前，将无法使用该资源。在此情况下，设置 JVM 的 TTL，以便定期刷新其缓存的 IP 信息是极为重要的。

**注意**  
默认 TTL 是变化的，具体取决于 JVM 的版本以及是否安装安全管理器。许多 JVM 提供的默认 TTL 小于 60 秒。如果您使用此类 JVM 并且未使用安全管理器，则您可以忽略本主题的剩余内容。有关 Oracle 中安全管理器的更多信息，请参阅 Oracle 文档中的[安全管理器](https://docs.oracle.com/javase/tutorial/essential/environment/security.html)。

要修改 JVM 的 TTL，请设置 [https://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html](https://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html) 属性值。根据您的需求，使用下列方法之一：
+ 要为使用 JVM 的所有应用程序全局设置属性值，请在 `networkaddress.cache.ttl` 文件中设置 `$JAVA_HOME/jre/lib/security/java.security`。

  ```
  networkaddress.cache.ttl=60								
  ```
+ 要仅在本地为应用程序设置属性，请在建立任何网络连接之前，在应用程序的初始化代码中设置 `networkaddress.cache.ttl`。

  ```
  java.security.Security.setProperty("networkaddress.cache.ttl" , "60");									
  ```

# 使用多可用区数据库集群为 Amazon RDS 设置 PostgreSQL 逻辑复制
<a name="USER_MultiAZDBCluster_LogicalRepl"></a>

通过将 PostgreSQL 逻辑复制与多可用区数据库集群结合使用，您可以复制和同步各个表，而不是整个数据库实例。逻辑复制使用发布和订阅模型将更改从源复制到一个或多个接收者。它的工作原理是使用 PostgreSQL 预写日志（WAL）中的更改记录。有关更多信息，请参阅 [为 Amazon RDS for PostgreSQL 执行逻辑复制](PostgreSQL.Concepts.General.FeatureSupport.LogicalReplication.md)。

当您在多可用区数据库集群的写入器数据库实例上创建新的逻辑复制插槽时，该插槽会异步复制到集群中的每个读取器数据库实例上。读取器数据库实例上的插槽会持续与写入器数据库实例上的插槽同步。

运行 RDS for PostgreSQL 版本 14.8-R2 及更高版本以及 15.3-R2 及更高版本的多可用区数据库集群支持逻辑复制。

**注意**  
除了原生 PostgreSQL 逻辑复制功能外，运行 RDS for PostgreSQL 的多可用区数据库集群还支持 `pglogical` 扩展。

有关 PostgreSQL 逻辑复制的更多信息，请参阅 PostgreSQL 文档中的[逻辑复制](https://www.postgresql.org/docs/current/logical-replication.html)。

**Topics**
+ [先决条件](#multi-az-db-clusters-logical-replication-prereqs)
+ [设置逻辑复制](#multi-az-db-clusters-logical-replication)
+ [限制和建议](#multi-az-db-clusters-logical-replication-limitations)

## 先决条件
<a name="multi-az-db-clusters-logical-replication-prereqs"></a>

要为多可用区数据库集群配置 PostgreSQL 逻辑复制，必须满足以下先决条件。
+ 您的用户账户必须是 `rds_superuser` 组的成员并具有 `rds_superuser` 权限。有关更多信息，请参阅 [了解 PostgreSQL 角色和权限](Appendix.PostgreSQL.CommonDBATasks.Roles.md)。
+ 您的多可用区数据库集群必须与自定义数据库集群参数组相关联，您才能配置以下过程中所述的参数值。有关更多信息，请参阅 [使用多可用区数据库集群的数据库集群参数组](USER_WorkingWithDBClusterParamGroups.md)。

## 设置逻辑复制
<a name="multi-az-db-clusters-logical-replication"></a>

要为多可用区数据库集群设置逻辑复制，请在关联的数据库集群参数组中启用特定参数，然后创建逻辑复制插槽。

**注意**  
从 PostgreSQL 版本 16 开始，您可以使用多可用区数据库集群的读取器数据库实例来进行逻辑复制。

**为 RDS for PostgreSQL 多可用区数据库集群设置逻辑复制**

1. 打开与您的 RDS for PostgreSQL 多可用区数据库集群关联的自定义数据库集群参数组。

1. 在**参数**搜索字段中，找到 `rds.logical_replication` 静态参数并将其值设置为 `1`。此参数更改会增加 WAL 生成，因此只有在使用逻辑插槽时才启用它。

1. 在此更改过程中，请配置以下数据库集群参数。
   + `max_wal_senders`
   + `max_replication_slots`
   + `max_connections`

   根据您的预期使用情况，您可能还需要更改以下参数的值。但是，在许多情况下，原定设置值就足够了。
   + `max_logical_replication_workers`
   + `max_sync_workers_per_subscription`

1. 重启多可用区数据库集群以使参数值生效。有关说明，请参阅[重启 Amazon RDS 的多可用区数据库集群和读取器数据库实例](multi-az-db-clusters-concepts-rebooting.md)。

1. 如[使用逻辑复制槽](PostgreSQL.Concepts.General.FeatureSupport.LogicalReplication.md#PostgreSQL.Concepts.General.FeatureSupport.LogicalReplicationSlots)中所述，在多可用区数据库集群的写入器数据库实例上创建逻辑复制插槽。该过程需要您指定解码插件。目前，RDS for PostgreSQL 支持 PostgreSQL 随附的 `test_decoding`、`wal2json` 和 `pgoutput` 插件。

   该插槽会异步复制到集群中的每个读取器数据库实例。

1. 验证多可用区数据库集群所有读取器数据库实例上的插槽状态。为此，请检查所有读取器数据库实例上的 `pg_replication_slots` 视图，并确保在应用程序积极使用逻辑更改时，状态 `confirmed_flush_lsn` 推进。

   以下命令演示了如何检查读取器数据库实例上的复制状态。

   ```
   % psql -h test-postgres-instance-2.abcdefabcdef.us-west-2.rds.amazonaws.com
   
   postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots;
     slot_name   | slot_type | confirmed_flush_lsn
   --------------+-----------+---------------------
    logical_slot | logical   | 32/D0001700
   (1 row)
   
   postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots;
     slot_name   | slot_type | confirmed_flush_lsn
   --------------+-----------+---------------------
    logical_slot | logical   | 32/D8003628
   (1 row)
   
   % psql -h test-postgres-instance-3.abcdefabcdef.us-west-2.rds.amazonaws.com
   
   postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots;
     slot_name   | slot_type | confirmed_flush_lsn
   --------------+-----------+---------------------
    logical_slot | logical   | 32/D0001700
   (1 row)
   
   postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots;
     slot_name   | slot_type | confirmed_flush_lsn
   --------------+-----------+---------------------
    logical_slot | logical   | 32/D8003628
   (1 row)
   ```

完成复制任务后，停止复制过程，删除复制插槽并关闭逻辑复制。要关闭逻辑复制，请修改您的数据库集群参数组并将 `rds.logical_replication` 的值设回 `0`。重启集群以使参数更改生效。

## 限制和建议
<a name="multi-az-db-clusters-logical-replication-limitations"></a>

在使用运行 PostgreSQL 16 的多可用区数据库集群进行逻辑复制时，以下限制和建议适用：
+ 您只能使用写入器数据库实例来创建或删除逻辑复制槽。例如，`CREATE SUBSCRIPTION` 命令必须在主机连接字符串中使用集群写入器端点。
+ 在任何表同步或再同步期间，您都必须使用集群写入器端点。例如，您可以使用以下命令来再同步新添加的表。

  ```
  Postgres=>ALTER SUBSCRIPTION subscription-name CONNECTION host=writer-endpoint
  Postgres=>ALTER SUBSCRIPTION subscription-name REFRESH PUBLICATION
  ```
+ 在使用读取器数据库实例进行逻辑复制之前，必须等待表完成同步。您可以使用 `[pg\$1subscription\$1rel](https://www.postgresql.org/docs/current/catalog-pg-subscription-rel.html)` 目录表来监控表同步。当 `srsubstate` 列设置为就绪（`r`）时，表示表同步已完成。
+ 建议您在初始表同步完成后使用实例端点进行逻辑复制连接。以下命令通过将复制载荷分流到一个读取器数据库实例，来减少写入器数据库实例的载荷:

  ```
  Postgres=>ALTER SUBSCRIPTION subscription-name CONNECTION host=reader-instance-endpoint
  ```

  您不能同时在多个数据库实例上使用相同的复制槽。当两个或更多应用程序从集群中的不同数据库实例复制逻辑更改时，某些更改可能由于集群失效转移或网络问题而丢失。在此类情况下，您可以使用实例端点在主机连接字符串中进行逻辑复制。使用相同配置的另一个应用程序将显示以下错误消息：

  ```
  replication slot slot_name is already active for PID x providing immediate feedback.
  ```
+ 使用 `pglogical` 扩展时，您只能使用集群写入器端点。该扩展具有已知的局限性，可能会在表同步期间创建未使用的逻辑复制槽。过时的复制槽会保留预写日志（WAL）文件，并可能导致磁盘空间问题。

# 使用 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 或更高版本，才能创建数据库实例只读副本。
+ 您可以对数据库实例只读副本的源多可用区数据库集群执行主要版本升级，但复制到只读副本的操作会停止且无法重新启动。

# 设置从 Amazon RDS 的多可用区数据库集群进行外部复制
<a name="multi-az-db-clusters-external-replication"></a>

可以在多可用区数据库集群和 Amazon RDS 外部的数据库之间设置复制。

外部复制支持多可用区数据库集群在 RDS 数据库实例和外部数据库之间复制数据，无论是在本地还是在其它云环境中。外部复制有利于灾难恢复、数据迁移和维护不同位置的系统之间的一致性。本节涵盖了设置复制的先决条件，如何配置复制过程，以及诸如复制延迟、带宽及与不同数据库引擎的兼容性等关键注意事项。

## RDS for MySQL
<a name="multi-az-db-clusters-external-mysql"></a>

要为 RDS for MySQL 多可用区数据库集群设置外部复制，必须在集群内的数据库实例上将二进制日志文件保留足够长的时间，来确保在 Amazon RDS 删除二进制日志文件之前将更改应用于副本。为此，请通过调用 `mysql.rds_set_configuration` 存储过程并指定 `binlog retention hours` 参数来配置二进制日志保留期。有关更多信息，请参阅 [二进制日志保留小时数](mysql-stored-proc-configuring.md#mysql_rds_set_configuration-usage-notes.binlog-retention-hours)。

`binlog retention hours` 的默认值为 `NULL`，这意味着不保留二进制日志（0 小时）。如果要为多可用区数据库集群设置外部复制，则必须将参数设置为 `NULL` 以外的值。

只能从多可用区数据库集群的写入器数据库实例中配置二进制日志保留，并且该设置会异步传播到所有读取器数据库实例。

此外，我们强烈建议在外部副本上启用基于 GTID 的复制。然后，如果其中一个数据库实例出现故障，则可以从集群中另一个运行状况正常的数据库实例继续复制。有关更多信息，请参阅 MySQL 文档中的 [Replication with Global Transaction Identifiers](https://dev.mysql.com/doc/refman/8.0/en/replication-gtids.html)。

## RDS for PostgreSQL
<a name="multi-az-db-clusters-external-postgres"></a>

要为 RDS for PostgreSQL 多可用区数据库集群设置外部复制，必须启用逻辑复制。有关说明，请参阅[使用多可用区数据库集群为 Amazon RDS 设置 PostgreSQL 逻辑复制](USER_MultiAZDBCluster_LogicalRepl.md)。

# 删除 Amazon RDS 的多可用区数据库集群
<a name="USER_DeleteMultiAZDBCluster.Deleting"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 删除数据库多可用区数据库集群。

删除多可用区数据库集群所需的时间可能因以下因素而异：
+ 备份保留期（即，要删除的备份数）。
+ 删除的数据量。
+ 是否拍摄了最终快照。

必须先在多可用区数据库集群上禁用删除保护功能，然后才能将其删除。有关更多信息，请参阅 [删除数据库实例的先决条件](USER_DeleteInstance.md#USER_DeleteInstance.DeletionProtection)。您可以通过修改多可用区数据库集群来禁用删除保护。有关更多信息，请参阅 [修改 Amazon RDS 的多可用区数据库集群](modify-multi-az-db-cluster.md)。

## 控制台
<a name="USER_DeleteMultiAZDBCluster.Deleting.CON"></a>

**要删除多可用区数据库集群**

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

1. 在导航窗格中，请选择 **Databases**（数据库），然后选择要删除的多可用区数据库集群。

1. 对于**操作**，选择**删除**。

1. 请选择 **Create final snapshot**（是否创建最终快照？）来为多可用区数据库集群创建最终数据库快照。

   如果创建最终快照，请为 **Final snapshot name**（最终快照名称）输入名称。

1. 请选择 **Retain automated backups**（保留自动备份）以保留自动备份。

1. 在框中输入 **delete me**。

1. 选择**删除**。

## AWS CLI
<a name="USER_DeleteMultiAZDBCluster.Deleting.CLI"></a>

要使用 AWS CLI 删除多可用区数据库集群，请调用 [delete-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-cluster.html) 命令，并采用以下选项：
+ `--db-cluster-identifier`
+ `--final-db-snapshot-identifier` 或 `--skip-final-snapshot`

**Example 拥有最终快照**  
对于 Linux、macOS 或 Unix：  

```
aws rds delete-db-cluster \
    --db-cluster-identifier mymultiazdbcluster \
    --final-db-snapshot-identifier mymultiazdbclusterfinalsnapshot
```
对于 Windows：  

```
aws rds delete-db-cluster ^
    --db-cluster-identifier mymultiazdbcluster ^
    --final-db-snapshot-identifier mymultiazdbclusterfinalsnapshot
```

**Example 没有最终快照**  
对于 Linux、macOS 或 Unix：  

```
aws rds delete-db-cluster \
    --db-cluster-identifier mymultiazdbcluster \
    --skip-final-snapshot
```
对于 Windows：  

```
aws rds delete-db-cluster ^
    --db-cluster-identifier mymultiazdbcluster ^
    --skip-final-snapshot
```

## RDS API
<a name="USER_DeleteMultiAZDBCluster.Deleting.API"></a>

要使用 Amazon RDS API 删除多可用区数据库集群，请调用 [DeleteDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteDBCluster.html) 操作，并采用以下参数：
+ `DBClusterIdentifier`
+ `FinalDBSnapshotIdentifier` 或者 `SkipFinalSnapshot`

# Amazon RDS 的多可用区数据库集群的限制
<a name="multi-az-db-clusters-concepts.Limitations"></a>

多可用区数据库集群在三个独立可用区中有一个写入器数据库实例和两个读取器数据库实例。与多可用区部署相比，多可用区数据库集群可提供高可用性、增加读取工作负载容量以及更低的延迟。有关多可用区数据库集群的更多信息，请参阅 [Amazon RDS 的多可用区数据库集群部署](multi-az-db-clusters-concepts.md)。

以下限制适用于多可用区数据库集群。
+ 多可用区数据库集群不支持以下特征：
  + IPv6 连接（双堆栈模式）
  + 跨区域自动备份
  + Kerberos 身份验证
  + 修改端口。作为替代方法，您可以将多可用区数据库集群还原到某个时间点并指定其他端口。
  + 选项组
  + 已删除的集群的时间点故障恢复（PITR）
  + 通过设置最大分配的存储空间来执行存储自动扩缩。作为替代方法，您可以手动扩展存储。
  + 停止并启动多可用区数据库集群
  + 复制多可用区数据库集群的快照
  + 加密未加密的多可用区数据库集群
+ RDS for MySQL 多可用区数据库集群仅支持以下系统存储过程：
  + `mysql.rds_rotate_general_log`
  + `mysql.rds_rotate_slow_log`
  + `mysql.rds_show_configuration`
  + `mysql.rds_set_external_master_with_auto_position`
  + `mysql.rds_set_configuration`
+ RDS for PostgreSQL 多可用区数据库集群不支持以下扩展：`aws_s3` 和 `pg_transport`。
+ RDS for PostgreSQL 多可用区数据库集群不支持使用自定义 DNS 服务器进行出站网络访问。