前言
Redisson 在历史多个版本都出现了failover期间报错的问题并且目前没有一个版本可以完全解决这个问题,所以在当前使用版本3.18.0基础上做了二次开发,达到降低业务由于redis遇到问题导致不可用。
背景
Redisson 作为业务线使用的Redis 客户端,在处理 Redis 高可用架构中的故障转移(failover)时面临着特定的挑战。
特别是当 Redis 新的 slave 节点启动并加载数据集到内存中时,客户端可能会遇到 LOADING 错误,从而导致读取操作失败。
这种情况通常出现在 Redis 服务器启动或数据重新加载时,服务器在加载数据集期间,会返回 LOADING 错误,表示暂时无法处理命令。
Redisson 在接收到这一错误后,会抛出 RedisLoadingException 异常,表明 Redis 服务器目前不可用。
优化方案
为了优化 Redisson 在 failover 过程中的行为,以提高读取操作的成功率和系统的整体稳定性,我们提出以下优化策略:
-
故障转移时间记录与主节点读取路由:
- 目标:确保在故障转移窗口期间,所有的读取操作都被路由到主节点,以避免由于 slave 节点数据未完全同步而引发的读取错误。
- 实施策略:
- 在 Redisson 客户端中,增加一个机制来记录每个分片的最后一次故障转移的时间(
updateLastFailoverTime)。 - 当检测到故障转移事件时,更新该时间戳,并在接
- 在 Redisson 客户端中,增加一个机制来记录每个分片的最后一次故障转移的时间(

本文介绍了Redisson在处理Redis高可用架构中failover时遇到的问题,如LOADING错误导致的读取失败。通过记录故障转移时间和新slave节点加入时间,优化了读取路由策略,以降低因数据不一致引起的不可用性。同时,通过Spring配置调整了连接超时时间,增强了检测敏感度。
最低0.47元/天 解锁文章
2938

被折叠的 条评论
为什么被折叠?



