在使用代碼鏈接redis集羣時報:no reachable node in cluster,解決辦法

經過jedis鏈接redis單機成功,使用redis客戶端能夠鏈接集羣,但使用JedisCluster鏈接redis集羣一直報Could not get a resource from the pool

 

一,問題描述: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日誌開啓  有須要就開啓,它會每次寫操做都記錄一條日誌

相關文章
相關標籤/搜索