我的 Amazon Redshift 集群在维护时段之外重启了。
简短描述
Amazon Redshift 集群在维护时段之外重启的原因如下:
- Amazon Redshift 检测到您的集群存在问题。
- Amazon Redshift 替换了集群中的故障节点。
要接收有关在维护时段之外发生的集群重启的通知,请创建事件通知订阅。当您将集群指定为源类型时,事件通知也会向您发送通知。有关详细信息,请参阅 Amazon Redshift cluster event notification subscriptions。
解决方法
Amazon Redshift 检测到您的集群存在问题
以下问题可能会启动集群重启。
领导节点上出现 OOM 错误
在已升级到更高版本的集群上运行的查询可能会导致内存不足 (OOM) 异常。要解决此问题,请回滚您的补丁或失败的补丁。
由早期驱动程序版本导致的 OOM 错误
如果您当前使用的是较早的驱动程序版本,并且您的集群频繁重启,请下载最新的 Java 数据库连接 (JDBC) 驱动程序版本。最佳做法是先在开发环境中测试驱动程序版本,然后再将其用于生产环境。
运行状况检查查询失败
Amazon Redshift 会持续监控其组件的可用性。当运行状况检查失败时,Amazon Redshift 会启动重启,以尽快使集群恢复正常状态,从而减少停机时间。
大多数运行状况检查失败发生在集群中存在长时间运行的未完成事务时。当 Amazon Redshift 正在清理与长时间运行的事务关联的内存时,集群可能会锁定。为防止出现此问题,最佳做法是监控未关闭的连接和事务。
要监控长时间运行的已打开连接,请运行以下示例查询:
select s.process as process_id,
c.remotehost || ':' || c.remoteport as remote_address,
s.user_name as username,
s.db_name,
s.starttime as session_start_time,
i.starttime as start_query_time,
datediff(s,i.starttime,getdate())%86400/3600||' hrs '||
datediff(s,i.starttime,getdate())%3600/60||' mins ' ||
datediff(s,i.starttime,getdate())%60||' secs 'as running_query_time,
i.text as query
from stv_sessions s
left join pg_user u on u.usename = s.user_name
left join stl_connection_log c
on c.pid = s.process
and c.event = 'authenticated'
left join stv_inflight i
on u.usesysid = i.userid
and s.process = i.pid
where username <> 'rdsdb'
order by session_start_time desc;
要监控长时间运行的未完成事务,请运行以下示例查询:
select *,datediff(s,txn_start,getdate())/86400||' days '||datediff(s,txn_start,getdate())%86400/3600||' hrs '||datediff(s,txn_start,getdate())%3600/60||' mins '||datediff(s,txn_start,getdate())%60||' secs' from svv_transactions
where lockable_object_type='transactionid' and pid<>pg_backend_pid() order by 3;
然后,运行以下查询以查看未完成事务:
select * from svl_statementtext where xid = <xid> order by starttime, sequence)
要终止空闲会话并释放连接,请使用 PG_TERMINATE_BACKEND 命令。
Amazon Redshift 替换了集群中的故障节点
每个 Amazon Redshift 节点都在一个单独的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上运行。故障节点是指在监控过程中无法响应心跳信号的实例。心跳信号会定期监控您的 Amazon Redshift 集群中计算节点的可用性。
当 Amazon Redshift 检测到硬件问题或故障时,它会在下一个维护时段内自动替换节点。但是,有时 Amazon Redshift 会立即替换故障节点,以便您的集群可以继续正常运行。
以下问题可能会导致 Amazon Redshift 替换集群节点:
- 由于 EC2 实例的硬件存在潜在问题,或者自动运行状况检查失败,导致该实例没有响应。
- 节点上的磁盘存在问题。
- 间歇性网络通信故障或底层主机出现问题可能导致节点之间的通信故障。
- 节点或集群的发现超时。
- 节点过载导致 OOM 问题。