我想对 Amazon Redshift 集群的连接问题进行故障排除。
解决方案
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
您最近调整了 Amazon Redshift 集群的大小或将其从快照中恢复
如果您最近调整了 Amazon Redshift 集群的大小或将其从快照中恢复,请检查您的集群的子网。在调整快照大小或恢复快照之前,您必须在同一子网中启动集群。
如果您最近没有调整 Amazon Redshift 集群的大小或将其恢复,请验证您的网络配置。新旧子网的网络配置必须相同。
您的 Amazon Redshift 集群位于公有子网中
如果您尝试连接到公有子网中的 Amazon Redshift 集群,请检查该集群是否设置为 Publicly Accessible(可公开访问)。有关可公开访问选项的详细信息,请参阅虚拟私有云 (VPC) 中的 Redshift 资源。
确认您的路由表已连接互联网网关。
要测试与您的 Amazon Redshift 集群的连接,请运行 telnet 命令:
telnet cluster_endpoint cluster_port
**注意:**将 cluster_endpoint 和 cluster_port 替换为您的值。
您的 Amazon Redshift 集群位于私有子网中
如果您的 Amazon Redshift 集群位于私有子网中,请确保将 NAT 网关连接到公有子网的路由表。NAT 网关允许私有子网中的集群连接到互联网。检查您的集群是否未设置为 Publicly Accessible(可公开访问)。
要确认您的客户端可以访问 Amazon Redshift 集群领导节点的私有 IP 地址,请运行 dig 命令:
dig cluster_endpoint
**注意:**将 cluster_endpoint 替换为您的集群端点。
要测试与您的 Amazon Redshift 集群的连接,请运行 telnet 命令:
telnet cluster_endpoint cluster_port
**注意:**将 cluster_endpoint 和 cluster_port 替换为您的值。
Telnet 不成功或仍然无法访问 Amazon Redshift 集群
如果 telnet 命令的输出显示您的 Amazon Redshift 集群连接不成功,请检查以下条件:
- 安全组的入站规则允许 TCP 类型的 Amazon Redshift 端口 5439。
- 安全组的入站规则包括您用于连接 Amazon Redshift 集群的 CIDR 范围或 IP 地址。
如果输出显示您的 Amazon Redshift 集群连接成功,但您的集群仍然无法访问,请检查您的网络的防火墙。您的防火墙可能会屏蔽 Amazon Redshift 端口 5439。
无效的操作连接错误
如果您的 Amazon Redshift 集群要求您为任何连接启用 SSL,则您可能会收到以下连接错误:
"Error: [Amazon](500310) Invalid operation: no pg_hba.conf entry for host "::ffff:205.xxx.xxx.xxx", user "username", database "dbname", SSL off;"
要检查 require_ssl 参数是否设置为 true,请完成以下步骤:
- 打开 Amazon Redshift 控制台。
- 在导航窗格中,选择 Configuration(配置)。
- 选择 Workload Management(工作负载管理)。
- 修改您与 Amazon Redshift 集群关联的参数组。
- (可选)运行 describe-cluster-parameters AWS CLI 命令以验证您的 SSL 配置:
aws redshift describe-cluster-parameters --parameter-group-name exampleparametergroupname
如果您的 SSL 配置设置为 true,请将 require_ssl 参数更新为默认参数值 false。要更改 SSL 配置,请编辑与您的 Amazon Redshift 集群关联的参数组。您可以从 Amazon Redshift 控制台的 Parameters(参数)选项卡中编辑参数组。
但是,如果您的用例或环境需要 SSL 连接,请确保您的连接字符串包含所需的 SSL 参数。
例如:
jdbc:redshift://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev?ssl=true
致命的连接错误
如果您的 Amazon Redshift 集群中有过多打开的连接,则您可能会收到以下错误:
"Error: FATAL: connection limit [500]/[2000] exceeded for user"
如错误消息所示,500 是 Amazon Redshift 中 dc2.large 节点类型的最大连接限制。对于 dc2.8xlarge、ra3.xlplus、ra3.4xlarge 和 ra3.16xlarge 节点,最大连接限制为 2,000。
要验证您的 Amazon Redshift 集群中打开的连接数量,请完成以下步骤:
-
打开 Amazon CloudWatch 控制台。
-
在 Amazon CloudWatch Logs 条目中查找 DatabaseConnections 指标。
-
使用 STL_CONNECTION_LOG 表检查打开的连接:
select recordtime, username, dbname, remotehost, remoteportfrom stl_connection_log
where event = 'initiating session'
and pid not in
(select pid from stl_connection_log
where event = 'disconnecting session')
order by 1 desc;
-
使用 STV_SESSIONS 表查看有关 Amazon Redshift 活跃用户会话的信息:
select * from stv_sessions;
如果您有大量打开的连接,请执行以下操作之一:
“Connection refused”错误
如果您的 Amazon Redshift 集群无法建立连接,则您可能会收到以下 Connection Refused 错误:
"Error: amazon 500150 error setting/closing connection: operation timed out/ connection refused."
当您尝试访问您的 Amazon Redshift 集群时,权限问题可能会导致上述错误。要解决此错误,请执行以下操作之一:
相关信息
我如何使私有 Amazon Redshift 集群可公开访问?
为什么我无法连接到我的 Amazon Redshift 集群?