Amazon Aurora
Aurora 用户指南

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-123456789012.us-east-1.rds.amazonaws.com:3306

读取器终端节点

Aurora 数据库集群的读取器终端节点 连接到该数据库集群的可用 Aurora 副本之一。每个 Aurora 数据库集群均有一个读取器终端节点。如果有多个 Aurora 副本,则读取器终端节点会将每个连接请求定向到 Aurora 副本之一。

读取器终端节点为数据库集群的只读连接提供负载均衡支持。对读取操作 (如查询) 使用读取器终端节点。不能对写入操作使用读取器终端节点。

数据库集群在可用 Aurora 副本之间分配对读取器终端节点的连接请求。如果数据库集群只包含主数据库实例,则读取器终端节点从主数据库实例为连接请求提供服务。如果为该数据库集群创建了一个或多个 Aurora 副本,则后续与读取器终端节点的连接将在各个副本之间进行负载均衡。

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

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

自定义终端节点

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

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

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

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

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

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

myendpoint.cluster-custom-123456789012.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.123456789012.us-east-1.rds.amazonaws.com:3306

查看 Aurora 集群的终端节点

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

利用 AWS CLI,您会在 describe-db-clusters 命令的输出中看到终端节点。

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

使用集群终端节点

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

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

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

使用读取器终端节点

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

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

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

使用自定义终端节点

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

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

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

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

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

endpointName.cluster-custom-customerDnsIdentifier.dnsSuffix

由于自定义终端节点名称不包含集群的名称,因此,如果您重命名集群,则不必更改这些名称。您不能为同一区域中的多个集群重用相同的自定义终端节点名称。为每个自定义终端节点指定一个名称,该名称在特定区域内的用户 ID 所拥有的集群中是唯一的。

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

  • 仅作为只读 Aurora 副本的数据库实例可以是 READER 自定义终端节点的一部分。READER 类型仅适用于使用单主副本复制的集群,因为这些集群可以包含多个只读数据库实例。

  • 只读 Aurora 副本和读写主实例都可以是 ANY 自定义终端节点的一部分。Aurora 将与类型为 ANY 的集群终端节点的连接等概率地定向到任何关联的数据库实例。由于您无法事先确定是否连接到只读 Aurora 副本的主实例,因此,请仅将此类终端节点用于只读连接。ANY 类型适用于使用任意复制拓扑的集群。

  • WRITER 类型仅适用于多主集群,因为这些集群可以包含多个读写数据库实例。

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

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

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

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

在 AWS 管理控制台 中,该选项由 Attach future instances added to this cluster (挂载以后添加到此集群的实例) 复选框表示。如果清除该复选框,则自定义终端节点将使用仅包含对话框中指定的数据库实例的静态列表。选中此复选框后,自定义终端节点将使用排除列表。在这种情况下,自定义终端节点表示集群中的所有数据库实例(包括您将来添加的任何实例),但在对话框中未选中的实例除外。AWS CLI 和 Amazon RDS API 具有表示每种列表的参数。在使用 AWS CLI 或 Amazon RDS API 时,您无法在列表中添加或删除单个成员;您始终指定整个新列表。

当数据库实例由于故障转移或升级而更改主实例和 Aurora 副本之间的角色时,Aurora 不会更改这些列表中指定的数据库实例。例如,类型为 READER 的自定义终端节点可能包含一个数据库实例,它是一个 Aurora 副本,然后被提升为主实例。但是,只有当数据库实例具有与自定义终端节点类型(READERWRITERANY)兼容的角色时,才能通过自定义终端节点连接到该数据库实例。

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

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

管理自定义终端节点

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

注意

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

要从 AWS 管理控制台中使用自定义终端节点,您可以导航到 Aurora 集群的详细信息页,并使用 Custom Endpoints (自定义终端节点) 部分下的控件。

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

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

创建自定义终端节点

控制台

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

无法在 AWS 管理控制台 中选择自定义终端节点类型 ANYREADER。通过 AWS 管理控制台 创建的所有自定义终端节点都具有类型 ANY

AWS CLI

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

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

针对 Linux、OS X 或 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

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

查看自定义终端节点

控制台

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

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

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

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

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

AWS CLI

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

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

针对 Linux、OS X 或 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 命令的一些示例输出。WRITERREADEREndpointType 表示集群的内置读写终端节点和只读终端节点。CUSTOMEndpointType 表示您创建的终端节点并选择关联的数据库实例。其中一个终端节点具有非空 StaticMembers 字段,表示它与一组精确的数据库实例相关联。另一个终端节点有一个非空 ExcludedMembers 字段,表示终端节点与 ExcludedMembers 下列出的数据库实例之外 的所有数据库实例相关联。当您将新实例添加到集群时,第二种自定义终端节点会增长以容纳这些新实例。

{ "DBClusterEndpoints": [ { "Endpoint": "custom-endpoint-demo.cluster-123456789012.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo", "EndpointType": "WRITER" }, { "Endpoint": "custom-endpoint-demo.cluster-ro-123456789012.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-123456789012.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

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

编辑自定义终端节点

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

当编辑操作的更改正在进行中时,您无法连接或使用自定义终端节点。在终端节点状态返回 Available (可用) 并且您可以再次连接之前,可能需要几分钟时间。

控制台

要使用 AWS 管理控制台编辑自定义终端节点,您可以在集群详细信息页面上选择终端节点,或显示终端节点的详细信息页面,然后选择 Edit (编辑) 操作。

AWS CLI

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

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

针对 Linux、OS X 或 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

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

删除自定义终端节点

控制台

要使用 AWS 管理控制台删除自定义终端节点,请转到集群详细信息页面,选择相应的自定义终端节点,然后选择 Delete (删除) 操作。

AWS CLI

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

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

针对 Linux、OS X 或 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

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

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

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

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

aws rds create-db-cluster --db-cluster-identifier custom-endpoint-demo --engine aurora \ --engine-version 5.6.10a --master-username $MASTER_USER --master-user-password $MASTER_PW \ --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

较大的实例将保留以用于特殊类型的报告查询。为了使它们不太可能被提升为主实例,以下示例将其提升层更改为最低优先级。

for i in 09 10 do aws rds modify-db-instance --db-instance-id 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-123456789012.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-123456789012.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-123456789012.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:111122223333:cluster-endpoint:small-instances", "DBClusterEndpointResourceIdentifier": "cluster-endpoint-6RDDXQOC3AKKZT2PRD7ST37BMY", "CustomEndpointType": "ANY", "Endpoint": "small-instances.cluster-custom-123456789012.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-123456789012.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo" }, { "EndpointType": "READER", "Endpoint": "custom-endpoint-demo.cluster-ro-123456789012.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo" }, { "Endpoint": "small-instances.cluster-custom-123456789012.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-123456789012.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-123456789012.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-123456789012.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-123456789012.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-123456789012.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-123456789012.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-09 | +-------------------------+