ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis集群创建错误的解决方法

2020-11-23 13:28:55  阅读:505  来源: 互联网

标签:ParentRunner java 创建 redis 集群 org JedisClusterCommand junit


作为创建集群的新手很可能会出现创建集群错误的可能性,比如使用了127.0.0.1也就是localhost来创建集群,回送地址会导致外网无法访问,但集群的作用大部分的情况就是要提供外网来访问。此文提供解决方法。

什么样的情况就是创建集群错误了呢?

redis.clients.jedis.exceptions.JedisClusterMaxAttemptsException: No more cluster attempts left.

	at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:86)
	at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
	at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
	at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
	at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
	at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:124)
	at redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:25)
	at redis.clients.jedis.JedisCluster.set(JedisCluster.java:143)
	at com.taozi.rest.jedis.JedisTest.testJedisCluster(JedisTest.java:72)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)


Process finished with exit code -1

出现这种情况就是连接不上集群,我使用的是java代码。

那么集群是怎么创建的?

上命令:

5版本以前的:

redis-trib.rb create --replicas 1 192.168.56.102:7001 192.168.56.102:7002 192.168.56.103:7003 192.168.56.103:7004 192.168.56.104:7005 192.168.56.104:7006

之后的:

redis-cli --cluster create 192.168.56.102:7001 192.168.56.102:7002 192.168.56.102:7003 192.168.56.102:7004 192.168.56.102:7005 192.168.56.102:7006 --cluster-replicas 1

但若之前用过这些节点创建集群,那就会出现一种错误。

[ERR] Node xxx is not empty. Either the node already knows other no...

原因

生成了每个节点的配置文件和db的备份文件,所以才会产生这个错误。

解决方法

请按如下步骤操作:

1、删除每个redis节点的备份文件,数据库文件和集群配置文件

比如说我有7001~7006 6个节点,那么每个节点中的appendonly.aof、dump.rdb、node_xxx.conf文件都要被删除

在这里插入图片描述

但我用的是redis6版本,所以没有生成这些文件,但谨慎起见还是去看看。

2、使用redis-cli -c -h -p登录每个redis节点,使用以下命令

flushdb
cluster reset

3、重启所有的redis服务,再试试redis集群连接命令,应该就没问题了

命令在上面,回头瞅瞅。

标签:ParentRunner,java,创建,redis,集群,org,JedisClusterCommand,junit
来源: https://blog.csdn.net/weixin_46017976/article/details/109993165

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有