首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >故障转移

故障转移
EN

Stack Overflow用户
提问于 2015-08-05 23:13:50
回答 2查看 5.6K关注 0票数 7

我们已经使用AWS弹力issues大约6个月了,没有任何问题。每天晚上,我们都有一个Java应用程序运行,它将刷新我们的redis缓存中的DB 0,然后用更新的数据重新填充它。然而,在7月31日至8月5日期间,我们有3个实例成功地刷新了DB,然后我们无法将新的数据写入数据库。

我们在应用程序中得到了以下异常:

redis.clients.jedis.exceptions.JedisDataException: redis.clients.jedis.exceptions.JedisDataException: READONLY --您不能针对只读奴隶进行写入。

当我们查看Elasticache中的缓存事件时,我们可以看到

完成从主节点prod-redis-001到副本节点prod-redis-002的故障转移

我们还没能诊断出这个问题,而且由于应用程序在过去6个月里运行良好,我想知道这是否与6月30日发布的Elasticache有关。https://aws.amazon.com/releasenotes/Amazon-ElastiCache

我们一直在写信给我们的主节点,我们只有一个副本节点。

如果有人能提供任何洞察力,我们将不胜感激。

编辑:这似乎是一个间歇性的问题。有时它会失败,而另一些日子,它运行得很好。

EN

回答 2

Stack Overflow用户

发布于 2015-09-10 06:41:26

在过去的几周里,我们一直与AWS的支持保持联系,这就是我们所发现的。

大多数Redis请求都是同步的,包括刷新,因此它将阻止所有其他请求。在我们的例子中,我们实际上是冲19m键,它需要超过30秒。

Elasticache定期执行健康检查,并且由于刷新正在运行,因此健康检查将被阻塞,从而导致故障转移。

我们一直在询问支持团队,多久进行一次健康检查,这样我们就可以了解为什么我们的同花顺只导致每周3-4次的故障转移。我们能得到的最好的答案是“我们每30秒思考一次”。然而,我们的同花顺持续需要超过30秒,而且不会一直失败。

他们说,他们可能实施的能力,配置时间的健康检查,但他们说,这不会在短期内完成。

他们能给我们的最好的建议是:

1)创建一个全新的集群,用于加载新的数据,而不是刷新前一个集群,而是将应用程序重新指向新集群,并删除旧的集群。 2)如果您正在刷新的数据是数据的更新版本,请考虑不刷新,而是更新和覆盖新键? 3)不要刷新数据,而是将项目的过期时间设置为通常刷新的时间,并让密钥被回收(可能有一个随机的时间来避免雷鸣般的羊群问题),然后重新加载数据。

希望这会有所帮助:)

票数 9
EN

Stack Overflow用户

发布于 2022-11-17 08:54:00

目前,对于6.2AWS的Redis版本,ElastiCache有一个新的线程监视功能。因此,健康检查不会与Redis的所有其他操作在同一个线程中进行。Redis可以继续执行一个长命令/ lua脚本,但是仍然会被认为是健康的。由于这个新特性,故障转移应该少发生。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31844323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档