连接远程的redis 集群报Could not get a resource from the pool异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连接远程的redis 集群报Could not get a resource from the pool异常相关的知识,希望对你有一定的参考价值。

参考技术A 在阿里云Ubuntu新搭建的redis集群,始终无法连接,报Could not get a resource from the pool异常

查找资料发现是redist的一些限制,Protected mode is a layer of security protection, in order to avoid that

Redis instances left open on the internet are accessed and exploited. 就是说出于安全考虑,redis的实例不能在网络上被访问,所以修改protected-mode就好了

所以将redis.conf中的protected-mode yes改为protected-mode no

重启redis实例,以为问题就解决了?发现还是报Could not get a resource from the pool异常

这个是什么情况,要逆天嘛?

查看redis node信息看一下,终于发现了问题

怎么会有172的IP,到这里终于找到问题根源了,修改node.conf配置,重启redis,问题终于解决。

通过jedis连接redis单机成功,使用redis客户端可以连接集群,但使用JedisCluster连接redis集群一直报Could not get a resource from the poo

 

一,问题描述:

(如题目)通过jedis连接redis单机成功,使用JedisCluster连接redis集群一直报Could not get a resource from the pool

但是使用redis客户端可以连接集群(我使用的redis desktop manager)

在java中通过jedis连接redis单机也成功,但使用JedisCluster连接redis集群一直报Could not get a resource from the pool,

我以命令行方式操作是没问题的,如下:

 

先贴代码:

<!-- redis客户端 -->
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.8.2</version>
</dependency>

//相关代码如下:

JedisPoolConfig config = new JedisPoolConfig();
config =new JedisPoolConfig();
       config.setMaxTotal(60000);//设置最大连接数  
       config.setMaxIdle(1000); //设置最大空闲数 
       config.setMaxWaitMillis(3000);//设置超时时间  
       config.setTestOnBorrow(true);


// 集群结点
Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
jedisClusterNode.add(new HostAndPort("192.168.246.128", Integer.parseInt("7001")));
jedisClusterNode.add(new HostAndPort("192.168.246.128", Integer.parseInt("7002")));
jedisClusterNode.add(new HostAndPort("192.168.246.128", Integer.parseInt("7003")));
jedisClusterNode.add(new HostAndPort("192.168.246.128", Integer.parseInt("7004")));
jedisClusterNode.add(new HostAndPort("192.168.246.128", Integer.parseInt("7005")));
jedisClusterNode.add(new HostAndPort("192.168.246.128", Integer.parseInt("7006")));

JedisCluster jc = new JedisCluster(jedisClusterNode, config);
//JedisCluster jc = new JedisCluster(jedisClusterNode);
jc.set("name", "zhangsan");
String value = jc.get("name");
System.out.println(value);

 

 

纠结了两天也是没sei了,就这么几行代码,看来看去没问题啊,甚至上github去看作者的例子,一模一样啊,一度怀疑人生啊;

由于我的单机版用命令行和java代码访问都没问题,而且集群通过命令行方式也没问题,所以一直没怀疑我搭建的环境的问题,我怀疑代码,怀疑是否是工程依赖的jedis的版本的bug,换了几个版本还是报同样的错误,最后我才开始查环境,环境的话先关了防火墙,没用,然后再查配置文件,查到

二:找到问题:这个地方IP的问题,以上是正确的版本,以前有问题的版本的Ip是127.0.0.1,

原因是这个地方以前我没注释redis.conf文件中的bind 127.0.0.1 然后做集群时使用的命令是:

./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

三:解决问题:

删除以上所有里面这个node.conf文件

然后:

重新做集群:

./redis-trib.rb create --replicas 1 192.168.246.128:7001 192.168.246.128:7002 192.168.246.128:7003 192.168.246.128:7004 192.168.246.128:7005 192.168.246.128:7006

然后重新测试就解决了;

还要注意一下每个redis下面的redis.conf的配置(以下是我的):

port  7001                                        //端口7001,7002,7003       
bind 本机ip                                       //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群,我直接注释掉了
daemonize    yes                               //redis后台运行
pidfile  /var/run/redis_7000.pid          //pidfile文件对应7000,7001,7002
cluster-enabled  yes                           //开启集群  把注释#去掉
cluster-config-file  nodes_7000.conf   //集群的配置  配置文件首次启动自动生成 7001,7002,7003
cluster-node-timeout  15000                //请求超时  默认15秒,可自行设置
appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志

 

以上是关于连接远程的redis 集群报Could not get a resource from the pool异常的主要内容,如果未能解决你的问题,请参考以下文章

通过jedis连接redis单机成功,使用redis客户端可以连接集群,但使用JedisCluster连接redis集群一直报Could not get a resource from the poo

jedis连接集群报Could not get a resource from the pool错误

java 连接 redis集群时报错:Could not get a resource from the pool

本地连接远程mysql服务报错:MySQL is running but PID file could not be found [FAILED]

本地连接远程mysql服务报错:MySQL is running but PID file could not be found [FAILED]

.net 4.6.2连接redis报The assembly for System.Buffers and System.IO.Pipelines could not be loaded问题