如何排查 Amazon Aurora 连接问题?

上次更新日期:2022 年 12 月 16 日

在连接到运行 Amazon Aurora 的 Amazon Relational Database Service(Amazon RDS)集群或实例时,我遇到了问题。

简短描述

由于以下原因之一,您在连接到 Amazon Aurora 数据库集群或实例时可能会遇到问题:

  • Aurora 数据库集群或实例仍在创建过程中,尚未处于 available(可用)状态。
  • 数据库实例的安全组、ACL 或本地防火墙阻止了来自源实例或其 IP 地址的连接。
  • Amazon Virtual Private Cloud(Amazon VPC)子网的路由表不允许来自计算机或实例的流量。
  • 如果您使用公共互联网从本地计算机进行连接,则该实例可能无法在公有子网中公开访问。
  • DNS 名称解析失败。如果客户端未连接到正确的 Aurora 端点,则可能会发生这种情况。
  • Amazon RDS 数据库实例正在进行实例恢复或失效转移。如果底层硬件或数据库进程出现问题,则可能会发生这种情况。

解决方法

有关解决常见连接问题的帮助,请参阅如何解决连接至 Amazon RDS 数据库实例时遇到的问题?

对于 Aurora 数据库集群,请确保您的客户端连接到正确的端点。Amazon Aurora 属于托管式的服务,您必须使用 MySQL 或 PostgreSQL 客户端工具连接到 Aurora DNS 端点。

验证您与 Aurora 端点的连接

检查是否连接到正确的 Aurora 端点

要验证您的客户端当前正在连接的集群写入器、读取器和自定义端点,请执行以下步骤:

1.    打开 Amazon RDS 控制台

2.    从导航窗格中选择数据库

3.    从资源组中选择您的数据库集群。然后在 Connectivity & Security(连接和安全性)的端点部分下查看集群详细信息。

4.    使用 telnet/nc 命令验证端点连接:

telnet <RDS endpoint> <port number>
nc -vz <RDS endpoint> <port number>

telnet 的示例结果:

[root@ip-172-XX-X-XX ~]# telnet postgres.cluster-XXXXXXX.us-east-1.rds.amazonaws.com 5432
Trying 172.XX.X.XX...
Connected to postgres.cluster-XXXXXXX.us-east-1.rds.amazonaws.com.

netcat 的示例结果:

[root@ip-172-XX-X-XX ~]# nc -vz postgres.cluster-XXXXXXX.us-east-1.rds.amazonaws.com 5432
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 172.XX.X.XX:5432.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

5.    连接之后,根据您使用的引擎,通过运行以下命令来验证是否已连接到读取器端点或写入器端点:

"SHOW GLOBAL VARIABLES LIKE 'innodb_read_only';"  --> MySQL
"SHOW transaction_read_only;" --> PostgreSQL

查看 Amazon Aurora PostgreSQL 兼容版中的写入器和读取器的这些示例输出。

写入器:

postgres=> SHOW transaction_read_only;
 transaction_read_only
-----------------------
 off
(1 row)

读取器:

postgres=> SHOW transaction_read_only;
 transaction_read_only
-----------------------
 on
(1 row)

查看 Amazon Aurora MySQL 兼容版中的写入器和读取器的这些示例结果。

写入器:

SHOW GLOBAL VARIABLES LIKE 'innodb_read_only';
innodb_read_only | OFF

读取器:

SHOW GLOBAL VARIABLES LIKE 'innodb_read_only';
innodb_read_only | ON

如果变量设置为 ON,则表示您已连接到 Aurora 副本。如果变量设置为 OFF,则表示您已连接到主实例。

设置从 Amazon EC2 实例到数据库实例的自动连接

您可以从 Amazon Elastic Compute Cloud(Amazon EC2)实例建立与数据库实例的连接。为此,请使用 Amazon RDS 控制台中的 Set up EC2 connection option(设置 EC2 连接选项)。

在设置此连接之前,请确保 EC2 实例与数据库实例位于同一 VPC 中。如果在与数据库实例相同的 VPC 中没有 EC2 实例,则使用控制台在子网中启动一个新的 EC2 实例

确保要设置连接的用户具有正确的权限:

  • ec2:AuthorizeSecurityGroupEgress
  • ec2:AuthorizeSecurityGroupIngress
  • ec2:CreateSecurityGroup
  • ec2:DescribeInstances
  • ec2:DescribeNetworkInterfaces
  • ec2:DescribeSecurityGroups
  • ec2:ModifyNetworkInterfaceAttribute
  • ec2:RevokeSecurityGroupEgress

确认权限后,通过配置数据库实例来设置自动连接:

1.    打开 Amazon RDS 控制台

2.    从导航窗格中选择 Databases(数据库),然后选择您的数据库实例。如果您使用的是 Aurora 数据库,请改为选择集群。

3.    对于 Actions(操作),请选择 Set up EC2 connection(设置 EC2 连接)。

4.    在 Set up EC2 connection(设置 EC2 连接)页面上,选择要从中连接到数据库实例或集群的 EC2 实例。如果同一 VPC 中不存在 EC2 实例,则选择 Create EC2 instance(创建 EC2 实例)以创建一个。在这种情况下,请确保新的 EC2 实例与数据库实例或集群位于同一 VPC 中。

5.    选择 Continue(继续)。

6.    在 Review and confirm(检查并确认)页面上,查看 Amazon RDS 将进行的更改,以设置与 EC2 实例的连接。如果更改正确,则选择 Set up connection(设置连接)。