跳至内容

如何对 Amazon Redshift 连接错误进行故障排除?

3 分钟阅读
0

我想对 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_endpointcluster_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_endpointcluster_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,请完成以下步骤:

  1. 打开 Amazon Redshift 控制台
  2. 在导航窗格中,选择 Configuration(配置)。
  3. 选择 Workload Management(工作负载管理)。
  4. 修改您与 Amazon Redshift 集群关联的参数组
  5. (可选)运行 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 集群中打开的连接数量,请完成以下步骤:

  1. 打开 Amazon CloudWatch 控制台

  2. 在 Amazon CloudWatch Logs 条目中查找 DatabaseConnections 指标。

  3. 使用 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;
  4. 使用 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 集群?

AWS 官方已更新 1 年前