`

解决redisCluster 连接失败的问题

阅读更多
使用redis3.2.8 建立集群后,发现在连接redis 经常报连接失败。但是单独连接某个节点时,是不会报错的,经过分析终于发现了原因。
原因是这样的:我在建立集群的时候配置文件redis.conf 中
bind 127.0.0.1 192.168.6.24
在使用命令:./redis-trib.rb  create  --replicas  1  192.168.6.24:7000 192.168.6.24:7001  192.168.6.24:7002 192.168.6.24:7003  192.168.6.24:7004  192.168.6.24:7005
建立集群,建立完集群后,连接redis 发现有问题,后把rdis.conf 中改为:bind 192.168.6.24

所以客户端有时候会连接 127.0.0.1:****,所以就报错了。

如何解决这个问题呢:
1.删除nodes-700*.conf ,appendonly.aof , dump.rdb 这三个文件
2.启动服务
[root@yunboce redis]# ./redis-server 7000/redis.conf
[root@yunboce redis]# ./redis-server 7001/redis.conf
[root@yunboce redis]# ./redis-server 7002/redis.conf
[root@yunboce redis]# ./redis-server 7003/redis.conf
[root@yunboce redis]# ./redis-server 7004/redis.conf
[root@yunboce redis]# ./redis-server 7005/redis.conf

3.执行建群命令:
./redis-trib.rb  create  --replicas  1  192.168.6.24:7000 192.168.6.24:7001  192.168.6.24:7002 192.168.6.24:7003  192.168.6.24:7004  192.168.6.24:7005


4.测试:


import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;

public class JedisClusterTest {


JedisCluster jedisCluster = null;

private String nameKey="test1";

    /**
     * 因为是测试,这里没有写单例
     */
   
    public void before(){
    //注意:这里超时时间不要太短,他会有超时重试机制。而且其他像httpclient、dubbo等RPC框架也要注意这点
    GenericObjectPoolConfig config = new GenericObjectPoolConfig();
//        config.setMaxIdle(200);
//        config.setMaxTotal(300);
//        config.setTestOnReturn(true);
        Set<HostAndPort> nodes = new HashSet<HostAndPort>();   
        nodes.add(new HostAndPort("192.168.6.24",7000));
        nodes.add(new HostAndPort("192.168.6.24",7001)); 
        nodes.add(new HostAndPort("192.168.6.24",7002));
        nodes.add(new HostAndPort("192.168.6.24",7003));
       nodes.add(new HostAndPort("192.168.6.24",7005));
       nodes.add(new HostAndPort("192.168.6.24",7004));
       
       
        jedisCluster = new JedisCluster(nodes, 10000, 1000, 1,
        config);

        System.out.println(jedisCluster+"===");
        for(int i=0;i<1;i++){
        System.out.println(jedisCluster.set("test1"+i, "张三"+i));
        System.out.println(jedisCluster.get("test1"+i));
        }
       

    }

      
    public TreeSet<String> keys(String pattern){ 
      //  logger.debug("Start getting keys..."); 
        TreeSet<String> keys = new TreeSet<String>(); 
        Map<String, JedisPool> clusterNodes = jedisCluster.getClusterNodes(); 
        for(String k : clusterNodes.keySet()){
       
            System.out.println("Getting keys from: {}"+k); 
            JedisPool jp = clusterNodes.get(k); 
            Jedis connection = jp.getResource(); 
            try { 
            Set<String> str = connection.keys(pattern);
            System.out.println(str.toString());
                keys.addAll(str); 
            } catch(Exception e){ 
               // logger.error("Getting keys error: {}", e); 
            } finally{ 
               System.out.println("Connection closed."); 
               connection.close();//用完一定要close这个链接!!! 
            } 
        } 
          
       
       
        return keys; 
    } 
   
   
    public static void main(String[] args) {

    JedisClusterTest test = new JedisClusterTest();
    test.before();
    TreeSet<String> t = test.keys("*");
}


}

分享到:
评论

相关推荐

    Redis高可用集群Redis Cluster搭建

    Redis高可用集群Redis Cluster搭建是 Redis 官方推荐的高可用性解决方案,于 3.0 版本推出。Redis Cluster 的主要用途是实现数据分片(Data Sharding),同时也可以实现高可用(HA)。与 Redis Sentinel 模式相比,...

    RedisCluster集群(Spring访问Redis)

    RedisCluster集群(Spring访问Redis),初学者实例源码

    redis cluster spring整合代码

    个人测试redis cluster spring整合代码 的demo

    redisCluster集群demo

    redisCluster集群demo,java语言用于获取Redis集群的数据连接池并获取数据。

    Redis Cluster的实现机制和原理

    Redis Cluster主要特性和设计,Redis Cluster主要特性和设计

    codis/redis 迁移redis cluster工具

    支持codis迁移数据到redis 支持codis迁移数据到redis cluster 支持redis迁移数据到redis 支持redis迁移数据到codis 支持增量同步数据

    Redis cluster最佳实践

    我在做redis cluster的时候发现,两节点的cluster在处理断网或单节点故障时,会出现脑裂情况,为此,我做了实验去测试redis cluster配置的最佳方式,本文包含了测试的全过程。

    RedisCluster.zip

    RedisCluster 集群搭建文件RedisCluster 集群搭建文件RedisCluster 集群搭建文件

    Redis-Cluster集群模式部署

    Redis Cluster 是 Redis 的一个高可用解决方案,通过将多个 Redis 节点组合成集群,提高 Redis 的可用性和性能。 环境准备 在开始部署 Redis Cluster 之前,需要准备 3 台服务器,每台服务器上需要安装 Redis ...

    redis cluster配置文件

    redis cluster配置文件,配置后的参考; 创建目录: mkdir -p /etc/redis-cluster mkdir -p /var/log/redis mkdir -p /var/redis/7001 mkdir -p /var/redis/7002 拷贝配置文件: cp /usr/local/redis-3.2.8/redis....

    Windows下安装部署redis cluster

    Windows下安装部署redis cluster,亲测好使,包含 安装环境,redis-3.2.1.gem,redis cluster集群实例

    rediscluster.rar

    集群版redis,使用MySQL数据库,里面有批处理的SQL,性能十分卓越,单机版经供参考,抛转引玉,doc中包含数据库文件

    jfinal redis cluster plugin-JFinal redis cluster集群插件 带连接池和Jedis包

    JFinal 对redis的支持只有 主从集群的,并没有cluster集群的插件。作者照着主从集群的样式,自己写了一个,不是很完善。但是可以用。 附带连接池和jedis包

    redisCluster.zip

    redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/...

    rediscluster配置文件.zip

    6389为6379的从节点,6390为6380的从节点,6391为6381的从节点。三主三从,下载完了修改bind dir masterauth cluster

    【Redis】Redis Cluster-集群故障转移.doc

    Redis Cluster 是一种高可用性的分布式存储解决方案,它可以自动检测节点故障并进行故障转移,确保集群的可用性。下面将详细介绍 Redis Cluster 集群故障转移机制的工作原理。 集群故障转移机制 Redis Cluster ...

    redis客户端连接工具

    redis客户端连接工具 redis客户端连接工具 redis客户端连接工具

    Redis Cluster部署文档.docx

    redis3.0版本cluster安装部署配置和管理,样例演示, 集群操作常用命令 CLUSTER INFO 打印集群的信息 CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。

    Redis官方Cluster搭建配置步骤详解

    Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。 Redis集群并 不支持处理多个keys... 本文,是我自己写的Redis Cluster集群搭建和配置详细步骤,包含了常用的Redis配置文件,和节点的管理等,以供大家参考.

Global site tag (gtag.js) - Google Analytics