赞
踩
Redisson 在历史多个版本都出现了failover期间报错的问题并且目前没有一个版本可以完全解决这个问题,所以在当前使用版本3.18.0基础上做了二次开发,达到降低业务由于redis遇到问题导致不可用。
Redisson 作为业务线使用的Redis 客户端,在处理 Redis 高可用架构中的故障转移(failover)时面临着特定的挑战。
特别是当 Redis 新的 slave 节点启动并加载数据集到内存中时,客户端可能会遇到 LOADING
错误,从而导致读取操作失败。
这种情况通常出现在 Redis 服务器启动或数据重新加载时,服务器在加载数据集期间,会返回 LOADING
错误,表示暂时无法处理命令。
Redisson 在接收到这一错误后,会抛出 RedisLoadingException
异常,表明 Redis 服务器目前不可用。
为了优化 Redisson 在 failover 过程中的行为,以提高读取操作的成功率和系统的整体稳定性,我们提出以下优化策略:
故障转移时间记录与主节点读取路由:
updateLastFailoverTime
)。新 Slave 节点加入时间记录与读取路由控制:
addSlaveJoinTime
)。ConnectionManager
)进行扩展,以便它能够处理额外的逻辑判断。代码变更:
redisson配置:更短的超时时间增加检测敏感度
- spring:
- redis:
- redisson:
- config: |
- clusterServersConfig:
- masterConnectionMinimumIdleSize: 8
- slaveConnectionMinimumIdleSize: 8
- idleConnectionTimeout: 10000
- connectTimeout: 3000
- timeout: 1000
- retryAttempts: 3
- retryInterval: 500
- failedSlaveReconnectionInterval: 30000
- failedSlaveCheckInterval: 60000
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。