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

时间:2022-06-26 06:55:29

在虚拟机上安装了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,换了几个版本还是报同样的错误,最后我才开始查环境,环境的话先关了防火墙,没用,

 

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

到底怎么回事儿呢?

用telnet  测试下,结果如下

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

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

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

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

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

用远程客户端连接

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

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

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

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

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

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

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

客户端测试

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