我有一个托管在 Kubernetes 集群中的多主 Redis 集群配置。我们使用 Jedis 库通过负载均衡器的主机名连接到 Redis。主机名是 prod-redis-cluster.xyz.com。 T 当redis节点打补丁时,负载均衡器的IP地址不会改变,而负载均衡器后面的实际Redis节点的IP地址会改变。但是,应用程序失去了与集群的连接,只有当我们重新启动应用程序时它才会重新建立。
我们使用JEDIS客户端库。示例代码位于此处。
Spring - K8s环境中托管的Redis的Redis集群配置
Jedis的Lettuce客户端提供了按特定时间间隔动态刷新拓扑的选项。请参考以下链接。
https://lettuce.io/core/release/api/io/lettuce/core/cluster/ClusterTopologyRefreshOptions.html
redis:
cluster:
nodes:
lettuce:
cluster:
refresh:
adaptive: true
period: 5m
timeout: 150
and
`RefreshOptions R = ClusterTopologyRefreshOptions.builder()
.dynamicRefreshSources(false).enablePeriodicRefresh(true).build()
上述代码有助于解决 Lettuce 中的问题。如何在 Jedis 中实现同样的效果?
抱歉,我不确定使用 Spring 的具体细节,但我可以谈谈 Jedis 库本身 🙂
您必须调查库的内部结构以及您正在使用的特定客户端,因为有一些。具体来说,您将查看您的客户是否使用
JedisClusterInfoCache
,如果使用,则如何使用。
我在这里突出显示了具有计划拓扑刷新的相关部分:https://github.com/redis/jedis/blob/65d431f549502364bacbc8c25c85e973278c437a/src/main/java/redis/clients/jedis/JedisClusterInfoCache.java#L72-L84
我知道这个问题是几年前提出的,随着时间的推移,事情可能已经发生了变化。希望这对某人有帮助!