• 在虚拟机上安装redis集群,redis使用版本为4.0.5,本机通过命令客户端可以连接访问,外部主机一直访问不了


    在虚拟机上安装了redis 4 ,启动后本机客户端可以连接访问,但是外部主机一直访问不了,在使用java代码连接redis集群时报:no reachable node in cluster,原因:在redis3.2.0版本以后redis.conf配置文件中增加了protected-mode保护模式属性,具体解决办法如下:

    先贴代码:

    <!-- redis客户端 -->
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.8.2</version>
    </dependency>

    //相关代码如下:

    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);

    纠结了两天也是没sei了,就这么几行代码,看来看去没问题啊,甚至上github去看作者的例子,一模一样啊,一度怀疑人生啊;

    由于我的单机版用命令行和java代码访问都没问题,而且集群通过命令行方式也没问题,所以一直没怀疑我搭建的环境的问题,我怀疑代码,怀疑是否是工程依赖的jedis的版本的bug,换了几个版本还是报同样的错误,最后我才开始查环境,环境的话先关了防火墙,没用,

     

    到底怎么回事儿呢?

    用telnet  测试下,结果如下

    查看了虚拟机的端口等情况,一切正常,网上查了一下资料都没解决问题,不过一个大神说可能是redis服务端直接拒绝你这台机子的连接。那redis是怎么做到的呢?查看redis.conf文件,发下有个bind配置

    开启这个配置时:redis 只接收来自于该 IP 地址列表的请求,如果不进行设置,那么将处理所有请求。

    于是禁止这个配置,重启redis。

    用远程客户端连接

    问题描述中说redis开始了保护模式,继续查看redis.conf文件,发现3.2后新增protected-mode配置,默认是yes,即开启。解决方法分为两种:1、关闭protected-mode模式  2、配置bind或者设置密码

    尝试方法1关闭protected-mode模式

    测试连接正常,命令操作无误。

    尝试方法22、配置bind或者设置密码

    客户端测试

  • 相关阅读:
    使用SpringBoot校验客户端传来的数据
    在RestController中获取各种信息的方法
    SpringBoot的文件上传&下载
    Maximum upload size exceede上传文件大小超出解决
    在SpringBoot程序中记录日志
    使用IDEA配置SpringBoot热部署无效解决
    RESTful API是什么?
    IDEA如何配置jdk路径
    使用IDEA集成Spring框架时右下角警戒
    Spring框架各模块功能介绍
  • 原文地址:https://www.cnblogs.com/jiongchen/p/9129003.html
Copyright © 2020-2023  润新知