

# 连接到 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)。