Jedis TLS连接Redis Cluster异常及相关配置咨询
问题解答
1. 是否需要把所有5个分片加入jedisClusterNodes,还是只加集群端点?
如果是原生Redis集群,只需要添加任意一个集群节点地址即可,JedisCluster会自动通过CLUSTER SLOTS命令发现所有节点和分片信息。但你用的是Redis企业版的集群代理模式,redis-endpoint.example.com:6378是代理端点而非真实集群节点,该代理禁用了CLUSTER系列命令(这也是你报错的直接原因)。如果一定要用JedisCluster,应该添加真实的分片节点地址(host:6379至6383),而非代理端点。
2. 初始化JedisCluster的代码有问题吗?
代码语法本身没问题,但存在两处适配性错误:
- 端点类型错误:你用Redis企业版的代理端点初始化JedisCluster,而JedisCluster启动时依赖
CLUSTER SLOTS命令获取集群拓扑,该代理禁用了这个命令,直接触发"ERR command is not allowed"异常。 - 参数顺序可能有误:查看Jedis 4.3.x的
JedisCluster构造函数签名,你当前传入的参数顺序(nodes, clientConfig, 3, poolConfig)不符合标准构造逻辑——标准构造函数中,3(重试次数)前需要先传入connectionTimeout和soTimeout两个参数,参数顺序错误可能导致初始化逻辑异常。
3. JedisPooled能在集群模式下正常工作吗?
完全可以。Redis企业版的集群代理模式就是为了让客户端像连接单实例Redis一样使用集群,代理会自动处理请求的分片路由、故障转移等集群逻辑。你已经验证过JedisPooled连接代理端点后可以正常执行set命令,说明这种方式完全适配Redis企业版的集群场景,反而比JedisCluster更适合这种代理模式的集群。
内容的提问来源于stack exchange,提问作者JShao
相关产品推荐
相关产品推荐

