如何通过端口转发使用Quarkus Redis连接Redis集群及配置问题排查
问题原因分析
两种连接方式表现不同的核心原因是集群模式开关配置不一致:
- 第一种手动创建Vert.x Redis客户端的代码中,没有显式指定客户端类型为集群模式,客户端默认按普通模式运行,只会轮询你传入的三个127.0.0.1地址发送请求,不会主动获取Redis集群内部拓扑,自然不会尝试连接集群内网IP,所以可以正常通过K8s端口转发访问。
- 第二种通过配置注入ReactiveRedisClient的方式,你显式配置了
quarkus.redis.client-type: cluster,开启了集群模式。这种模式下客户端会先向Redis节点发送CLUSTER SLOTS命令获取集群拓扑,返回的节点地址是K8s集群内部的IP和端口(即报错中的10.100.23.75:6379),你的本地环境没有该内网网段的路由,因此连接失败。
解决方案
你可以通过Quarkus提供的集群节点地址重命名配置,将集群返回的内网地址映射为本地端口转发的地址即可,在application.properties中添加如下配置:
# 按你实际集群的内网节点地址和本地转发端口一一配置 quarkus.redis.cluster-node-address-renaming.10.100.23.75:6379=127.0.0.1:7000 quarkus.redis.cluster-node-address-renaming.{内网节点2地址:端口}=127.0.0.1:7001 quarkus.redis.cluster-node-address-renaming.{内网节点3地址:端口}=127.0.0.1:7002
如果仅用于本地调试,也可以选择将本地端口转发的端口和Redis集群内部端口对齐,同时在本地hosts文件中将所有Redis集群内网IP指向127.0.0.1,也能解决该问题。
你可以在手动创建客户端的代码中添加options.setClientType(io.vertx.redis.client.RedisClientType.CLUSTER),就会复现和注入客户端一样的报错,进一步验证是配置差异导致的问题。
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

