使用 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 代理端点具有以下限制:
-
每个代理都有一个默认终端节点,您可以修改但不能创建或删除默认终端节点。
-
代理的用户定义终端节点的最大数量为 20 个。因此,代理最多可以有 21 个终端节点:默认终端节点加上您创建的 20 个终端节点。
-
当您将其他终端节点与代理关联时,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 终端节点:
-
创建两个 VPC,或者选择已用于 RDS 工作的两个 VPC。每个 VPC 都应该有自己的关联网络资源,例如互联网网关、路由表、子网和安全组。如果您只有一个 VPC,可以查阅 开始使用 Amazon RDS,了解设置另一个 VPC 以成功使用 RDS 的步骤。您还可以查看 Amazon EC2 控制台中的现有 VPC,以了解要将哪些类型的资源连接起来。
-
创建一个与要连接到的 Amazon RDS 数据库实例关联的数据库代理。按照 创建 RDS 代理 中的过程操作。
-
在 RDS 控制台中的代理的 Details(详细信息)页面上,在 Proxy endpoints(代理终端节点)部分下,选择 Create endpoint(创建终端节点)。按照 创建代理终端节点 中的过程操作。
-
选择将跨 VPC 终端节点设置为读/写还是只读。
-
不接受默认的与 Amazon RDS 数据库实例使用相同的 VPC,而是选择其它 VPC。此 VPC 必须与代理所在的 VPC 位于同一 AWS 区域中。
-
现在不接受来自 Amazon RDS 数据库实例所在 VPC 中的默认子网和安全组,而是进行新的选择。根据您选择的 VPC 中的子网和安全组进行这些选择。
-
您无需更改 Secrets Manager 密钥的任何设置。相同的凭证适用于代理的所有终端节点,无论每个终端节点位于哪个 VPC 中均是如此。
-
等待新终端节点达到 Available(可用)状态。
-
记下终端节点的完整名称。这是以
为结尾的值,您提供此值作为数据库应用程序连接字符串的一部分。Region_name
.rds.amazonaws.com -
从与该终端节点位于同一 VPC 中的资源访问新的终端节点。测试此过程的一种简单方法是在此 VPC 中创建一个新的 EC2 实例。然后,登录 EC2 实例并运行
mysql
或psql
命令,以使用连接字符串中的端点值进行连接。