java 带密码连接redis 单节点/集群 No reachable node in cluster报错解决
java 带密码连接redis 单节点/集群 No reachable node in cluster报错解决
maven依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
连接单节点时
JedisShardInfo shardInfo=new JedisShardInfo("redis://xxx:xxx");
shardInfo.setPassword("xxx");
jedis.set(xxx, xxx);
连接集群时
JedisCluster cluster ;
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 最大连接数
poolConfig.setMaxTotal(10000);
// 最大空闲数
poolConfig.setMaxIdle(1000);
poolConfig.setMaxWaitMillis(3000);
poolConfig.setTestOnBorrow(true);
Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>();
nodes.add(new HostAndPort("xxx",xxx));
//TODO 依次加上集群的所有节点
//下面这行xxx为密码
cluster = new JedisCluster( nodes, 3000, 3000, 8, "xxx", poolConfig );
cluster.set(xxx, xxx);
当时连接集群时报了这个错
No reachable node in cluster
看网上很多解决方案要修改集群配置什么的,但是没有效果
后来发现集群的每个主机网卡分为内网和外网
客户端主机对集群所有节点内网的端口都通,但是不通外网
但是redis集群设置nodes时是用外网ip设置的
所以将客户端主机与redis集群所有外网ip都打通就可以了
这个真的巨坑,排查了好久
想知道redis集群设置nodes的信息,可以进redis命令行使用下面命令看
cluster nodes