JedisCluster:redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException:集群中没有可访问的节点

Unk*_*own 5 java redis jedis

我试图从 java 连接到 JedisCluster (ElastiCache Redis)。但我收到了 JedisConnectionException,集群中没有可访问的节点。

这是我连接 JedisCluster 的代码

public static void main(String[] args) throws IOException{
        final GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        poolConfig.setMaxWaitMillis(2000);
        poolConfig.setMaxTotal(300);
        Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
        jedisClusterNode.add(new HostAndPort("mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com",6379));
        jedisClusterNode.add(new HostAndPort("mycachecluster.eaogs8.0002.usw2.cache.amazonaws.com",6379));
        JedisCluster jedisCluster = new JedisCluster(jedisClusterNode,poolConfig);
        System.out.println("Cluster Size...." + jedisCluster.getClusterNodes().size());
        try{
            jedisCluster.set("foo", "bar");
            jedisCluster.get("foo");
        }
        catch(Exception e){
            e.printStackTrace();
        }
        finally{
            jedisCluster.close();
        }
    }
Run Code Online (Sandbox Code Playgroud)

运行这个后我得到的异常

redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster
    at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnection(JedisSlotBasedConnectionHandler.java:57)
    at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnectionFromSlot(JedisSlotBasedConnectionHandler.java:74)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:116)
    at redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:31)
    at redis.clients.jedis.JedisCluster.set(JedisCluster.java:103)
Run Code Online (Sandbox Code Playgroud)

我检查过

telnet mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com 6379
Run Code Online (Sandbox Code Playgroud)

正如AWS Doc中提到的,我得到的答复是“已连接”。

这里有什么问题以及为什么我无法使用 java 连接到 JedisCluster?

笔记 :

我使用的是jedis版本2.9.0

更新:

在 AWS 中,传输中加密和静态加密已激活

所以

Jedis jedis = null;
        try{
            jedis = new Jedis(URI.create("rediss://mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com:6379"));
            System.out.println(jedis.ping());
            System.out.println("XXXXX: "+jedis.get("c"));
        }
        catch(Exception exception){
            exception.printStackTrace();
        }
        finally{
            jedis.close();
        }
Run Code Online (Sandbox Code Playgroud)

工作正常。但绝地集群不是。

saz*_*zad 5

URI.create("rediss://..."),很明显您正在使用Redis SSL 方案通过 Jedis 创建成功的连接。但 JedisCluster 尚不支持 SSL。

有一个与此相关的待处理功能请求拉取请求


更新:JedisCluster 从 Jedis 3.1.0 版本开始支持 SSL/TLS。只需选择任何带boolean ssl参数的 JedisCluster 构造函数并将值设置为true