项目中 redis集群出现单节点宕机,造成master迁移,但是发现应用无法正常连接redis
问题场景
Redis集群出现单节点异常造成master迁移时,底层基于Lettuce实现的应用程序无法正常连接Redis
分析
分析了代码,发现默认Lettuce是不会刷新拓扑io.lettuce.core.cluster.models.partitions.Partitions#slotCache,最终造成槽点查找节点依旧找到老的节点,自然访问不了了
解决方案
直接上代码,通过配置ClusterTopologyRefreshOptions开启刷新
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder() .enableAdaptiveRefreshTrigger(ClusterTopologyRefreshOptions.RefreshTrigger.MOVED_REDIRECT, ClusterTopologyRefreshOptions.RefreshTrigger.PERSISTENT_RECONNECTS) .adaptiveRefreshTriggersTimeout(Duration.ofSeconds(25)) .enablePeriodicRefresh(Duration.ofSeconds(20)) .build(); clientConfig = LettucePoolingClientConfiguration.builder().commandTimeout(redisProperties.getTimeout()) .poolConfig(genericObjectPoolConfig) .clientOptions( ClusterClientOptions.builder().topologyRefreshOptions(topologyRefreshOptions).build()) .build();
|
关注Github:1/2极客
关注博客:御前提笔小书童
关注网站:HuMingfeng
关注公众号:开发者的花花世界
本作品采用知识共享署名 4.0 中国大陆许可协议进行许可,欢迎转载,但转载请注明来自御前提笔小书童,并保持转载后文章内容的完整。本人保留所有版权相关权利。
本文链接:https://royalscholar.cn/2020/06/29/《探错笔记》之redis集群出现单节点宕机应用无法正常连接/