为什么我的 Amazon Redshift 集群会出现间歇性连接问题?

3 分钟阅读
0

我想了解如何排查并解决在 Amazon Redshift 集群中遇到的间歇性连接问题,这些问题是由访问受限、维护时段、节点故障、加密密钥轮换、活跃连接过多、CPU 使用率过高以及客户端连接问题等因素引起的。

简短描述

以下问题可能会导致 Amazon Redshift 集群出现间歇性连接问题:

  • 特定 IP 地址或 CIDR 块的访问受限
  • 维护时段更新
  • 节点故障或计划管理任务
  • 加密密钥轮换
  • 活跃网络连接过多
  • 领导节点的 CPU 利用率过高
  • 客户端连接问题

解决方法

特定 IP 地址或 CIDR 块的访问受限

查看安全组中特定 IP 地址或 CIDR 区块的访问权限是否受限。由于 DHCP 配置,您的客户端 IP 地址可能会发生变化并导致连接问题。此外,如果未为 Amazon Redshift 集群使用弹性 IP 地址,则集群节点的 AWS 托管 IP 地址可能会发生变化。例如,在删除集群并从快照中重新创建集群时,或者恢复已暂停的集群时,IP 地址可能会发生变化。

**注意:**删除和重新创建 Amazon Redshift 集群时会轮换公有 IP 地址。每当节点被替换时,私有 IP 地址都会发生变化。

要解决网络限制问题,请采取以下一种操作:

  • 如果应用程序缓存集群端点后的公有 IP 地址,请使用此端点进行 Amazon Redshift 连接。为了保持网络连接的稳定和安全,请勿使用 DNS 缓存进行连接。
  • 最佳做法是为 Amazon Redshift 集群使用弹性 IP 地址。弹性 IP 地址允许您更改基础配置,并且不会影响客户端用于连接到您集群的 IP 地址。如果想在发生故障后恢复集群,此方法很有用。有关更多信息,请参阅“管理 VPC 中的集群”。
  • 如果使用私有 IP 地址连接到领导节点或计算节点,请在设置中使用新的 IP 地址。例如,如果执行了 SSH 提取或者存在使用计算节点的 Amazon EMR 配置,请更新您的 IP 地址。节点更换后,请将新的私有 IP 地址授予新节点。

维护时段更新

检查 Amazon Redshift 集群的维护时段。在维护时段内,Amazon Redshift 集群无法处理读取或写入操作。如果将维护活动安排在特定的一周内,则会在指定的维护时段内开始维护,持续 30 分钟。Amazon Redshift 在执行维护时,任何正在进行的查询或其他操作都将关闭。可以从 Amazon Redshift 控制台更改计划维护时段。

节点故障或计划管理任务

Amazon Redshift 控制台中,检查事件选项卡中是否存在节点故障或计划管理任务,例如集群大小调整或重启。

如果出现硬件故障,那么 Amazon Redshift 可能会在短时间内不可用,还可能会出现查询失败。查询失败时,会出现如下示例的事件描述:

"A hardware issue was detected on Amazon Redshift cluster [cluster name].A replacement request was initiated at [time]."

或者,如果账户管理员计划对 Amazon Redshift 集群进行重启或调整大小操作,则可能会出现间歇性的连接问题。会出现与以下内容类似的事件描述:

"Cluster [cluster name] began restart at [time].""Cluster [cluster name] completed restart at [time]."

有关更多信息,请参阅 “Amazon Redshift 事件类别和事件消息”。

加密密钥轮换

检查 Amazon Redshift 集群的密钥管理设置,确认是否使用了 AWS Key Management Service (AWS KMS) 密钥加密和密钥加密轮换

如果加密密钥已开启且正在轮换,则 Amazon Redshift 集群在此期间不可用。因此,您将收到以下错误消息:

"pg_query(): Query failed: SSL SYSCALL error: EOF detected"

密钥轮换频率取决于环境的数据安全和标准策略。根据需要经常轮换密钥,或者在加密密钥可能遭到泄露时轮换密钥。此外,请务必制定密钥管理计划,以支持安全和集群可用性需求。

活跃连接过多

在 Amazon Redshift 中,所有集群连接都会发送到领导节点,并且活跃连接有最大限制。是节点类型决定了 Amazon Redshift 集群能支持的最大配额,而非节点数。

当 Amazon Redshift 集群中存在过多活跃连接时,您会收到以下错误消息:

"[Amazon](500310) Invalid operation: connection limit "500" exceeded for non-bootstrap users"

如果在连接到 Amazon Redshift 集群时收到 Invalid operation 错误,就说明已达到连接配额。要查看集群的活跃连接数量,请查看 Amazon CloudWatch 中的 DatabaseConnections 指标。

如果注意到数据库连接激增,则 Amazon Redshift 集群中可能存在许多空闲连接。要查看空闲连接的数量,请运行以下 SQL 查询:

select process, trim(a.user_name) as user_name, a.usesysid, a.starttime,
  datediff(s,a.starttime,sysdate) as session_dur, b.last_end,
 datediff(s,case when b.last_end is not null then b.last_end else
 a.starttime end,sysdate) idle_dur
     FROM
    (select starttime,process,u.usesysid,user_name
     from stv_sessions s, pg_user u
     where
     s.user_name = u.usename
      and u.usesysid>1
and process NOT IN (select pid from stv_inflight where userid>1
 union select pid from stv_recents where status != 'Done' and
  userid>1)
    ) a
     LEFT OUTER JOIN (select
 userid,pid,max(endtime) as last_end from svl_statementtext where
  userid>1 and sequence=0 group by 1,2) b ON a.usesysid = b.userid AND
 a.process = b.pid
    WHERE (b.last_end > a.starttime OR b.last_end is null)
    ORDER BY idle_dur;

输出结果类似于以下示例:

 process | user_name  | usesysid |      starttime      | session_dur | last_end | idle_dur
---------+------------+----------+---------------------+-------------+----------+----------
   14684 | myuser     |      100 | 2020-06-04 07:02:36 |           6 |          |        6
(1 row)

找出空闲连接后,使用以下命令语法关闭这些连接:

select pg_terminate_backend(process);

输出结果类似于以下示例:

pg_terminate_backend ----------------------
                    1
(1 row)

领导节点的 CPU 利用率过高

所有客户端都会使用领导节点连接到 Amazon Redshift 集群。领导节点的 CPU 使用率过高可能会导致间歇性连接问题。

如果尝试连接到 Amazon Redshift 集群且领导节点的 CPU 占有率过高,就会收到以下错误消息:

"Error setting/closing connection"

要确认领导节点的 CPU 利用率是否过高,请查看 Amazon CloudWatch 中的 CPUUtilization 指标。有关更多信息,请参阅 Amazon Redshift 指标

客户端连接问题

检查客户端(例如 Workbench/J 或 PostgreSQL)与 Amazon Redshift 集群之间是否存在连接问题。如果客户端尝试从已发布的端口发送请求,则可能会重置客户端连接。因此,重置连接可能会导致间歇性连接问题。

为防止这类客户端连接问题,请采取以下一种操作:

  • 使用 Amazon Redshift 中的 keepalive 功能来检查客户端和服务器之间的连接是否正常运行。keepalive 功能还有助于防止连接链路断开。要查看或配置 keepalive 的值,请参阅“更改 TCP/IP 超时设置”和“更改 DSN 超时设置”。
  • 如果查询似乎正在运行但在 SQL 客户端工具中停止响应,请检查最大传输单元 (MTU)。由于数据包丢失,查询可能无法显示在 Amazon Redshift 中。当两台 IP 主机之间的网络路径中的 MTU 大小不同时,就会发生丢包。有关如何管理丢包问题的更多信息,请参阅“查询似乎停止响应,有时无法到达集群”。
AWS 官方
AWS 官方已更新 9 个月前