将 Amazon RDS 代理用于 Aurora
通过使用 Amazon RDS Proxy,您可以允许您的应用程序池化和共享数据库连接,以提高其扩展能力。RDS Proxy 通过在保留应用程序连接的同时自动连接到备用数据库实例,使应用程序能够更好地抵御数据库故障。使用 RDS Proxy 还使您能够为数据库强制执行 Amazon Identity and Access Management (IAM) 身份验证,并将凭证安全地存储在 Amazon Secrets Manager。
使用 RDS 代理,您可以处理不可预测的数据库流量突增。否则,这种突增情况可能会由于超额订阅连接或快速创建新连接而导致问题。RDS 代理建立数据库连接池,并重用该池中的连接。这种方法可避免每次打开新数据库连接所产生的内存和 CPU 开销。要防止数据库超额订阅,您可以控制创建的数据库连接数。
RDS Proxy 对无法立即从连接池提供服务的应用程序连接进行排队或限制。尽管延迟可能会增加,但您的应用程序可以继续扩展,而不会导致数据库突然出现故障或不堪重负。如果连接请求超出您指定的限制,则 RDS Proxy 会拒绝应用程序连接(即,减轻负载)。与此同时,它为通过可用容量提供服务的负载维护可预测的性能。
您可以减少处理凭证的开销,并为每个新连接建立安全连接。RDS Proxy 可以代表数据库处理其中的一些工作。
RDS Proxy 与它支持的引擎版本完全兼容。您可以在不更改代码的情况下为大多数应用程序启用 RDS Proxy。有关支持的引擎版本列表,请参阅Amazon RDS 代理。
主题
区域和版本可用性
有关给定 Amazon Web Services 区域中的 RDS 代理的数据库引擎版本支持和可用性的信息,请参阅 Amazon RDS 代理。
RDS 代理的配额和限制
以下配额和限制适用于 RDS 代理:
-
每个 Amazon 账户 ID 最多可拥有 20 个代理。如果您的应用程序需要更多代理,您可以通过向 Amazon Support 组织开立票证来请求其他代理。
-
每个代理最多可拥有 200 个关联的 Secrets Manager 密钥。因此,每个代理可以在任何给定时间连接多达 200 个不同的用户账户。
-
对于每个代理,您最多可以创建、查看、修改和删除 20 个终端节点。这些终端节点是对自动为每个代理创建的默认终端节点的补充。
-
在 Aurora 集群中,使用默认代理终端节点的所有连接都由 Aurora 写入器实例处理。要对读取密集型工作负载执行负载均衡,您可以为代理创建只读终端节点。该终端节点会将连接传递到集群的读取器终端节点。这样,您的代理连接就可以利用 Aurora 读取可扩展性。有关更多信息,请参阅“代理终端节点概述”。
对于复制配置中的 RDS 数据库实例,您只能将代理与写入器数据库实例关联,而不能与只读副本关联。
-
您可以将 RDS 代理用于 Aurora Serverless v2 集群,但不能用于 Aurora Serverless v1 集群。
-
您的 RDS 代理必须与数据库位于同一 Virtual Private Cloud (VPC) 中。代理无法公开访问,但数据库可以。例如,如果在本地主机上进行原型设计,则无法连接到 RDS 代理,除非设置专用网络。这种情况是因为您的本地主机不在代理的 VPC 范围内。
注意 对于 Aurora 数据库集群,您可以启用跨 VPC 访问。为此,请为代理创建额外的端点,并为该端点指定其他 VPC、子网和安全组。有关更多信息,请参阅访问 VPC 中的 Aurora和 RDS 数据库。
-
您不能将 RDS Proxy 用于其租户设置为
dedicated
的 VPC。 -
如果您将 RDS 代理与启用了 IAM 身份验证的 RDS 数据库实例或 Aurora 数据库集群结合使用,请检查用户身份验证。确保通过代理连接的所有用户都通过用户名和密码进行身份验证。有关 RDS 代理中的 IAM 支持的详细信息,请参阅 设置 Amazon Identity and Access Management (IAM) 策略。
-
不能将 RDS Proxy 与自定义 DNS 一起使用。
-
每个代理都可以与单个目标数据库实例或集群相关联。不过,您可以将多个代理与同一个数据库实例或集群关联。
文本大小大于 16 KB 的任何语句都会导致代理将会话固定到当前连接。
有关每个数据库引擎的更多信息,请参阅下面几节:
Aurora MySQL 的额外限制
以下附加限制应用于适用于 Aurora MySQL 数据库的 RDS 代理:
RDS 代理不支持 MySQL
sha256_password
和caching_sha2_password
身份验证插件。这些插件将对用户账户密码实施 SHA-256 哈希处理。-
目前,所有代理均在端口 3306 上侦听 MySQL。代理仍使用您在数据库设置中指定的端口连接到您的数据库。
-
不能将 RDS Proxy 与 EC2 实例中自行管理的 MySQL 数据库一起使用。
-
您不能将 RDS Proxy 与数据库参数组中的
read_only
参数设置为1
的 RDS for MySQL 数据库实例一起使用。 -
RDS Proxy 不支持 MySQL 压缩模式。例如,它不支持
mysql
命令的--compress
或-C
选项使用的压缩。 -
某些 SQL 语句和函数可以更改连接状态而不会引起固定。有关最新的固定行为,请参阅 避免固定。
对于与 MySQL 数据库关联的代理,请勿在初始化查询中将配置参数 sql_auto_is_null
设置为 true
或非零值。否则,可能会导致不正确的应用程序行为。
Aurora PostgreSQL 的额外限制
以下附加限制应用于适用于 Aurora PostgreSQL 数据库的 RDS 代理:
RDS Proxy 不支持 PostgreSQL 的会话固定筛选条件。
-
目前,所有代理均在端口 5432 上侦听 PostgreSQL。
-
对于 PostgreSQL,RDS Proxy 目前不支持通过发出
CancelRequest
来取消来自客户端的查询。例如,使用 Ctrl+C 取消交互式 psql 会话中长时间运行的查询时,就会出现这种情况。 -
PostgreSQL 函数 lastval
的结果并不总是准确的。作为解决方法,请将 INSERT 语句与 RETURNING
子句一起使用。 -
客户端应用程序驱动程序使用 PostgreSQL 扩展查询协议时,RDS Proxy 不会进行多路复用连接。
RDS 代理目前不支持流式复制模式。
对于适用于 PostgreSQL 数据库的现有代理,如果您将数据库身份验证修改为仅使用 SCRAM
,代理将在长达 60 秒的时间内不可用。要避免此问题,请执行以下操作之一:
确保数据库同时允许
SCRAM
和MD5
身份验证。要仅使用
SCRAM
身份验证,请创建一个新代理,将应用程序流量迁移到新代理,然后删除先前与数据库关联的代理。