如何解决 Amazon Redshift 连接错误?
上次更新日期:2022 年 11 月 14 日
我无法连接到我的 Amazon Redshift 集群。如何解决此问题?
解决方法
最近从快照对 Amazon Redshift 集群进行了容量调整或还原
如果您最近从快照对 Amazon Redshift 集群进行了容量调整或还原,请检查集群的子网。在调整快照大小或还原之前,必须在同一子网中启动集群。
如果您最近未对 Amazon Redshift 集群进行容量调整或还原,请验证您的网络配置。旧子网和新子网的网络配置必须相同。
Amazon Redshift 集群位于公有子网中
如果您尝试连接到位于公有子网中的 Amazon Redshift 集群,请检查以下设置:
- 确认已将 Amazon Redshift 集群设置为“可公开访问”。 有关可公开访问选项的更多信息,请参阅管理 VPC 中的集群。
- 确认您已将互联网网关添加到路由表。
要测试是否已连接,请使用 telnet 来测试到 Amazon Redshift 集群的连接:
telnet <cluster endpoint> <cluster port>
Amazon Redshift 集群位于私有子网中
如果您的 Amazon Redshift 集群位于私有子网中,请检查以下设置:
- 确保将 NAT 网关附上公有子网的路由表。NAT 网关允许私有子网中的集群连接到互联网。
- 请确保您的集群未设置为“可公开访问”。
要确认您的客户端是否可以到达 Amazon Redshift 集群主节点的私有 IP 地址,请使用 dig 命令:
dig <cluster endpoint>
使用 telnet 命令来测试到 Amazon Redshift 集群的连接:
telnet <cluster endpoint><cluster port>
执行 Telnet 命令失败或仍然无法访问 Amazon Redshift 集群
如果 telnet 命令显示您的 Amazon Redshift 集群连接“不成功”,请验证是否满足以下条件:
- 在安全组的入站规则中,允许使用 TCP 类型的 Amazon Redshift 端口(原定设置 5439)。
- 已将连接到 Amazon Redshift 集群的 CIDR 范围或 IP 添加到安全组的入口规则中。
如果 telnet 命令显示 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”,请执行以下步骤:
1. 打开 Amazon Redshift 控制台。
2. 选择配置选项卡。
3. 修改与您的 Amazon Redshift 集群关联的参数组。
4. (可选)使用 AWS 命令行界面(AWS CLI)验证您的 SSL 配置:
describe-cluster-parameters
如果您的 SSL 配置设置为“true”,请考虑以下方法:
- 将 require_ssl 参数更新回“false”(原定设置参数值)。您可以通过编辑与 Amazon Redshift 集群所关联的参数组来更改 SSL 配置。可以从 Amazon Redshift 控制台的参数选项卡中编辑参数组。
- 如果您的使用案例或环境需要 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
如错误消息所示,在 Amazon Redshift 中,dc2.large 和 ds2.xlarge 类型节点的最大连接数限制为 500。而 ds2.8xlarge、dc2.8xlarge、ra3.xlplus、ra3.4xlarge 和 ra3.16xlarge 节点的最大连接数限制为 2000。
要验证 Amazon Redshift 集群中打开的连接数,请执行以下步骤:
1. 打开 Amazon CloudWatch console (Amazon CloudWatch 控制台)。
2. 在 Amazon CloudWatch Logs 条目中查找数据库连接指标。
3. 使用 STL_CONNECTION_LOG 表检查打开的连接:
select recordtime, username, dbname, remotehost, remoteport
from 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;
4. 使用 STV_SESSIONS 表查看有关 Amazon Redshift 的活动用户会话的信息:
select * from stv_sessions;
如果打开了大量连接,请考虑以下方法:
- 使用 PG_TERMINATE_BACKEND 命令关闭所有空闲会话。
- 基于用于连接到 Amazon Redshift 集群的操作系统,在客户端上更改 TCP/IP 超时设置。TCP/IP 超时设置的更新有助于防止任何空闲会话保持打开状态。
连接被拒错误
如果您的 Amazon Redshift 集群无法建立连接,您可能会收到以下连接被拒错误:
Error: amazon 500150 error setting/closing connection: operation timed out/ connection refused.
此错误可能表示访问您的 Amazon Redshift 集群时存在权限问题。若要解决此连接错误,请考虑以下方法:
- 如果您在 Amazon Virtual Private Cloud (Amazon VPC) 中创建了集群,请将您的客户端 CIDR/IP 地址添加到 VPC 安全组中。有关为集群配置 VPC 安全组的更多信息,请参阅管理 VPC 中的集群。
- 如果您在 VPC 之外创建了集群,请将您的客户端 CIDR 或 IP 地址添加到集群安全组中。有关配置集群安全组的更多信息,请参阅 Amazon Redshift 集群安全组。