Amazon Aurora 连接管理 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon Aurora 连接管理

Amazon Aurora 通常涉及数据库实例集群而不是单个实例。每个连接均由特定的数据库实例处理。在连接到 Aurora 集群时,您指定的主机名和端口将指向名为终端节点的中间处理程序。Aurora 使用终端节点机制来提取这些连接。因此,当某些数据库实例不可用时,您不必对所有主机名进行硬编码或编写自己的逻辑来进行负载均衡和重新路由连接。

对于某些 Aurora 任务,不同的实例或实例组执行不同的角色。例如,主实例处理所有数据定义语言 (DDL) 和数据操作语言 (DML) 语句。最多 15 个 Aurora 副本处理只读查询流量。

通过使用终端节点,您可以根据使用案例将每个连接映射到相应的实例或实例组。例如,要执行 DDL 语句,您可以连接到作为主实例的任一实例。要执行查询,您可以连接到读取器终端节点,并通过 Aurora 自动在所有 Aurora 副本之间执行负载均衡。对于具有不同容量或配置的数据库实例的集群,您可以连接到与不同的数据库实例子集关联的自定义终端节点。对于诊断或优化,您可以连接到特定实例终端节点以检查有关特定数据库实例的详细信息。

Aurora 终端节点的类型

终端节点表示为包含主机地址和端口的 Aurora 特定的 URL。可从 Aurora 数据库集群使用以下类型的终端节点。

集群终端节点

Aurora 数据库集群的集群终端节点(或读取器终端节点)连接到该数据库集群的当前主数据库实例。此终端节点是唯一可以执行写操作(如 DDL 语句)的终端节点。因此,集群终端节点是您在首次设置集群时或集群仅包含单个数据库实例时连接到的终端节点。

每个 Aurora 数据库集群均有一个集群终端节点和一个主数据库实例。

对数据库集群上的所有写入操作使用集群终端节点,这些操作包括插入、更新、删除和 DDL 更改。您还可以对读取操作(如查询)使用集群终端节点。

集群终端节点为数据库集群的读取/写入连接提供故障转移支持。如果数据库集群的当前主数据库实例失败,Aurora 将自动故障转移到新的主数据库实例。在故障转移期间,数据库集群将继续为从新的主数据库实例到集群终端节点的请求提供服务,对服务造成的中断最少。

以下示例介绍 Aurora MySQL 数据库集群中的集群终端节点。

mydbcluster.cluster-c7tj4example.us-east-1.rds.amazonaws.com:3306

读取器终端节点

Aurora 数据库集群的读取器终端节点为数据库集群的只读连接提供负载均衡支持。对读取操作 (如查询) 使用读取器终端节点。通过在只读 Aurora 副本上处理这些语句,此终端节点可减少主实例上的开销。它还可以帮助集群扩展容量以处理同时进行的 SELECT 查询,扩展的容量与集群中的 Aurora 副本数成比例。每个 Aurora 数据库集群均有一个读取器终端节点。

如果集群包含一个或多个 Aurora 副本,读取器终端节点将对 Aurora 副本间的每个连接请求进行负载平衡。在这种情况下,您只能在该会话中执行只读语句,例如 SELECT。如果集群仅包含主实例而不包含 Aurora 副本,则读取器终端节点将连接到主实例。在这种情况下,您可以通过终端节点执行写入操作。

以下示例介绍 Aurora MySQL 数据库集群中的读取器终端节点。

mydbcluster.cluster-ro-c7tj4example.us-east-1.rds.amazonaws.com:3306

自定义终端节点

Aurora 集群的自定义终端节点 表示一组选定数据库实例。在连接到终端节点时,Aurora 会执行负载均衡并选择组中的某个实例来处理连接。您可以定义此终端节点引用的实例,并确定此终端节点的用途。

在您创建自定义终端节点之前,Aurora 数据库集群没有自定义终端节点。您可以为每个预调配的 Aurora 集群或 Aurora Serverless v2 集群创建最多 5 个自定义端点。您无法对 Aurora Serverless v1 集群使用自定义终端节点。

自定义终端节点根据数据库实例的只读或读/写功能以外的条件提供负载均衡的数据库连接。例如,您可以定义自定义终端节点以连接到使用特定的 Amazon 实例类或特定的数据库参数组的实例。然后,您可以将此自定义终端节点的相关信息告知特定的用户组。例如,您可以将内部用户定向到低容量实例以生成报告或执行临时(一次性)查询,并将生产流量定向到高容量实例。

由于连接可以转到与自定义终端节点关联的任何数据库实例,因此,建议您确保该组中的所有数据库实例共享一些类似的特性。这样做可确保性能、内存容量等对于连接到该终端节点的每个人都是一致的。

此功能适用于具有特殊类型的工作负载的高级用户,在这些工作负载下,使集群中的所有 Aurora 副本保持相同是不切实际的。利用自定义终端节点,您可以预测用于每个连接的数据库实例的容量。在使用自定义终端节点时,通常不使用该集群的读取器终端节点。

以下示例介绍 Aurora MySQL 数据库集群中数据库实例的自定义终端节点。

myendpoint.cluster-custom-c7tj4example.us-east-1.rds.amazonaws.com:3306

实例终端节点

实例终端节点 连接到 Aurora 集群中的特定数据库实例。数据库集群中的每个数据库实例具有自己的唯一实例终端节点。因此,数据库集群的当前主数据库实例具有一个实例终端节点,并且数据库集群中的每个 Aurora 副本都具有一个实例终端节点。

对于可能不适合使用集群终端节点或读取器终端节点的场景,实例终端节点提供对与数据库集群连接的直接控制。例如,客户端应用程序可能根据工作负载类型需要更精细的负载均衡。在这种情况下,您可以配置多个客户端以连接到数据库集群中的不同 Aurora 副本,以便分配读取工作负载。有关在 Aurora PostgreSQL 故障转移后使用实例终端节点提高连接速度的示例,请参阅Amazon Aurora PostgreSQL 的快速故障转移。有关在 Aurora MySQL 故障转移后使用实例端点提高连接速度的示例,请参阅 MariaDB Connector/J 故障转移支持 – 案例 Amazon Aurora

以下示例介绍 Aurora MySQL 数据库集群中数据库实例的实例终端节点。

mydbinstance.c7tj4example.us-east-1.rds.amazonaws.com:3306

查看 Aurora 集群的终端节点

在 Amazon Web Services Management Console中,您可以在每个集群的详细信息页面中查看集群终端节点、读取器终端节点和任何自定义终端节点。可在每个实例的详细信息页面中查看实例终端节点。在连接时,必须将关联端口号(跟在冒号后面)附加到此详细信息页面上显示的终端节点名称。

利用 Amazon CLI,您会在 describe-db-clusters 命令的输出中看到写入器、读取器以及任何自定义终端节点。例如,以下命令显示当前 Amazon 区域中所有集群的终端节点属性。

aws rds describe-db-clusters --query '*[].{Endpoint:Endpoint,ReaderEndpoint:ReaderEndpoint,CustomEndpoints:CustomEndpoints}'

利用 Amazon RDS API,您可以通过调用 DescribeDBClusterEndpoints 函数来检索终端节点。

使用集群终端节点

由于每个 Aurora 集群都有一个内置集群终端节点(其名称和其他属性由 Aurora 管理),因此,您无法创建、删除或修改此类终端节点。

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

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

使用读取器终端节点

您将读取器终端节点用于 Aurora 集群的只读连接。此终端节点使用负载均衡机制来帮助您的集群处理查询密集型工作负载。读取器终端节点是您向在集群上执行报告或其他只读操作的应用程序提供的终端节点。

读取器终端节点对到 Aurora 数据库集群中的可用 Aurora 副本的连接执行负载均衡。它不会对各个查询进行负载均衡。如果要对每个查询进行负载均衡以分布数据库集群的读取工作负载,请为每个查询打开与读取器终端节点的新连接。

每个 Aurora 集群都有一个内置读取器终端节点,其名称和其他属性由 Aurora 管理。您无法创建、删除或修改此类终端节点。

如果您的集群仅包含主实例而不包含 Aurora 副本,则读取器终端节点将连接到主实例。在这种情况下,您可以通过此终端节点执行写入操作。

提示

通过 RDS 代理,您可以为 Aurora 集群创建其他只读终端节点。这些终端节点执行的负载均衡与 Aurora 读取器终端节点相同。如果读取器实例不可用,则应用程序可以比 Aurora 读取器终端节点更快地重新连接到代理终端节点。代理终端节点还可以利用其他代理功能,例如多路复用。有关更多信息,请参阅“将读取器终端节点与 Aurora 集群结合使用”。

使用自定义终端节点

当集群包含具有不同容量和配置设置的数据库实例时,您可以使用自定义终端节点来简化连接管理。

以前,您可能已使用 CNAMES 机制从您自己的域设置域名服务 (DNS) 别名以便获得类似结果。通过使用自定义终端节点,可以避免在集群增大或缩小时更新 CNAME 记录。自定义终端节点还意味着,您可以使用加密的传输层安全性/安全套接字层 (TLS/SSL) 连接。

您可以拥有多组专用数据库实例,而不是为每个特定目的使用一个数据库实例并连接到其实例终端节点。在这种情况下,每个组都有自己的自定义终端节点。这样一来,Aurora 可以在专用于报告或处理生产或内部查询等任务的所有实例之间执行负载均衡。自定义终端节点为集群中的每组数据库实例提供负载均衡和高可用性。如果组中的某个数据库实例变为不可用,则 Aurora 会将后续自定义终端节点连接定向到与同一终端节点关联的其他数据库实例之一。

指定自定义终端节点的属性

自定义终端节点名称的最大长度为 63 个字符。名称格式如下:

endpoint_name.cluster-custom-customer_DNS_identifier.AWS_Region.rds.amazonaws.com

您不能为同一 Amazon Web Services 区域中的多个集群重用相同的自定义端点名称。客户 DNS 标识符是与特定 Amazon Web Services 区域中您的 Amazon Web Services 账户相关联的唯一标识符。

每个自定义终端节点都有一个关联的类型,该类型将确定哪些数据库实例有资格与该终端节点关联。目前,类型可以是 READERWRITERANY。对于自定义终端节点类型,应注意以下事项:

  • 无法在 Amazon Web Services Management Console中选择自定义端点类型。通过 Amazon Web Services Management Console 创建的所有自定义终端节点都具有类型 ANY

    您可以使用 Amazon CLI 或 Amazon RDS API 设置和修改自定义端点类型。

  • 只有读取器数据库实例可以是 READER 自定义端点的一部分。

  • 读取器和写入器数据库实例都可以是 ANY 自定义端点的一部分。Aurora 以相同的概率将到 ANY 类型的集群终端节点的连接定向到任何关联的数据库实例。ANY 类型适用于使用任意复制拓扑的集群。

  • 如果您尝试根据集群的复制配置创建类型不合适的自定义终端节点,则 Aurora 将返回错误。

自定义终端节点的成员资格规则

在将数据库实例添加到自定义终端节点或将其从自定义终端节点中删除时,与该数据库实例的任何现有连接都将保持活动状态。

您可以定义要包含在自定义终端节点中或从其中排除的数据库实例的列表。我们将这些列表分别称为静态排除 列表。您可以使用包含/排除机制进一步细分数据库实例组,并确保自定义终端节点集涵盖集群中的所有数据库实例。每个自定义终端节点只能包含其中一种列表类型。

在 Amazon Web Services Management Console 中:

  • 该选项由复选框 Attach future instances added to this cluster(附加将来添加到此集群的实例)表示。如果清除该复选框,则自定义终端节点将使用仅包含页面中指定的数据库实例的静态列表。选中此复选框后,自定义终端节点将使用排除列表。在这种情况下,自定义终端节点表示集群中的所有数据库实例(包括您将来添加的任何实例),但页面中未选中的实例除外。

  • 控制台不允许您指定端点类型。使用控制台创建的任何自定义端点均属于 ANY 类型。

    因此,当数据库实例因失效转移或提升而在写入器和读取器之间变换角色时,Aurora 不会更改自定义端点的成员资格。

在 Amazon CLI 和 Amazon RDS API 中:

  • 您可以指定端点类型。因此,当端点类型设置为 READERWRITER 时,端点成员资格将在失效转移和提升期间自动调整。

    例如,类型为 READER 的自定义端点包含 Aurora 副本,然后将其提升为写入器实例。新的写入器实例不再是自定义端点的一部分。

  • 您可以在各个成员更改其角色后将其添加到列表中或从列表中删除。使用 modify-db-cluster-endpoint Amazon CLI 命令或 ModifyDBClusterEndpoint API 操作。

您可以将一个数据库实例与多个自定义终端节点关联。例如,假设您将新数据库实例添加到集群,或者 Aurora 通过自动扩展机制自动添加数据库实例。在这些情况下,数据库实例将添加到它符合条件的所有自定义终端节点。数据库实例添加到的终端节点基于自定义终端节点类型 READERWRITERANY,以及为每个终端节点定义的任何静态或排除列表。例如,如果终端节点包含数据库实例的静态列表,则新添加的 Aurora 副本不会添加到该终端节点。相反,如果终端节点具有排除列表,则新添加的 Aurora 副本将添加到终端节点(如果它们未在排除列表中指定且其角色与自定义终端节点的类型匹配)。

如果一个 Aurora 副本变得不可用,它仍将与任何自定义终端节点关联。例如,当它处于不正常、已停止、重新启动等状态时,它仍然是自定义终端节点的一部分。但是,您无法通过这些终端节点连接到它,直到它再次可用。

管理自定义终端节点

由于新创建的 Aurora 集群没有自定义终端节点,因此,您必须自行创建和管理这些对象。您可以使用 Amazon Web Services Management Console、Amazon CLI 或 Amazon RDS API 完成此操作。

注意

您还必须为从快照还原的 Aurora 集群创建和管理自定义终端节点。快照中不包含自定义终端节点。您在还原后再次创建它们,并在还原的集群与原始集群位于同一区域时选择新的终端节点名称。

要从 Amazon Web Services Management Console 中使用自定义终端节点,您可以导航到 Aurora 集群的详细信息页,并使用 Custom Endpoints (自定义终端节点) 部分下的控件。

要从 Amazon CLI 使用自定义终端节点,您可以使用以下操作:

要通过 Amazon RDS API 使用自定义终端节点,您可以使用以下函数:

创建自定义终端节点

要使用 Amazon Web Services Management Console创建自定义终端节点,请转到集群详细信息页,然后选择 Endpoints (终端节点) 部分中的 Create custom endpoint 操作。为自定义终端节点选择一个名称,该名称对于用户 ID 和区域是唯一的。要选择即使在集群扩展时也保持不变的数据库实例列表,请清除 Attach future instances added to this cluster (挂载以后添加到此集群的实例) 复选框。如果选中该复选框,在将任何新实例添加到集群时,自定义终端节点将动态添加这些实例。

无法在 ANY 中选择自定义终端节点类型 READER 或 Amazon Web Services Management Console。通过 Amazon Web Services Management Console 创建的所有自定义终端节点都具有类型 ANY

要使用 Amazon CLI 创建自定义终端节点,请运行 create-db-cluster-endpoint 命令。

以下命令创建附加到特定集群的自定义终端节点。最初,该终端节点与集群中的所有 Aurora 副本实例相关联。后续命令将其与集群中的一组特定数据库实例相关联。

对于 Linux、macOS 或 Unix:

aws rds create-db-cluster-endpoint --db-cluster-endpoint-identifier custom-endpoint-doc-sample \ --endpoint-type reader \ --db-cluster-identifier cluster_id aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier custom-endpoint-doc-sample \ --static-members instance_name_1 instance_name_2

对于 Windows:

aws rds create-db-cluster-endpoint --db-cluster-endpoint-identifier custom-endpoint-doc-sample ^ --endpoint-type reader ^ --db-cluster-identifier cluster_id aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier custom-endpoint-doc-sample ^ --static-members instance_name_1 instance_name_2

要使用 RDS API 创建自定义终端节点,请运行 CreateDBClusterEndpoint 操作。

查看自定义终端节点

要使用 Amazon Web Services Management Console查看自定义终端节点,请转到集群的集群详细信息页,并查看 Endpoints (终端节点) 部分下方的内容。本部分仅包含有关自定义终端节点的信息。主要的 Details (详细信息) 部分中列出了内置终端节点的详细信息。要查看特定自定义终端节点的详细信息,请选择其名称以显示该终端节点的详细信息页。

以下屏幕截图说明最初如何清空 Aurora 集群的自定义终端节点列表。

在为该集群创建一些自定义终端节点后,它们将显示在 Endpoints (终端节点) 部分下。

单击详细信息页面可显示终端节点当前所关联的数据库实例。

要查看添加到集群的新数据库实例是否也自动添加到终端节点的其他详细信息,请打开终端节点的 Edit(编辑)页面。

要使用 Amazon CLI 查看自定义终端节点,请运行 describe-db-cluster-endpoints 命令。

以下命令显示与指定区域中的指定集群关联的自定义终端节点。输出包括内置终端节点和任何自定义终端节点。

对于 Linux、macOS 或 Unix:

aws rds describe-db-cluster-endpoints --region region_name \ --db-cluster-identifier cluster_id

对于 Windows:

aws rds describe-db-cluster-endpoints --region region_name ^ --db-cluster-identifier cluster_id

下面显示了来自 describe-db-cluster-endpoints 命令的一些示例输出。EndpointTypeWRITERREADER 表示集群的内置读/写终端节点和只读终端节点。EndpointTypeCUSTOM 表示您创建的终端节点并选择关联的数据库实例。其中一个终端节点具有非空 StaticMembers 字段,表示它与一组精确的数据库实例相关联。另一个终端节点有一个非空 ExcludedMembers 字段,表示终端节点与 ExcludedMembers 下列出的数据库实例之外 的所有数据库实例相关联。当您将新实例添加到集群时,第二种自定义终端节点会增长以容纳这些新实例。

{ "DBClusterEndpoints": [ { "Endpoint": "custom-endpoint-demo.cluster-c7tj4example.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo", "EndpointType": "WRITER" }, { "Endpoint": "custom-endpoint-demo.cluster-ro-c7tj4example.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo", "EndpointType": "READER" }, { "CustomEndpointType": "ANY", "DBClusterEndpointIdentifier": "powers-of-2", "ExcludedMembers": [], "DBClusterIdentifier": "custom-endpoint-demo", "Status": "available", "EndpointType": "CUSTOM", "Endpoint": "powers-of-2.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "StaticMembers": [ "custom-endpoint-demo-04", "custom-endpoint-demo-08", "custom-endpoint-demo-01", "custom-endpoint-demo-02" ], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHXQKFU6J6NV5FHU", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:powers-of-2" }, { "CustomEndpointType": "ANY", "DBClusterEndpointIdentifier": "eight-and-higher", "ExcludedMembers": [ "custom-endpoint-demo-04", "custom-endpoint-demo-02", "custom-endpoint-demo-07", "custom-endpoint-demo-05", "custom-endpoint-demo-03", "custom-endpoint-demo-06", "custom-endpoint-demo-01" ], "DBClusterIdentifier": "custom-endpoint-demo", "Status": "available", "EndpointType": "CUSTOM", "Endpoint": "eight-and-higher.cluster-custom-123456789012.ca-central-1.rds.amazonaws.com", "StaticMembers": [], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHYQKFU6J6NV5FHU", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:eight-and-higher" } ] }

要使用 RDS API 查看自定义终端节点,请运行 DescribeDBClusterEndpoints.html 操作。

编辑自定义终端节点

您可以编辑自定义终端节点的属性以更改与终端节点关联的数据库实例。您也可以更改静态列表和排除列表之间的终端节点。如果您需要了解有关这些终端节点属性的更多详细信息,请参阅自定义终端节点的成员资格规则

当编辑操作的更改正在进行时,您可以继续连接和使用自定义终端节点。

要使用 Amazon Web Services Management Console编辑自定义终端节点,您可以在集群详细信息页面上选择终端节点,或显示终端节点的详细信息页面,然后选择 Edit (编辑) 操作。

要使用 Amazon CLI 编辑自定义终端节点,请运行 modify-db-cluster-endpoint 命令。

以下命令更改应用于自定义终端节点的数据库实例集,并可选择在静态列表或排除列表的行为之间切换。--static-members--excluded-members 参数接受以空格分隔的数据库实例标识符列表。

对于 Linux、macOS 或 Unix:

aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier my-custom-endpoint \ --static-members db-instance-id-1 db-instance-id-2 db-instance-id-3 \ --region region_name aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier my-custom-endpoint \ --excluded-members db-instance-id-4 db-instance-id-5 \ --region region_name

对于 Windows:

aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier my-custom-endpoint ^ --static-members db-instance-id-1 db-instance-id-2 db-instance-id-3 ^ --region region_name aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier my-custom-endpoint ^ --excluded-members db-instance-id-4 db-instance-id-5 ^ --region region_name

要使用 RDS API 编辑自定义终端节点,请运行 ModifyDBClusterEndpoint.html 操作。

删除自定义终端节点

要使用 Amazon Web Services Management Console删除自定义终端节点,请转到集群详细信息页面,选择相应的自定义终端节点,然后选择 Delete (删除) 操作。

要使用 Amazon CLI 删除自定义终端节点,请运行 delete-db-cluster-endpoint 命令。

以下命令删除自定义终端节点。您无需指定关联的集群,但必须指定区域。

对于 Linux、macOS 或 Unix:

aws rds delete-db-cluster-endpoint --db-cluster-endpoint-identifier custom-end-point-id \ --region region_name

对于 Windows:

aws rds delete-db-cluster-endpoint --db-cluster-endpoint-identifier custom-end-point-id ^ --region region_name

要使用 RDS API 删除自定义终端节点,请运行 DeleteDBClusterEndpoint 操作。

自定义终端节点的端到端 Amazon CLI 示例

以下教程使用带 Unix shell 语法的 Amazon CLI 示例,来说明您可以定义一个具有多个“小型”数据库实例和几个“大型”数据库实例的集群,并创建自定义终端节点以连接到每组数据库实例。要在您自己的系统上运行类似的命令,您应该充分熟悉使用 Aurora 集群和 Amazon CLI 的基础知识,以便为区域、子网组和 VPC 安全组等参数提供您自己的值。

此示例演示初始设置步骤:创建一个 Aurora 集群并向其添加数据库实例。这是一个异构集群,意味着并非所有数据库实例都具有相同的容量。大多数实例使用 Amazon 实例类 db.r4.4xlarge,但最后两个数据库实例使用 db.r4.16xlarge。这些示例 create-db-instance 命令中的每个命令都将其输出打印到屏幕,并将 JSON 的副本保存在文件中以供以后检查。

aws rds create-db-cluster --db-cluster-identifier custom-endpoint-demo --engine aurora-mysql \ --engine-version 8.0.mysql_aurora.3.02.0 --master-username $MASTER_USER --manage-master-user-password \ --db-subnet-group-name $SUBNET_GROUP --vpc-security-group-ids $VPC_SECURITY_GROUP \ --region $REGION for i in 01 02 03 04 05 06 07 08 do aws rds create-db-instance --db-instance-identifier custom-endpoint-demo-${i} \ --engine aurora --db-cluster-identifier custom-endpoint-demo --db-instance-class db.r4.4xlarge \ --region $REGION \ | tee custom-endpoint-demo-${i}.json done for i in 09 10 do aws rds create-db-instance --db-instance-identifier custom-endpoint-demo-${i} \ --engine aurora --db-cluster-identifier custom-endpoint-demo --db-instance-class db.r4.16xlarge \ --region $REGION \ | tee custom-endpoint-demo-${i}.json done

较大的实例将保留以用于特殊类型的报告查询。为了使它们不太可能被提升为主实例,以下示例将其提升层更改为最低优先级。此示例指定了生成主用户密码并在 Secrets Manager 中对其进行管理的 --manage-master-user-password 选项。有关更多信息,请参阅使用 Amazon Aurora 和 Amazon Secrets Manager 管理密码。或者,您可以使用 --master-password 选项自行指定和管理密码。

for i in 09 10 do aws rds modify-db-instance --db-instance-identifier custom-endpoint-demo-${i} \ --region $REGION --promotion-tier 15 done

假设您只想为资源最密集的查询使用两个“较大”实例。为此,您可以首先创建一个自定义的只读终端节点。然后,您可以添加静态成员列表,以便该终端节点仅连接到这些数据库实例。这些实例已处于最低的提升层,因此它们都不太可能被提升到主实例。如果其中一个被提升到主实例,它将无法通过该终端节点访问,因为我们指定了 READER 类型,而不是 ANY 类型。

以下示例演示了创建和修改终端节点命令,并演示了示例 JSON 输出,其中显示了自定义终端节点的初始状态和已修改状态。

$ aws rds create-db-cluster-endpoint --region $REGION \ --db-cluster-identifier custom-endpoint-demo \ --db-cluster-endpoint-identifier big-instances --endpoint-type reader { "EndpointType": "CUSTOM", "Endpoint": "big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "DBClusterEndpointIdentifier": "big-instances", "DBClusterIdentifier": "custom-endpoint-demo", "StaticMembers": [], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHXQKFU6J6NV5FHU", "ExcludedMembers": [], "CustomEndpointType": "READER", "Status": "creating", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:big-instances" } $ aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier big-instances \ --static-members custom-endpoint-demo-09 custom-endpoint-demo-10 --region $REGION { "EndpointType": "CUSTOM", "ExcludedMembers": [], "DBClusterEndpointIdentifier": "big-instances", "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHXQKFU6J6NV5FHU", "CustomEndpointType": "READER", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:big-instances", "StaticMembers": [ "custom-endpoint-demo-10", "custom-endpoint-demo-09" ], "Status": "modifying", "Endpoint": "big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "DBClusterIdentifier": "custom-endpoint-demo" }

集群的默认 READER 终端节点可以连接到“小型”或“大型”数据库实例,这使得在集群繁忙时预测查询性能和可扩展性变得不切实际。为了在数据库实例集之间清晰地划分工作负载,您可以忽略默认的 READER 终端节点,并创建第二个自定义终端节点,该终端节点连接到所有其他数据库实例。以下示例通过创建自定义终端节点,然后添加排除列表来实现这一点。稍后添加到集群的任何其他数据库实例将自动添加到此终端节点。ANY 类型表示此终端节点总共与 8 个实例相关联:主实例和另外 7 个 Aurora 副本。如果示例使用的是 READER 类型,则自定义终端节点仅与 7 个 Aurora 副本相关联。

$ aws rds create-db-cluster-endpoint --region $REGION --db-cluster-identifier custom-endpoint-demo \ --db-cluster-endpoint-identifier small-instances --endpoint-type any { "Status": "creating", "DBClusterEndpointIdentifier": "small-instances", "CustomEndpointType": "ANY", "EndpointType": "CUSTOM", "Endpoint": "small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "StaticMembers": [], "ExcludedMembers": [], "DBClusterIdentifier": "custom-endpoint-demo", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:small-instances", "DBClusterEndpointResourceIdentifier": "cluster-endpoint-6RDDXQOC3AKKZT2PRD7ST37BMY" } $ aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier small-instances \ --excluded-members custom-endpoint-demo-09 custom-endpoint-demo-10 --region $REGION { "DBClusterEndpointIdentifier": "small-instances", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:c7tj4example:cluster-endpoint:small-instances", "DBClusterEndpointResourceIdentifier": "cluster-endpoint-6RDDXQOC3AKKZT2PRD7ST37BMY", "CustomEndpointType": "ANY", "Endpoint": "small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "EndpointType": "CUSTOM", "ExcludedMembers": [ "custom-endpoint-demo-09", "custom-endpoint-demo-10" ], "StaticMembers": [], "DBClusterIdentifier": "custom-endpoint-demo", "Status": "modifying" }

以下示例检查此集群的终端节点的状态。集群仍具有其原始集群终端节点(EndPointTypeWRITER),您仍将它用于管理、ETL 和其他写入操作。它仍具有其原始 READER 终端节点,您不会使用此终端节点,因为它的每个连接都可能被定向到“小型”或“大型”数据库实例。自定义终端节点使得此行为是可预测的,连接保证使用基于您指定的终端节点的“小型”或“大型”数据库实例之一。

$ aws rds describe-db-cluster-endpoints --region $REGION { "DBClusterEndpoints": [ { "EndpointType": "WRITER", "Endpoint": "custom-endpoint-demo.cluster-c7tj4example.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo" }, { "EndpointType": "READER", "Endpoint": "custom-endpoint-demo.cluster-ro-c7tj4example.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo" }, { "Endpoint": "small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "CustomEndpointType": "ANY", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:small-instances", "ExcludedMembers": [ "custom-endpoint-demo-09", "custom-endpoint-demo-10" ], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-6RDDXQOC3AKKZT2PRD7ST37BMY", "DBClusterIdentifier": "custom-endpoint-demo", "StaticMembers": [], "EndpointType": "CUSTOM", "DBClusterEndpointIdentifier": "small-instances", "Status": "modifying" }, { "Endpoint": "big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "CustomEndpointType": "READER", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:big-instances", "ExcludedMembers": [], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHXQKFU6J6NV5FHU", "DBClusterIdentifier": "custom-endpoint-demo", "StaticMembers": [ "custom-endpoint-demo-10", "custom-endpoint-demo-09" ], "EndpointType": "CUSTOM", "DBClusterEndpointIdentifier": "big-instances", "Status": "available" } ] }

最后的示例演示了与自定义终端节点的连续数据库连接如何连接到 Aurora 集群中的各种数据库实例。small-instances 终端节点始终连接到 db.r4.4xlarge 数据库实例,这些实例是此集群中编号较低的主机。

$ mysql -h small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-02 | +-------------------------+ $ mysql -h small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-07 | +-------------------------+ $ mysql -h small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-01 | +-------------------------+

big-instances 终端节点始终连接到 db.r4.16xlarge 数据库实例,这些实例是此集群中编号最高的两个主机。

$ mysql -h big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-10 | +-------------------------+ $ mysql -h big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-09 | +-------------------------+

使用实例终端节点

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

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

在高级使用案例中,您可能会以不同的方式配置某些数据库实例。在这种情况下,使用实例终端节点直接连接到更小、更大或具有与其他实例具有不同特征的实例。此外,设置故障转移优先级,以便此特殊的数据库实例是作为主实例接管的最后选择。我们建议您在此类情况下使用自定义终端节点而不是实例终端节点。这样做可以在您向集群中添加更多数据库实例时简化连接管理和高可用性。

Aurora 终端节点如何使用高可用性

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

如果数据库集群的主数据库实例失败,Aurora 将自动故障转移到新的主数据库实例。它通过将现有 Aurora 副本提升为新的主数据库实例或者创建新的主数据库实例来完成该操作。如果发生了故障转移,您可以使用写入器终端节点重新连接到新提升或新创建的主数据库实例,或者使用读取器终端节点重新连接到数据库集群中的 Aurora 副本之一。在故障转移期间,在将 Aurora 副本提升为新的主数据库实例之后,读取器终端节点可能会在很短的时间内将连接定向到数据库集群的新主数据库实例。

如果您设计自己的应用程序逻辑来管理与实例终端节点的连接,则可以手动或以编程方式搜索数据库集群中生成的可用数据库实例集。使用 Amazon CLI 命令 describe-db-clusters 或 RDS API 操作 DescribeDBClusters 查找数据库集群和读取器端点、数据库实例、数据库实例是否为读取器及其提升层。然后,您可以在故障转移后确认其实例类,并连接到适当的实例终端节点。

有关故障转移的更多信息,请参阅Aurora 数据库集群的容错能力