一,問題描述:html
(如題目)經過jedis鏈接redis單機成功,使用JedisCluster鏈接redis集羣一直報Could not get a resource from the pooljava
可是使用redis客戶端能夠鏈接集羣(我使用的redis desktop manager)node
在java中經過jedis鏈接redis單機也成功,但使用JedisCluster鏈接redis集羣一直報Could not get a resource from the pool,git
我以命令行方式操做是沒問題的,以下:github
先貼代碼:redis
<!-- redis客戶端 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.2</version>
</dependency>app
//相關代碼以下:測試
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);spa
糾結了兩天也是沒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日誌開啓 有須要就開啓,它會每次寫操做都記錄一條日誌