如何对连接到 Aurora PostgreSQL 兼容版数据库集群时出现的问题进行故障排除?
我想对 Amazon Aurora PostgreSQL 兼容版数据库 (DB) 集群的连接问题进行故障排除。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
检查您配置的连接参数是否正确
完成以下步骤:
- 打开 Amazon Relational Database Service (Amazon RDS) 控制台。
- 在导航窗格中,选择 Databases(数据库)。
- 选择 Aurora PostgreSQL 兼容版数据库集群。
- 在 Connectivity & security(连接和安全性)选项卡中,记下以下值:<br id=hardline_break/> 写入器或读取器端点<br id=hardline_break/> 默认端口号 5432
- 验证您的数据库名称、用户名和密码是否正确。
要测试您的连接,请运行以下 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!
如果上述命令超时或失败,则表示您存在网络连接问题。检查您是否配置了正确的安全组入站规则。
检查安全组的入站规则
完成以下步骤:
- 打开 Amazon RDS 控制台。
- 在导航窗格中,选择 Databases(数据库)。
- 选择 Aurora PostgreSQL 兼容版数据库集群。
- 在 Connectivity & security(连接和安全性)部分中,记下 VPC security groups(VPC 安全组)下的安全组名称。
- 打开 Amazon Virtual Private Cloud (Amazon VPC) 控制台。
- 在导航窗格中,选择 Security groups(安全组)。
- 选择您的安全组。
- 选择 Inbound rules(入站规则)。
- 确认存在具有以下设置的规则:<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 规则,请完成以下步骤:
- 打开 Amazon VPC 控制台。
- 在导航窗格中,选择 Network ACLs(网络 ACL)。
- 选择与您的数据库子网关联的网络 ACL。
- 选择 Inbound rules(入站规则)选项卡。
- 确认存在具有以下设置的规则:<br id=hardline_break/> 类型为 PostgreSQL (5432) 或所有流量。<br id=hardline_break/> 源为客户端的 IP 地址范围或 0.0.0.0/0。
要添加网络 ACL 规则,请参阅添加规则。
检查子网和路由配置
要检查您的子网配置,请完成以下步骤:
- 打开 Amazon RDS 控制台。
- 在导航窗格中,选择 Databases(数据库)。
- 选择 Aurora PostgreSQL 兼容版数据库集群。
- 在 Connectivity & security(连接和安全性)选项卡中,记下数据库子网组名称。
- 选择子网组链接。
- 验证子网是否位于正确的可用区和 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 实例的连接问题进行故障排除。
