跳至内容

如何对连接到 Aurora PostgreSQL 兼容版数据库集群时出现的问题进行故障排除?

4 分钟阅读
0

我想对 Amazon Aurora PostgreSQL 兼容版数据库 (DB) 集群的连接问题进行故障排除。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

检查您配置的连接参数是否正确

完成以下步骤:

  1. 打开 Amazon Relational Database Service (Amazon RDS) 控制台
  2. 在导航窗格中,选择 Databases(数据库)。
  3. 选择 Aurora PostgreSQL 兼容版数据库集群。
  4. Connectivity & security(连接和安全性)选项卡中,记下以下值:<br id=hardline_break/> 写入器或读取器端点<br id=hardline_break/> 默认端口号 5432
  5. 验证您的数据库名称、用户名和密码是否正确。

要测试您的连接,请运行以下 psql 命令:

psql -h your-cluster-endpoint -p 5432 -U your-username -d your-database-name

**注意:**请将 your-cluster-endpoint 替换为您的集群端点,将 your-username 替换为您的数据库用户名,并将 your-database-name 替换为您的数据库名称。

测试网络连接

要验证您的客户端是否可以访问 Aurora PostgreSQL 兼容版数据库集群端点,请运行以下命令。

使用 telnet

运行以下 telnet 命令:

telnet your-cluster-endpoint 5432

**注意:**请将 your-cluster-endpoint 替换为您的集群端点。

如果连接成功,则输出类似于以下内容:

Trying xxx.xxx.xxx.xxx...
Connected to your-cluster-endpoint.

使用 netcat

如果 telnet 不可用,则运行以下 netcat 命令:

nc -zv your-cluster-endpoint 5432

**注意:**请将 your-cluster-endpoint 替换为您的集群端点。

如果连接成功,则输出类似于以下内容:

Connection to your-cluster-endpoint 5432 port [tcp/postgresql] succeeded!

如果上述命令超时或失败,则表示您存在网络连接问题。检查您是否配置了正确的安全组入站规则。

检查安全组的入站规则

完成以下步骤:

  1. 打开 Amazon RDS 控制台
  2. 在导航窗格中,选择 Databases(数据库)。
  3. 选择 Aurora PostgreSQL 兼容版数据库集群。
  4. Connectivity & security(连接和安全性)部分中,记下 VPC security groups(VPC 安全组)下的安全组名称。
  5. 打开 Amazon Virtual Private Cloud (Amazon VPC) 控制台
  6. 在导航窗格中,选择 Security groups(安全组)。
  7. 选择您的安全组。
  8. 选择 Inbound rules(入站规则)。
  9. 确认存在具有以下设置的规则:<br id=hardline_break/> 类型为 PostgreSQL 或自定义 TCP。<br id=hardline_break/> 端口为 5432。<br id=hardline_break/> 为客户端的 IP 地址或相应的 CIDR 块。

要使用 Amazon VPC 控制台向您的安全组添加入站规则,请参阅配置安全组规则

要使用 AWS CLI 添加入站规则,请运行以下 authorize-security-group-ingress 命令:

aws ec2 authorize-security-group-ingress \
  --group-id your-group-id \
  --protocol tcp \
  --port 5432 \
  --cidr your-IP-address/32 \
  --region your-region

**注意:**请将 your-group-id 替换为您的安全组 ID,将 your-IP-address/32 替换为您的 IP 地址或 CIDR 块,并将 your-region 替换为您的 AWS 区域。

检查 VPC 网络 ACL 入站规则

要检查您的网络 ACL 规则,请完成以下步骤:

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中,选择 Network ACLs(网络 ACL)。
  3. 选择与您的数据库子网关联的网络 ACL。
  4. 选择 Inbound rules(入站规则)选项卡。
  5. 确认存在具有以下设置的规则:<br id=hardline_break/> 类型为 PostgreSQL (5432) 或所有流量。<br id=hardline_break/> 为客户端的 IP 地址范围或 0.0.0.0/0。

要添加网络 ACL 规则,请参阅添加规则

检查子网和路由配置

要检查您的子网配置,请完成以下步骤:

  1. 打开 Amazon RDS 控制台
  2. 在导航窗格中,选择 Databases(数据库)。
  3. 选择 Aurora PostgreSQL 兼容版数据库集群。
  4. Connectivity & security(连接和安全性)选项卡中,记下数据库子网组名称。
  5. 选择子网组链接。
  6. 验证子网是否位于正确的可用区和 VPC 中。

要检查您的路由表配置,请参阅确定子网的路由表

检查数据库级权限

验证数据库用户是否具有连接数据库所需的权限。

以主用户身份连接

运行以下 psql 命令:

psql -h your-cluster-endpoint -p 5432 -U primary-username -d postgres

**注意:**请将 your-cluster-endpoint 替换为您的集群端点,并将 primary-username 替换为您的主用户名。

检查用户权限

以主用户身份连接后,运行以下 SQL 查询以检查用户权限。

要列出所有数据库用户,请运行以下命令:

SELECT usename, usesuper, usecreatedb, useconnlimit FROM pg_user ORDER BY usename;

要检查特定的用户权限,请运行以下命令:

SELECT usename, usesuper, usecreatedb, useconnlimit FROM pg_user WHERE usename = 'your-username';

**注意:**请将 your-username 替换为要检查其权限的用户的用户名。

要列出数据库及其所有者,请运行以下命令:

SELECT datname, datowner, datacl FROM pg_database WHERE datname NOT IN ('template0', 'template1');

创建或修改用户权限

如果用户不存在或没有足够的权限,则运行以下命令。

要创建新用户,请运行以下命令:

CREATE USER your_username WITH PASSWORD 'your_password';

**注意:**请将 your_username 替换为您所创建用户的用户名,并将 your_password 替换为安全密码。

要授予用户连接数据库的权限,请运行以下命令:

GRANT CONNECT ON DATABASE your_database_name TO your_username;

**注意:**请将 your_database_name 替换为您的数据库名称,并将 your_username 替换为您授予权限的用户的用户名。

要授予用户使用架构的权限,请运行以下命令:

GRANT USAGE ON SCHEMA public TO your_username;

**注意:**请将 your_username 替换为您授予权限的用户的用户名。

要授予用户对表的权限,请运行以下命令:

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO your_username;

**注意:**请将 your_username 替换为您授予权限的用户的用户名。

监控连接配额

检查您的数据库集群是否已达到其最大连接配额。

检查当前连接

连接到您的数据库集群,然后运行以下 SQL 查询。

要检查当前连接数,请运行以下命令:

SELECT count(*) as current_connections FROM pg_stat_activity WHERE state = 'active';

要检查最大连接数设置,请运行以下命令:

SHOW max_connections;

要按用户查看活动连接,请运行以下命令:

SELECT usename, count(*) as connection_count FROM pg_stat_activity GROUP BY usename ORDER BY connection_count DESC;

修改 max_connections 参数

要修改 max_connections 参数,请参阅在 Amazon Aurora 中修改数据库集群参数组中的参数

测试 SSL/TLS 连接

Aurora PostgreSQL 兼容版支持加密连接。测试加密连接和未加密连接。

不使用 SSL 进行测试

如需不使用 SSL 测试您的连接,请运行以下 psql 命令:

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-username sslmode=disable"

**注意:**请将 your-cluster-endpoint 替换为您的集群端点,将 your-database 替换为您的数据库名称,并将 your-username 替换为您的用户名。

使用 SSL 进行测试

如需使用 SSL 测试您的连接,请运行以下 psql 命令:

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-username sslmode=require"

**注意:**请将 your-cluster-endpoint.cluster 替换为您的集群端点,将 your-database 替换为您的数据库名称,并将 your-username 替换为您的用户名。

下载并使用 RDS CA 证书

要下载 RDS 证书颁发机构 (CA) 证书,请运行以下 wget 命令:

wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

要使用证书,请运行以下 psql 命令:

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-username sslmode=verify-full sslrootcert=global-bundle.pem"

**注意:**请将 your-cluster-endpoint 替换为您的集群端点,将 your-database 替换为您的数据库名称,并将 your-username 替换为您的用户名。

对 IAM 数据库身份验证问题进行故障排除

如果您使用 AWS Identity and Access Management (IAM) 数据库身份验证,请完成以下步骤。

生成身份验证令牌

要生成身份验证令牌,请运行以下 generate-db-auth-token AWS CLI 命令:

aws rds generate-db-auth-token \
  --hostname your-cluster-endpoint \
  --port 5432 \
  --region your-region \
  --username your-iam-username

**注意:**请将 your-cluster-endpoint 替换为您的集群端点,将 your-region 替换为您的区域,并将 your-iam-username 替换为您的 IAM 数据库用户名。

使用 IAM 身份验证进行连接

运行以下 psql 命令:

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-iam-username password=your-generated-token"

**注意:**请将 your-cluster-endpoint 替换为您的集群端点,将 your-database 替换为您的数据库名称,并将 your-iam-username 替换为已启用 IAM 的用户名。此外,请将 your-generated-token 替换为您生成的令牌。

验证 IAM 策略权限

确保将以下策略附加到 IAM 用户或角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds-db:connect"
      ],
      "Resource": [
        "arn:aws:rds-db:region:account-id:dbuser:cluster-resource-id/your-iam-username"
      ]
    }
  ]
}

**注意:**请将 region 替换为您的区域,将 account-id 替换为您的 AWS 账户 ID,将 cluster-resource-id 替换为您的数据库集群资源 ID,并将 your-iam-username 替换为您的 IAM 数据库用户名。

要进一步排查连接问题,请参阅对 RDS for PostgreSQL 实例的连接问题进行故障排除

相关信息

使用安全组控制流向 AWS 资源的流量

使用网络访问控制列表控制子网流量

AWS 官方已更新 5 个月前