如何解决 Amazon Redshift 连接错误?

上次更新时间:2020 年 9 月 10 日

我无法连接到我的 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: (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 / exceeded for user

如错误消息所示,在 Amazon Redshift 中,dc1.large、dc2.large 和 ds2.xlarge 类型节点的最大连接数限制为 500。而 ds2.8xlarge、dc2.8xlarge、dc1.8xlarge、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 集群安全组。