`

解决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("*");
}


}

分享到:
评论

相关推荐

    RedisCluster

    而 RedisCluster 是 Redis 的分布式解决方案,可以将数据分布在多个节点上,提供高可用性和可扩展性。在 Windows 环境下搭建 Redis 集群,需要考虑一些特定的配置和步骤。 **Windows 下 Redis 集群搭建** 1. **...

    Linux-CentOS中redisCluster部署指南(redis-5.0.3)

    以下是对"Linux-CentOS中redisCluster部署指南(redis-5.0.3)"的详细解释和相关知识点: 一、Redis Cluster简介 Redis Cluster是Redis官方提供的分布式解决方案,通过数据分片技术实现了数据的自动分发和容灾,支持...

    Windows环境Redis-Cluster配置

    Redis-Cluster是Redis的一个分布式实现,它允许在多个节点之间分散数据,提供高可用性和可扩展性。在Windows环境中配置Redis-Cluster,首先需要理解其基本概念和工作原理,然后按照步骤进行安装和配置。 一、Redis-...

    redis-cluster-5.0.7.tar.gz

    Redis Cluster是Redis的分布式解决方案,它允许你在多个节点之间分发数据,从而实现高可用性和可扩展性。在本压缩包“redis-cluster-5.0.7.tar.gz”中,我们将探讨Redis Cluster的配置和使用。 首先,`redis-...

    redis-py-cluster-1.3.5.tar.gz

    from rediscluster import RedisCluster rc = RedisCluster(startup_nodes=[{'host': 'node1', 'port': 7000}], decode_responses=True) rc.set('key', 'value') print(rc.get('key')) ``` 这里,`decode_...

    redis客户端连接、spring boot整合、分布式锁.zip

    分布式锁是 Redis 在分布式系统中的重要应用场景,它可以解决多节点共享资源的问题,防止并发操作导致的数据不一致。Redis 提供了 SETNX (Set if Not eXists) 和 EXPIRE 命令组合实现简单版本的分布式锁。在 Java ...

    redis-cluster:在Kubernetes上运行的Redis集群设置

    在Kubernetes上部署Redis集群(redis-cluster)是现代云原生应用中常见的数据存储解决方案。本文将深入探讨如何在Kubernetes环境下配置和管理一个高可用的Redis集群。 首先,了解Redis Cluster的基本概念至关重要。...

    开源项目-go-redis-redis.zip

    在`go-redis v3`版本中,它特别强调了对Redis Cluster的支持,这是一个Redis的分布式解决方案,用于在多节点集群中提供高可用性和扩展性。 **Redis简介** Redis是一个开源的、基于内存的数据结构存储系统,通常被...

    Redis集群管理脚本

    4. 客户端连接:客户端需要支持Redis Cluster,以便正确处理槽映射和失败重定向。 5. 集群的限制:Redis Cluster不支持某些命令,例如`KEYS`、`FLUSHDB`和`FLUSHALL`,因为它们可能影响整个集群而不是单个节点。 ...

    redis-cluster.cr:Crystal的redis-cluster库

    这个库的出现,让Crystal开发者可以充分利用Redis Cluster的优势,为他们的应用构建高可用的数据存储解决方案。 **使用redis-cluster.cr** 要使用`redis-cluster.cr`,首先需要将其添加到你的Crystal项目的`shard....

    redis 离线集群redis5.0以上版本

    Redis 5.0引入了官方的集群解决方案——Redis Cluster,它允许用户在多个节点之间分布数据,以实现高可用性和水平扩展。Redis Cluster无需中心化的协调节点,而是通过节点间的互相通信来管理集群状态。每个节点都...

    redis-cluster-docker:使用Docker的Redis集群配置

    为了解决这个问题,Redis提供了集群(Cluster)功能,通过分布式的方式将数据分散在多个节点上,实现水平扩展,提升系统的可用性和容错性。 **Redis集群原理** Redis Cluster采用无中心架构,每个节点都是平等的,...

    linux部署redis集群遇到的问题

    1、在java程序中,连接不上redisCluster。 报错信息: no reachable node in cluster 原因:创建集群时,使用了127.0.0.1,要改为公网ip才行。 redis-cli –cluster create 127.0.0.1:7001 127.0.0.1:7002 解决方法...

    Redis集群搭建资料大整合

    Redis集群(Redis Cluster)是其提供的一种分布式解决方案,旨在提高数据的可用性和可扩展性,通过数据分片(Sharding)实现多节点的数据存储。在本资料包中,您将找到关于Redis集群搭建的详细步骤和教程。 首先,...

    redis经典问题及答案

    Redis Cluster是一种分布式的解决方案,支持数据自动分片和故障转移。每个节点存储部分数据,并通过Gossip协议保持节点间通信,实现数据的透明迁移。 以上是Redis的一些核心知识点和常见问题解答,实际应用中,还...

    Redis高可用性解决方案之哨兵与集群.docx

    Redis Cluster,则是在 3.0 版本中推出的分布式解决方案,主要为了解决单机的内存、并发和流量限制问题。Cluster 实现了数据的分片(sharding),将数据分布在多个节点上,达到负载均衡的效果。每个节点负责一部分...

    cacheDemo.zip

    在 Spring Cache 中使用 RedisCluster,需要配置相应的 `JedisConnectionFactory` 或 `LettuceConnectionFactory` 来连接 Redis 集群,并设置集群节点信息。 【配置 Spring Cache with Redis】 配置 Spring Cache ...

    精华php-redis的安装解决内带有phpredis安装包

    在实际应用中,你可能会遇到一些常见问题,如连接失败、找不到扩展等。这些问题通常与网络配置、权限设置或php.ini配置有关。解决这些问题时,应检查Redis服务器是否正在运行、端口是否开放,以及php.ini中的配置...

Global site tag (gtag.js) - Google Analytics