精华内容
下载资源
问答
  • 看的这个官方文档:参考,文档中有个集群客户端,但是我本地测试结果显示,面对 moved error, 这个客户端也没有自动重定向到指定节点,只是报出来了错误:redis.exceptions.ResponseError: MOVED 9155 127.0.0.1:63

    本地环境:
    python3.7
    Django== 2.2.3
    django-cluster-redis== 1.0.5
    django-redis== 4.10.0
    redis== 3.0.1
    redis-py-cluster== 2.0.0

    看的这个官方文档:参考,文档中有个集群客户端,但是我本地测试结果显示,面对 moved error, 这个客户端也没有自动重定向到指定节点,只是报出来了错误:redis.exceptions.ResponseError: MOVED 9155 127.0.0.1:6380,表现的不像是个集群客户端。
    我需要的是,能够自己重定向到指定节点,并取回数据或者设置值。(./redis-cli -c -p 6379)集群模式的客户端


    刚开始看的这个人的博客必看参考,自己去setting设置,不知道为啥没成功,后来又各种找资料,最后还是根据这个人的博客设置成功的。

    CACHES = {
        'default': {
            'BACKEND': 'django_redis.cache.RedisCache',
            'LOCATION': [
                "redis://127.0.0.1:6379/0",
                "redis://127.0.0.1:6380/0",
                "redis://127.0.0.1:6381/0",
            ],
            'OPTIONS': {
                'REDIS_CLIENT_CLASS': 'rediscluster.RedisCluster',
                'CONNECTION_POOL_CLASS': 'rediscluster.connection.ClusterConnectionPool',
                # 'CONNECTION_POOL_KWARGS': {
                #    'skip_full_coverage_check': True
                # }
            }
        }
    }
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
    SESSION_CACHE_ALIAS = 'default'
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    搭建的本地环境: 6379,6380(从节点:6381),哪怕setting中只有一个6381节点,django项目也可以增删改查数据。

    如果setting中已经这样设置了,但是无法正常工作的话,检查一下,看一下能否正确导入。

    (py37) xiaocai@ubuntu:~/prpject/pro-path$ python manage.py shell
    Python 3.7.3 | packaged by conda-forge | (default, Jul  1 2019, 21:52:21) 
    [GCC 7.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    (InteractiveConsole)
    >>> from rediscluster import RedisCluster
    >>> from rediscluster.connection import ClusterConnectionPool
    ————————————————
    版权声明:本文为CSDN博主「crazy_xiaocai」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_42752585/article/details/103664767

    展开全文
  • 但是,切换到redis集群(redis-cluster)后, 运行项目,牵扯到使用redis的部分报错: 解决方法: 将每个节点下dump.rdb、nodes.conf本地备份文件删除 重新创建集群 /usr/redis/bin/redis-cli --cluster create 192....

    CLUSTERDOWN The cluster is down

    之前使用redis单机版没有任何错误。但是,切换到redis集群(redis-cluster)后, 运行项目,牵扯到使用redis的部分报错:

    在这里插入图片描述

    解决方法:
    将每个节点下dump.rdb、nodes.conf本地备份文件删除
    重新创建集群

    /usr/redis/bin/redis-cli --cluster  create  192.168.124.61:8001 
    192.168.124.61:8002 192.168.124.62:8003 
    192.168.124.62:8004 192.168.124.63:8005 
    192.168.124.63:8006  --cluster-replicas 1
    

    文章来源

    展开全文
  • redis集群本地连接成功,远程连接失败。部署的公网IP,连接时候跳转到内网IP,然后拒绝连接,出现连接失败。服务器搭建为集群端口已经打开,但是一直搭建失败,集群启动成功,log日志正常,但是无法连接请看这里

    故事

    年少时候不努力,现在只能敲代码。今天我们就来说说,这几天一直在解决的bug。由于今天很累了,就bug也修复了,就不复原了。大概口述一下:

    服务器是阿里云的,之前学习redis时候搭建过集群,现在写毕业设计,然后就想把集群用上,结果不用不出事。

    所以自己在服务器上,同一台搭建伪集群,需要注意以下几个问题。

    建议

    1:注释掉bind 127.0.0.1之后,需要打开对应端口和端口号加10000的端口

    (例如:端口是6379,你需要也打开16379,如果是6380,那就打开6381)

    2:搭建集群时候,不要设密码,不要设密码,然后搭建好后在设置密码然后持久化,具体百度

    3:搭建集群时候搭建好了后,查看node节点,如果出现内网IP,把它改成公网IP,否则程序一直报拒绝连接

    问题详情:

    redis搭建集群,部署的是公网IP,搭建时候也去除了bind,同时端口全部打开,没有防火墙,访问不了,仔细查看后,是连接时候用的公网IP,但是他又一次自己映射为内网IP,之后查看log全部正常。

    关键问题是因为在搭建时候把bind注释了,之后构建集群时候用的公网IP,就造成了下图,5个蓝色的是公网IP,红色的是内网IP,那个node都如此。

    在这里插入图片描述

    解决办法

    将node节点全部改为公网IP就可以

    展开全文
  • 今天在本地虚拟机搭建了一个redis集群,但是发现奇怪的现象,在虚拟机外边可以redis-cli可以连接成功,并且Jedis单独连接也可以连接成功,但是就是用JedisCluster连接不成功。报如下错误: ...
    今天在本地虚拟机搭建了一个redis集群,但是发现奇怪的现象,在虚拟机外边可以redis-cli可以连接成功,并且Jedis单独连接也可以连接成功,但是就是用JedisCluster连接不成功。报如下错误:

    “JedisConnectionException: Could not get a resource from the pool”

    Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
    	at redis.clients.util.Pool.getResource(Pool.java:53)
    Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect
    	at redis.clients.jedis.Connection.connect(Connection.java:207)
    Caused by: java.net.ConnectException: Connection refused: connect
    	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    
    # 省略了一部分错误输出
    

    好多人和我遇到了同样的问题,但是网上找了好长时间,都是乱七八糟的。

    解决方法:

    注: 我虚拟机的IP为192.168.79.134,下面出现的所有改ip换成你们自己的IP

    1. 停止redis集群,删除 ./dir 配置目录下的所有文件

    [root@localhost data]# ls
    7000.log  7010.log  7020.log  dump-7000.rdb  dump-7010.rdb  dump-7020.rdb  nodes-7000.conf  nodes-7010.conf  nodes-7020.conf
    7001.log  7011.log  7021.log  dump-7001.rdb  dump-7011.rdb  dump-7021.rdb  nodes-7001.conf  nodes-7011.conf  nodes-7021.conf
    

    先把集群生成的默认nodes.conf给删了,还原配置。

    2. 每个节点的配置文件都增加bind配置

    #端口7000
    port 7000
    # 以守护进程方式启动
    daemonize yes
    # 数据存放目录,如rdb文件,日志文件等
    dir "./data"
    # 日志文件名称
    logfile "7000.log"
    # db文件名称
    dbfilename "dump-7000.rdb"
    # 设置该redis为集群节点
    cluster-enabled yes
    # 集群本地的配置文件,对集群的配置进行一个记录
    cluster-config-file nodes-7000.conf
    # 如果这个配置为yes,那么集群中只要有一个节点挂了,整个集群就不可用了
    cluster-require-full-coverage no
    # 关闭保护模式,否则jedis无法访问
    protected-mode no
    
    # 增加该配置 # 增加该配置 # 增加该配置 # 增加该配置 # 增加该配置 # 增加该配置 # 增加该配置 # 增加该配置
    # 配置当前网卡的ip
    bind 192.168.79.134
    

    我在虚拟机外边用 192.168.79.134 这个IP连接的虚拟机,你们用哪个就配置哪个

    3. 修改启动脚本,所有都用具体ip(不能用127.0.0.1)

    比如:

    ./redis/src/redis-cli -p 7000 cluster meet 127.0.0.1 7001	 错错错错错
    
    ./redis/src/redis-cli -h 192.168.79.134 -p 7000 cluster meet 192.168.79.134    对对对对对
    ./redis/src/redis-cli -h 192.168.79.134 -p 7000 cluster addslots ${slot}   对
    

    4. 启动redis集群,再看就发现好了





    原因分析

    我的代码为

        public static void main(String[] args) throws IOException {
            Set<HostAndPort> hostAndPortSet = new HashSet<>();
            hostAndPortSet.add(new HostAndPort("192.168.79.134", 7000));
            hostAndPortSet.add(new HostAndPort("192.168.79.134", 7001));
            hostAndPortSet.add(new HostAndPort("192.168.79.134", 7010));
            hostAndPortSet.add(new HostAndPort("192.168.79.134", 7011));
            hostAndPortSet.add(new HostAndPort("192.168.79.134", 7020));
            hostAndPortSet.add(new HostAndPort("192.168.79.134", 7021));
            JedisCluster jedisCluster = new JedisCluster(hostAndPortSet);
            jedisCluster.set("key3", "value3");  # 该处报错
            jedisCluster.close();
        }
    

    根据报错异常堆栈找到具体异常处,在该处打断点后发现
    在这里插入图片描述

    ???? 我明明输入的ip是192.168.79.134,为什么连接的时候是用127.0.0.1连接的,那肯定连接不上。

    这个127.0.0.1是从哪来的。 答案是Redis集群告诉Jedis的

    在这里插入图片描述

    redis集群在做meet操作时,因为是本机,所以走的是lo网卡(127.0.0.1),所以节点之间都认为对方的IP地址是127.0.0.1。

    Jedis时这么做的:

    1.连接Redis集群(这步是成功的,所以这行代码没报错。)
    JedisCluster jedisCluster = new JedisCluster(hostAndPortSet);
    
    2.进行操作时,Jedis会从连接池中拿一个Jedis连接
    return connectionPool.getResource(); // JedisSlotBasedConnectionHandler.java 66行
    
    3.如果连接池中没有连接,则去new一个新的连接
    return internalPool.borrowObject();  // Pool.java  49行,报错行
    
    // 如果连接池中没有连接,则去new一个新的连接
    // org.apache.commons.pool2.impl.GenericObjectPool.class  163行
    if (p == null) {
        p = this.create();  // 真正报错的地方
        if (p != null) {
            create = true;
        }
    }
    

    所以为了让Redis能返回给Jedis正确的IP地址,需要做如下两件事情:

    1. 让Redis不走lo网卡,而是走实际IP的地址的网卡

      使用bind配置, bind 192.168.79.134意思是,所有的Redis请求都从这个IP地址的网卡进。

      这样的话,redis-cli就不能直接访问了,即使在虚拟机中,也必须指定IP才能访问Redis(如果不指定-h,则默认127.0.0.1走的还是lo网卡,但是bind配置限制死了,不能走lo网卡)。
      所以要修改启动脚本和配置文件。

    2. 删除自动生成的nodes-port.conf文件

      Redis对于其他节点的ip地址是在这个配置文件下记录的,所以得删了,让他重新生成一次。

    展开全文
  • 一、问题描述 Redis环境可以参考:... Centos6搭建Redis集群,并且用3哨兵监控一个主节点。环境没有问题,在linux可以连接 [root@bigdata redis-3.2.0]# redis-cli -h 192.168.0.9 -p 26379 192.16...
  • 环境:win10 /Docker for windows/docker redis集群 由于redis集群每次重新cluster nodes会更新spring boot配置的spring.redis.cluster.nodes。docker容器与本地宿主机不在同一个网段下面,更新会导致nodes不可达,...
  • redis 集群搭建

    2021-02-04 00:50:43
    1、规划2 redis安装2.1 redis下载2.2 解压2.3 本地yum准备2.4 安装 gcc tcl2.5 编译2.6 安装2.7 配置文件3 启动redis服务器4 gem 安装4.1 redis-trib.rb准备4.2 安装ruby以及rubygems4.3 redis.gem5 启动集群6 连接...
  • redis集群从bind127.0.0.1 修改为本地IP需要的相关配置 之前配置集群的时候都是默认配置,后来发现在用Jedis连接集群测试的时候无法连接。后来查到是因为配置问题(配置成了127.0.0.1),所以在外面连接的时候无法...
  • Nosql之redis集群

    2020-12-20 22:09:39
    Nosql之redis集群redis 数据库常用命令Redis 命令工具Redis-benchmark测试工具 redis 数据库常用命令 连接本地数据库 [root@server1 ~]# /usr/local/redis/bin/redis-cli 127.0.0.1:6379> 连接远程数据库 ...
  • 本地起的服务,连接远程docker搭建的redis集群连接报错的,所以现在使用安装包搭建redis集群。 1、环境确认 a、使用下面的命令可查看当前linux版本 cat /etc/redhat-release 这是我当前的版本 b、安装...
  • redis-go-cluster, 在Go中,redis集群客户端实现 redis-go-clusterredis-go-cluster是基于 burd burd burd的客户端的一个golang实现的。 它在本地缓存 slot 信息,并在集群更改时自动更新。 客户端管理每个 node的...
  • <div><p>代码很简单,控制台程序 <pre><code>cs class Program { static void Main(string[] ...连到本地k8s里部署的redis集群就会报这个错误。</p><p>该提问来源于开源项目:2881099/csredis</p></div>
  • 这篇文章是记录我第一次接触hibernate整合redis集群配置(原谅我的无知与见识短浅) 公司老项目redis搭建的集群环境,现在只有单机环境(不知道为什么没有了,反正我来了之后没听说还保留集群),时隔一年多没有动过...
  • 本文我们将介绍如何在本地Windows系统下搭建Redis集群环境(采用Master-Slave的模式,即3主3从),并在文末提供如何基于Spring Boot2.0搭建的项目以集群的方式连接Redis服务,进一步多掌握一项运维层面...
  • 1.在本地debug模式启动功能,连接redis集群订阅消息,手动发布消息,能订阅到,没有问题。 2.模拟主备飘逸:停止maser节点,发现程序抛出异常 三.解决 在springboot启动之后,启一个线程执行订阅的代码,并放到一...
  • ---------------------------------------------------------...centos7 64bit 安装 redis ======== 博文地址 https://www.cnblogs.com/zuidongfeng/p/8032505.html #查看本机是否安装curl工具 [root@iZuf6hyvanq21...
  • 1、下载群集扩展wgethttps://github.com/nrk/predis/archive/v1.0.zip unzipv1.0 cp-Rfpredis-1.0/u01/...注:/u01/html为系统目录2、连接redis集群<?php //连接本地的Redis服务 require'predis/autoload.php';...
  • 这几天在学习在linux上搭建服务器的工作,可谓历经艰辛。...1、错误的原因很简单,就是没有连接redis服务,由于redis采用的安全策略,默认会只准许本地访问。需要通过简单配置,完成允许外网访问。 2、修改re...
  • 发现在本地和测试环境都挺好用的,redis连接都没有出问题。但是到了集群环境下的正式环境就不行了。 关于redis连接。 首先部署redis的那台服务器网络必须是ping得通的。 redis的启动端口必须打开,默认是6379 ...
  • 1、下载redis,在解压后的目录中新建6个文件夹:7001-7006 2、将redis下面的文件复制到7001-7006各个文件夹下面 ...第二行配置允许连接该redis实例的地址,默认情况下只允许本地连接,将默认配置
  • 3、如果你的服务器也是离线服务器(无法连接互联网),那么请先配置本地yum源 本地yum源配置请参考:Linux系统配置本地yum源 4、如果你还不会安装单机版Redis,详细步骤请参考: Linux系统安装redis服务,配置密码 ...
  • Redis Cluster是Redis官方的集群...在client初次连接Redis集群后,smart client会获取集群的节点信息及slot的分布信息,并在本地缓存一份 hash slot 与 node 关系的路由表。 当client收到请求时,先本地用CRC16算法计
  • 通过RedisTemplate连接多个Redis

    千次阅读 2018-04-25 16:13:36
    集群环境的情况下连接多个Redis数据库是很正常的情况,因为平时都是使用本地环境的单Redis情况比较多,在这里用代码总结一下连接多个数据库的情况(主要是不同ip,同一个ip的不通数据库修改不通地方即可),这里还是...
  • 4、从ECS上通过内网IP和公网IP都可以连接redis集群,从本地可以通过Redis DesktopManager连接集群并成功读写; 5、用JedisCluster操作Redis则报错(Too many Cluster redirections); 6、搜索过这个问题的报错解决...
  • 集群环境的情况下连接多个Redis数据库是很正常的情况,因为平时都是使用本地环境的单Redis情况比较多,在这里用代码总结一下连接多个数据库的情况(主要是不同ip,同一个ip的不通数据库修改不通地方即可),这里还是...
  • 前言在集群环境的情况下连接多个Redis数据库是很正常的情况,因为平时都是使用本地环境的单Redis情况比较多,在这里用代码总结一下连接多个数据库的情况(主要是不同ip,同一个ip的不通数据库修改不通地方即可),这里...
  • 集群的时候将多个redis服务器先启动然后通过redis-trib.rb 文件 搭建成一个群这样每个节点(redis服务器 )直接都是相通的,并且把所有的key一共分成了16384个slot,每个节点负责一部分slot,集群中的所有信息都是通过...
  • redisCluster 集群搭建在远程阿里云上,搭建过程一切正常,但是在我本地客户端可以正常连接并对立面的值进行编辑,但是在JAVA代码测试类以及集成的spring-redisCluster中总是报错会报不同的错, main方法中客户获取...
  • smart客户端实现原理(追求性能,不使用代理)从集群中选一个可运行节点,使用cluster slots初始化槽和节点映射。将cluster slots的结果映射到本地,为每个节点创建JedisPool。执行命令执行命令执行命令的过程简单来说...

空空如也

空空如也

1 2 3 4 5 6
收藏数 108
精华内容 43
关键字:

本地连接redis集群

redis 订阅