将 Amazon RDS 代理用于 Aurora - Amazon Aurora

将 Amazon RDS 代理用于 Aurora

通过使用 Amazon RDS 代理,您可以允许您的应用程序池化和共享数据库连接,以提高其扩展能力。RDS Proxy 通过在保留应用程序连接的同时自动连接到备用数据库实例,使应用程序能够更好地抵御数据库故障。使用 RDS Proxy 还使您能够为数据库强制执行 AWS Identity and Access Management (IAM) 身份验证,并将凭证安全地存储在 AWS Secrets Manager。

使用 RDS 代理,您可以处理不可预测的数据库流量突增。否则,这些突增情况可能会由于超额订阅连接或快速创建新连接而导致问题。RDS 代理建立数据库连接池,并重用该池中的连接。这种方法可避免每次打开新数据库连接所产生的内存和 CPU 开销。要防止数据库超额订阅,您可以控制创建的数据库连接数。

RDS 代理对无法立即从连接池提供服务的应用程序连接进行排队或限制。尽管延迟可能会增加,但您的应用程序可以继续扩展,而不会导致数据库突然出现故障或不堪重负。如果连接请求超出您指定的限制,则 RDS Proxy 会拒绝应用程序连接(即,减轻负载)。与此同时,它为 RDS 可通过可用容量提供服务的负载维护可预测的性能。

您可以减少处理凭证的开销,并为每个新连接建立安全连接。RDS Proxy 可以代表数据库处理其中的一些工作。

RDS Proxy 与它支持的引擎版本完全兼容。您可以在不更改代码的情况下为大多数应用程序启用 RDS Proxy。有关支持的引擎版本列表,请参阅支持 Amazon RDS 代理的区域和 Aurora 数据库引擎

区域和版本可用性

有关给定 AWS 区域中的 RDS 代理的数据库引擎版本支持和可用性的信息,请参阅 支持 Amazon RDS 代理的区域和 Aurora 数据库引擎

RDS 代理的配额和限制

以下配额和限制适用于 RDS 代理:

  • 每个 AWS 账户 ID 限制为 20 个代理。如果您的应用程序需要更多代理,请通过 AWS Management Console中的服务配额页面申请增加代理。在服务配额页面中,选择 Amazon Relational Database Service(Amazon RDS),然后找到代理以申请增加配额。AWS 可以自动增加您的配额,或者等待 AWS Support 审核您的申请。

  • 每个代理最多可拥有 200 个关联的 Secrets Manager 密钥。因此,每个代理可以在任何给定时间连接多达 200 个不同的用户账户。

  • 每个代理都具有一个默认端点。您还可以为每个代理添加最多 20 个代理端点。您可以创建、查看、修改和删除这些端点。

  • 在 Aurora 集群中,使用默认代理端点的所有连接都由 Aurora 写入器实例处理。要对读取密集型工作负载执行负载均衡,您可以为代理创建只读端点。该端点会将连接传递到集群的读取器端点。这样,您的代理连接就可以利用 Aurora 读取可扩展性。有关更多信息,请参阅“代理终端节点概述”。

  • 您可以将 RDS 代理用于 Aurora Serverless v2 集群,但不能用于 Aurora Serverless v1 集群。

  • 您的 RDS 代理必须与数据库位于同一 Virtual Private Cloud (VPC) 中。代理无法公开访问,但数据库可以。例如,如果在本地主机上进行数据库原型设计,则无法连接到代理,除非设置必要的网络要求来允许连接到代理。这是因为您的本地主机不在代理的 VPC 范围内。

    注意

    对于 Aurora 数据库集群,您可以启用跨 VPC 访问。为此,请为代理创建额外的端点,并为该端点指定其他 VPC、子网和安全组。有关更多信息,请参阅访问 VPC 中的 Aurora 数据库

  • 您不能将 RDS Proxy 用于其租户设置为 dedicated 的 VPC。

  • 如果您将 RDS 代理与启用了 IAM 身份验证的 Aurora 数据库集群结合使用,请检查用户身份验证。通过代理连接的用户必须通过登录凭证进行身份验证。有关 RDS 代理中 Secrets Manager 和 IAM 支持的详细信息,请参阅在 AWS Secrets Manager 中设置 RDS 代理的数据库凭证设置 RDS 代理的 AWS Identity and Access Management(IAM)策略

  • 使用 SSL 主机名验证时,不能将 RDS 代理与自定义 DNS 一起使用。

  • 每个代理都可以与单个目标数据库集群相关联。不过,您可以将多个代理与同一个数据库集群关联。

  • 文本大小大于 16 KB 的任何语句都会导致代理将会话固定到当前连接。

  • 某些区域在创建代理时需要考虑可用区(AZ)限制。美国东部(弗吉尼亚州北部)区域在 use1-az3 可用区中不支持 RDS 代理。美国西部(加利福尼亚北部)区域在 usw1-az2 可用区中不支持 RDS 代理。如果在创建代理时选择子网,请确保不要在上述可用区中选择子网。

  • 目前,RDS 代理不支持任何全局条件上下文键。

    有关全局条件上下文键的更多信息,请参阅《IAM 用户指南》中的 AWS 全局条件上下文键

  • 不能将 RDS 代理与 RDS Custom for SQL Server 一起使用。

  • 要将任何数据库参数组修改反映到您的代理,需要重启实例,即使您选择立即应用更改也不例外。对于集群级参数,需要在集群范围内重启。

有关每个数据库引擎的更多信息,请参阅下面几节:

Aurora MySQL 的额外限制

以下附加限制应用于适用于 Aurora MySQL 数据库的 RDS 代理:

  • RDS 代理不支持 MySQL sha256_passwordcaching_sha2_password 身份验证插件。这些插件将对用户账户密码实施 SHA-256 哈希处理。

  • 目前,所有代理均在端口 3306 上侦听 MySQL。代理仍使用您在数据库设置中指定的端口连接到您的数据库。

  • 不能将 RDS Proxy 与 EC2 实例中自行管理的 MySQL 数据库一起使用。

  • 您不能将 RDS Proxy 与数据库参数组中的 read_only 参数设置为 1 的 RDS for MySQL 数据库实例一起使用。

  • RDS Proxy 不支持 MySQL 压缩模式。例如,它不支持 mysql 命令的 --compress-C 选项使用的压缩。

  • 当 RDS 代理重用相同的数据库连接运行其他查询时,处理 GET DIAGNOSTIC 命令的数据库连接可能会返回不准确的信息。当 RDS 代理多路复用数据库连接时,可能会发生这种情况。

  • 某些 SQL 语句和函数(如 SET LOCAL)可以更改连接状态而不会引起固定。有关最新的固定行为,请参阅 避免固定 RDS 代理

  • 不支持在多语句查询中使用 ROW_COUNT() 函数。

  • RDS 代理不支持无法在一个 TLS 记录中处理多条响应消息的客户端应用程序。

重要

对于与 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 子句一起使用。

  • RDS 代理目前不支持流式复制模式。

重要

对于适用于 PostgreSQL 数据库的现有代理,如果您将数据库身份验证修改为仅使用 SCRAM,代理将在长达 60 秒的时间内不可用。要避免此问题,请执行以下操作之一:

  • 确保数据库同时允许 SCRAMMD5 身份验证。

  • 要仅使用 SCRAM 身份验证,请创建一个新代理,将应用程序流量迁移到新代理,然后删除先前与数据库关联的代理。