使用 Amazon RDS Proxy 终端节点 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon RDS Proxy 终端节点

了解 RDS 代理的终端节点以及使用方法。通过使用代理端点,您可以利用以下功能:

  • 您可以将多个终端节点与代理结合使用,以独立地监视来自不同应用程序的连接并对其进行故障排除。

  • 您可以使用跨 VPC 终端节点来允许从资源(如其他 VPC 中的 Amazon EC2 实例)访问一个 VPC 中的数据库。

代理终端节点概述

使用 RDS 代理终端节点所涉及的过程与使用 RDS 实例终端节点相同。如果您不熟悉 RDS 终端节点,请参阅连接到运行 MySQL 数据库引擎的数据库实例连接到运行 PostgreSQL 数据库引擎的数据库实例以了解更多信息。

对于您创建的代理终端节点,您还可以将终端节点与代理本身使用的其他 Virtual Private Cloud (VPC) 关联。这样,您可以从其他 VPC 连接到代理,例如,组织内其他应用程序使用的 VPC。

有关与代理终端节点关联的限制的信息,请参阅 代理端点的限制

在 RDS Proxy 日志中,每个条目都以关联的代理终端节点的名称作为前缀。此名称可以是您为用户定义的端点指定的名称。或者,对于执行读/写请求的代理的默认端点,它可以是特殊名称 default

每个代理终端节点都有自己的 CloudWatch 指标集合。您可以监视代理的所有终端节点的指标。您还可以监视特定终端节点或代理的所有读/写或只读终端节点的指标。有关更多信息,请参阅“使用 Amazon CloudWatch 监控 RDS Proxy 指标”。

代理终端节点使用与其关联的代理相同的身份验证机制。RDS Proxy 会自动为用户定义的终端节点设置权限和授权,并与关联代理的属性保持一致。

多可用区数据库集群的代理终端节点

默认情况下,在将 RDS 代理与多可用区数据库集群结合使用时所连接的终端节点具有读/写功能。因此,此端点会将所有请求发送到集群的写入器实例。所有这些连接都计入写入器实例的 max_connections 值。如果您的代理与多可用区数据库集群关联,您可以为该代理创建额外的读/写或只读终端节点。

您可以将只读端点与代理一起用于只读查询。使用方式与将读取器终端节点用于多可用区数据库集群的方式相同。这样做有助于您利用具有一个或多个读取器数据库实例的多可用区数据库集群的读取可扩展性。通过使用只读终端节点并根据需要向多可用区数据库集群中添加更多读取器数据库实例,您可以同时运行更多的查询并同时建立更多的连接。这些读取器终端节点有助于提高查询密集型应用程序的读取可扩展性。如果集群中的读取器数据库实例变得不可用,读取器终端节点还有助于提高连接的可用性。

多可用区数据库集群的读取器终端节点

通过 RDS Proxy,您可以创建和使用读取器终端节点。但是,这些终端节点仅适用于与多可用区数据库集群关联的代理。如果您使用 RDS CLI 或 API,则可能会看到值为 TargetRole 的属性 READ_ONLY。您可以通过将代理的目标从 RDS 数据库实例更改为多可用区数据库集群来利用此类代理。

在将 RDS 代理与多可用区数据库集群结合使用时,可以创建并连接到称为读取器终端节点的只读终端节点。

读取器终端节点如何帮助提高应用程序可用性

在某些情况下,集群中的读取器实例可能会变得不可用。如果发生这种情况,使用数据库代理的读取器终端节点的连接比使用多可用区数据库集群读取器终端节点的连接恢复得更快。RDS 代理仅将连接路由到集群中的可用读取器实例。当实例变为不可用时,不会由于 DNS 缓存而造成延迟。

如果连接是多路复用的,则 RDS 代理会将后续查询定向到其它读取器实例,而不会中断您的应用程序。如果读取器实例处于不可用状态,则与该实例终端节点的所有客户端连接都将关闭。

如果连接是固定的,则该连接中的下一个查询将返回错误。但是,您的应用程序可以立即重新连接到同一代理端点。RDS Proxy 会将连接路由到处于 available 状态的其他读取器数据库实例。在手动重新连接时,RDS 代理不会检查新旧读取器实例之间的复制滞后。

如果您的多可用区数据库集群没有可用的读取器实例,则 RDS 代理会尝试在某个读取器终端节点可用时尝试连接到该终端节点。如果在连接借用超时期间没有读取器实例变为可用,则连接尝试将失败。如果读取器实例变为可用,则连接尝试成功。

读取器终端节点如何帮助提高查询可扩展性

代理的读取器终端节点通过以下方式帮助提高多可用区数据库集群查询可扩展性:

  • 在可行的情况下,RDS Proxy 使用特定的读取器终端节点连接对所有查询问题使用相同的读取器数据库实例。这样,对相同表的一组相关查询就可以利用特定数据库实例上的缓存、计划优化等优势。

  • 如果读取器数据库实例变为不可用,则对应用程序的影响取决于会话是多路复用的还是固定的。如果会话是多路复用的,则 RDS Proxy 会将所有后续查询路由到其他读取器数据库实例,而无需您执行任何操作。如果会话是固定的,则您的应用程序将出现错误,必须重新连接。您可以立即重新连接到读取器终端节点,RDS Proxy 会将连接路由到可用的读取器数据库实例。有关代理会话的多路复用和固定的更多信息,请参阅 RDS Proxy 概念概述

访问 VPC 中的 RDS 数据库

默认情况下,RDS 技术堆栈的组件都在同一个 Amazon VPC 中。例如,假设一个在 Amazon EC2 实例上运行的应用程序连接到 Amazon RDS 数据库实例。在这种情况下,应用程序服务器和数据库必须都位于同一 VPC 内。

通过 RDS 代理,您可以设置从一个 VPC 中的资源(例如,EC2 实例)访问另一个 VPC 中的 Amazon RDS 数据库实例。例如,您的组织可能有多个应用程序访问同一数据库资源。每个应用程序都可能位于自己的 VPC 中。

要启用跨 VPC 访问,您需要为代理创建一个新的终端节点。代理本身与 Amazon RDS 数据库实例位于同一个 VPC 中。但是,跨 VPC 终端节点与 EC2 实例等其他资源一起位于另一个 VPC 中。跨 VPC 终端节点与 EC2 和其他资源所在的 VPC 中的子网和安全组关联。通过这些关联,您可以从原本由于 VPC 限制而无法访问数据库的应用程序连接到终端节点。

以下步骤说明了如何通过 RDS Proxy 创建和访问跨 VPC 终端节点:

  1. 创建两个 VPC,或者选择已用于 RDS 工作的两个 VPC。每个 VPC 都应该有自己的关联网络资源,例如互联网网关、路由表、子网和安全组。如果您只有一个 VPC,可以查阅 开始使用 Amazon RDS,了解设置另一个 VPC 以成功使用 RDS 的步骤。您还可以查看 Amazon EC2 控制台中的现有 VPC,以了解要将哪些类型的资源连接起来。

  2. 创建一个与要连接到的 Amazon RDS 数据库实例关联的数据库代理。按照 创建 RDS 代理 中的过程操作。

  3. 在 RDS 控制台中的代理的 Details(详细信息)页面上,在 Proxy endpoints(代理终端节点)部分下,选择 Create endpoint(创建终端节点)。按照 创建代理终端节点 中的过程操作。

  4. 选择将跨 VPC 终端节点设置为读/写还是只读。

  5. 不接受默认的与 Amazon RDS 数据库实例使用相同的 VPC,而是选择其它 VPC。此 VPC 必须与代理所在的 VPC 位于同一 Amazon 区域中。

  6. 现在不接受来自 Amazon RDS 数据库实例所在 VPC 中的默认子网和安全组,而是进行新的选择。根据您选择的 VPC 中的子网和安全组进行这些选择。

  7. 您无需更改 Secrets Manager 密钥的任何设置。相同的凭证适用于代理的所有终端节点,无论每个终端节点位于哪个 VPC 中均是如此。

  8. 等待新终端节点达到 Available(可用)状态。

  9. 记下终端节点的完整名称。这是以 Region_name.rds.amazonaws.com 为结尾的值,您提供此值作为数据库应用程序连接字符串的一部分。

  10. 从与该终端节点位于同一 VPC 中的资源访问新的终端节点。测试此过程的一种简单方法是在此 VPC 中创建一个新的 EC2 实例。然后,登录 EC2 实例并运行 mysqlpsql 命令,以使用连接字符串中的端点值进行连接。

创建代理终端节点

创建代理端点
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Proxies (代理)

  3. 单击您要为其创建新终端节点的代理的名称。

    此时将显示该代理的详细信息页面。

  4. Proxy endpoints(代理终端节点)部分中,选择 Create proxy endpoint(创建代理终端节点)

    此时将显示 Create proxy endpoint(创建代理终端节点)窗口。

  5. 对于 Proxy endpoint name(代理终端节点名称),输入您选择的描述性名称。

  6. 对于 Target role(目标角色),选择将终端节点设置为读/写还是只读。

    使用读/写端点的连接可以执行任何类型的操作,如数据定义语言(DDL)语句、数据操作语言(DML)语句和查询。这些终端节点始终连接到 RDS 数据库集群的主实例。仅在应用程序中使用单个终端节点时,可以将读/写终端节点用于常规数据库操作。您还可以将读/写终端节点用于管理操作、联机事务处理 (OLTP) 应用程序和提取-转换-加载 (ETL) 作业。

    使用只读终端节点的连接只能执行查询。RDS 代理可以为终端节点的每个连接使用其中一个读取器实例。这样,查询密集型应用程序就可以利用多可用区数据库集群的集群功能。这些只读连接不会在集群的主实例上增加任何开销。这样,您的报告和分析查询就不会减慢 OLTP 应用程序的写入操作。

  7. 对于虚拟私有云(VPC),选择默认值,以便从您通常用于访问代理或其关联数据库的同一 EC2 实例或其它资源访问端点。要为此代理设置跨 VPC 访问,请选择原定设置值以外的 VPC。有关跨 VPC 访问的更多信息,请参阅 访问 VPC 中的 RDS 数据库

  8. 对于子网,预设情况下,RDS Proxy 会填充与关联代理相同的子网。要限制对端点的访问,以便只有 VPC 的地址范围的一部分能够与其连接,请删除一个或多个子网。

  9. 对于 VPC security group (VPC 安全组),您可以选择现有安全组或创建新安全组。默认情况下,RDS Proxy 会填充与关联代理相同的一个或多个安全组。如果代理的入站和出站规则适用于此端点,则保留默认选项。

    如果选择创建新的安全组,请在此页面上为该安全组指定一个名称。然后,从 EC2 控制台编辑安全组设置。

  10. 选择 Create proxy endpoint(创建代理终端节点)

要创建代理终端节点,请使用 Amazon CLIcreate-db-proxy-endpoint 命令。

包括以下必需参数:

  • --db-proxy-name value

  • --db-proxy-endpoint-name value

  • --vpc-subnet-ids list_of_ids。用空格分隔子网 ID。您无需指定 VPC 本身的 ID。

您还可以包括以下可选参数:

  • --target-role { READ_WRITE | READ_ONLY }此参数默认为 READ_WRITE。当代理与仅包含写入器数据库实例的多可用区数据库集群相关联时,您不能指定 READ_ONLY。有关将只读端点与多可用区数据库集群结合使用的详细信息,请参阅 多可用区数据库集群的读取器终端节点

  • --vpc-security-group-ids value。用空格分隔安全组 ID。如果省略此参数,则 RDS Proxy 使用 VPC 的默认安全组。RDS Proxy 根据您为 --vpc-subnet-ids 参数指定的子网 ID 确定 VPC。

下面的示例用于创建一个名为 my-endpoint 的代理终端节点。

对于 Linux、macOS 或 Unix:

aws rds create-db-proxy-endpoint \ --db-proxy-name my-proxy \ --db-proxy-endpoint-name my-endpoint \ --vpc-subnet-ids subnet_id subnet_id subnet_id ... \ --target-role READ_ONLY \ --vpc-security-group-ids security_group_id ]

对于 Windows:

aws rds create-db-proxy-endpoint ^ --db-proxy-name my-proxy ^ --db-proxy-endpoint-name my-endpoint ^ --vpc-subnet-ids subnet_id_1 subnet_id_2 subnet_id_3 ... ^ --target-role READ_ONLY ^ --vpc-security-group-ids security_group_id

要创建代理端点,请使用 RDS API CreateDBProxyEndpoint 操作。

查看代理终端节点

查看代理终端节点的详细信息
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Proxies (代理)

  3. 在列表中,选择要查看其终端节点的代理。单击代理名称以查看其详细信息页面。

  4. Proxy endpoints(代理终端节点)部分中,选择要查看的终端节点。单击其名称以查看详细信息页面。

  5. 检查您对其值感兴趣的参数。您可以检查以下属性:

    • 终端节点是读/写还是只读。

    • 您在数据库连接字符串中使用的终端节点地址。

    • 与终端节点关联的 VPC、子网和安全组。

要查看一个或多个代理端点,请使用 Amazon CLI describe-db-proxy-endpoints 命令。

您可以包括以下参数:

  • --db-proxy-endpoint-name

  • --db-proxy-name

以下示例描述了 my-endpoint 代理终端节点:

对于 Linux、macOS 或 Unix:

aws rds describe-db-proxy-endpoints \ --db-proxy-endpoint-name my-endpoint

对于 Windows:

aws rds describe-db-proxy-endpoints ^ --db-proxy-endpoint-name my-endpoint

要描述一个或多个代理终端节点,请使用 RDS API DescribeDBProxyEndpoints 操作。

修改代理终端节点

修改一个或多个代理终端节点
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Proxies (代理)

  3. 在列表中,选择要修改其终端节点的代理。单击代理名称以查看其详细信息页面。

  4. Proxy endpoints(代理终端节点)部分中,选择要修改的终端节点。您可以在列表中选择它,也可以单击其名称以查看详细信息页面。

  5. 在代理详细信息页面上的 Proxy endpoints(代理终端节点)部分中,选择 Edit(编辑)。或者,在代理端点详细信息页面上,对操作,选择编辑

  6. 更改要修改的参数的值。

  7. 选择保存更改

要修改代理端点,请使用 Amazon CLI modify-db-proxy-endpoint 命令和以下必需参数:

  • --db-proxy-endpoint-name

使用以下一个或多个参数指定对终端节点属性的更改:

  • --new-db-proxy-endpoint-name

  • --vpc-security-group-ids。用空格分隔安全组 ID。

以下示例用于将 my-endpoint 代理终端节点重命名为 new-endpoint-name

对于 Linux、macOS 或 Unix:

aws rds modify-db-proxy-endpoint \ --db-proxy-endpoint-name my-endpoint \ --new-db-proxy-endpoint-name new-endpoint-name

对于 Windows:

aws rds modify-db-proxy-endpoint ^ --db-proxy-endpoint-name my-endpoint ^ --new-db-proxy-endpoint-name new-endpoint-name

要修改代理终端节点,请使用 RDS API ModifyDBProxyEndpoint 操作。

删除代理终端节点

您可以按照以下说明使用控制台删除代理的终端节点。

注意

您无法删除 RDS 代理自动为每个代理创建的默认代理端点。

删除代理时,RDS Proxy 会自动删除所有关联的终端节点。

使用 Amazon Web Services Management Console 删除代理终端节点
  1. 在导航窗格中,选择 Proxies (代理)

  2. 在列表中,选择要删除其终端节点的代理。单击代理名称以查看其详细信息页面。

  3. Proxy endpoints(代理终端节点)部分中,选择要删除的终端节点。您可以在列表中选择一个或多个终端节点,或单击单个终端节点的名称以查看详细信息页面。

  4. 在代理详细信息页面上的 Proxy endpoints(代理终端节点)部分中,选择 Delete(删除)。或者,在代理端点详细信息页面上,对于操作,选择编辑

要删除代理终端节点,请运行 delete-db-proxy-endpoint 命令并包含以下必需参数:

  • --db-proxy-endpoint-name

以下命令用于删除名为 my-endpoint 的代理终端节点。

对于 Linux、macOS 或 Unix:

aws rds delete-db-proxy-endpoint \ --db-proxy-endpoint-name my-endpoint

对于 Windows:

aws rds delete-db-proxy-endpoint ^ --db-proxy-endpoint-name my-endpoint

要使用 RDS API 删除代理终端节点,请运行 DeleteDBProxyEndpoint 操作。对于 DBProxyEndpointName 参数,指定代理终端节点的名称。

代理端点的限制

RDS 代理端点具有以下限制:

  • 每个代理都有一个默认终端节点,您可以修改但不能创建或删除默认终端节点。

  • 代理的用户定义终端节点的最大数量为 20 个。因此,代理最多可以有 21 个终端节点:默认终端节点加上您创建的 20 个终端节点。

  • 当您将其他终端节点与代理关联时,RDS Proxy 会自动确定集群中的哪些数据库实例用于每个终端节点。