如何解决 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: [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 中,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 集群安全组