redis报错信息:CLUSTERDOWN Hash slot not served 和 Not all 16384 slots are covered by nodes

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/zimiao552147572/article/details/97253748


		1.执行命令:
			cd /home/data/redis/bin
			redis-cli -p 2311 -c
			127.0.0.1:2311> get ng
		  报错:(error) CLUSTERDOWN Hash slot not served
				(错误)clusterdown哈希槽未提供
 
		  执行命令:cd /home/data/redis/bin
					redis-cli --cluster check IP:2311 或 redis-trib.rb check 127.0.0.1:2311
		  报错:[ERR] Not all 16384 slots are covered by nodes.
				[错误]并非所有16384插槽都由节点覆盖
				
		2.解决:
				1.在修复之前,先使用redis-server命令启动所有的redis实例
				2.如果是使用redis-cli来搭建Redis集群的话,请使用如下修复命令。
					/home/data/redis/bin/redis-cli --cluster fix 127.0.0.1:2311
					/home/data/redis/bin/redis-cli --cluster fix 127.0.0.1:2312
				
				3.如果是使用redis-trib.rb来搭建Redis集群的话,请使用如下修复命令
					/home/redis-5.0.4/src/redis-trib.rb fix 127.0.0.1:2311
					/home/redis-5.0.4/src/redis-trib.rb fix 127.0.0.1:2312
	 
				4.注意:redis 5.0以上的版本,通过 redis-cli 进行搭建Redis集群。
						redis 5.0以下的版本,通过 redis-trib.rb 进行搭建Redis集群。

				5.执行redis-trib.rb命令可能出现的问题:
					命令:/home/redis-5.0.4/src/redis-trib.rb fix IP:端口号
					打印如下信息
						WARNING: redis-trib.rb is not longer available!
						You should use redis-cli instead.
						All commands and features belonging to redis-trib.rb have been moved
						to redis-cli.
						In order to use them you should call redis-cli with the --cluster
						option followed by the subcommand name, arguments and options.
						Use the following syntax:
						redis-cli --cluster SUBCOMMAND [ARGUMENTS] [OPTIONS]
						Example:
						redis-cli --cluster fix
						To get help about all subcommands, type:
						redis-cli --cluster help
						
					意思是:redis-trib.rb不再可用,因为redis-trib.rb命令的功能已经移动到redis cli命令中。
							请使用 redis-cli --cluster 子命令[参数][选项]。
							例子:redis-cli --cluster fix IP:端口号
					原因:redis 5.0以上的版本,通过 redis-cli 进行搭建Redis集群。
						  redis 5.0以下的版本,通过 redis-trib.rb 进行搭建Redis集群
	Sorry, the cluster configuration file nodes.conf is already used by a different Redis Cluster node. 
	Please make sure that different nodes use different cluster configuration files.
	
	1.原因:如果在同一台机器上启动两个redis实例的话,因为当启动每一个redis实例的时候,都会自动生成一个nodes.conf文件,
		    想要解决上面报错,要保证以下两点的其中一点:
			1.要么保证每个redis实例对应的 redis.conf(redis-端口号.conf)配置信息如下:cluster-config-file nodes-端口号.conf
			2.如果没有配置cluster-config-file信息,要么redis实例启动的时候默认自动生成的文件名都统一为nodes.conf,
			  因此在同一台机器上有多个redis实例要启动的话,要么必须保证redis实例的文件都在单独一个的文件夹中,
			  要么启动每个redis实例的时候在不同的路径下执行启动命令,因为执行启动命令默认是在当前路径下自动生成nodes.conf的,
			  所以只要保证每次启动redis实例都在不同的路径下自动生成nodes.conf,那么便不会发生覆盖nodes.conf的问题。
	
	2.解决方式1:
		本教程建议您为每个实例配置使用单独的文件夹,因此每个实例也会在其自己的文件夹上生成nodes.conf。
		在每个目录中创建一个redis.conf文件,从7000到7005。每个端口名称的文件夹就是相当于一个redis实例。
		比如:
			/tmp/redis-cluster/7000
			/tmp/redis-cluster/7001
			/tmp/redis-cluster/7002
			/tmp/redis-cluster/7003
			/tmp/redis-cluster/7004
			/tmp/redis-cluster/7005
			
		您需要在每个实例的单独文件夹(每个端口名称的文件夹)中放置redis.conf文件,并且必须从该文件夹中运行可执行文件。
		假设要执行的redis-server文件在/tmp/redis-cluster/目录下,并且每个/tmp/redis-cluster/700x文件夹上都有redis.conf 
		执行命令流程如下:
			cd /tmp/redis-cluster/7000
			../redis-server ./redis.conf
		这样,nodes.conf将在当前/tmp/redis-cluster/7000文件夹下上生成,实际即是nodes.conf将在当前文件夹下(每个端口名称的文件夹中)上生成。
		
	3.解决方式2:
			在redis.conf(redis-2311.conf)的配置文件中修改如下配置:cluster-config-file nodes-2311.conf
			在redis.conf(redis-2312.conf)的配置文件中修改如下配置:cluster-config-file nodes-2312.conf
报错3:
	1.问题:如果进入1机的redis可以拿到数据,但是进入2机的redis却拿不到同样key的数据的话,或者从别的端口进入redis拿不到数据的话,
			应重新搭建redis集群,只需要执行一条搭建redis命令即可。
	2.原因分析:每台主机之间的主redis/备redis实例之间失去了联系,所以每个redis实例之间不再是集群关系,所以需要重新搭建redis集群,
			    只需要执行一条搭建redis命令即可。
	2.解决:执行搭建redis命令 
			/home/data/redis/bin/redis-cli --cluster create IP1:2311 IP1:2312 IP2:2311 IP2:2312 IP3:2311 IP3:2312 --cluster-replicas 1
			“--replicas 1”命令中的“1”:表示每个“主”Redis节点服务器后面都有1个“从”Redis节点服务器。
报错4:
	1.执行命令:/home/data/redis/bin/redis-cli --cluster create IP1:2311 IP1:2312 IP2:2311 IP2:2312 IP3:2311 IP3:2312 --cluster-replicas 1
	2.报错:Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
	3.解决:	
		1.删除各节点下的 dump.rdb 和 appendonly.aof
		2.删除各节点下的 redis.conf(redis-端口号.conf)所配置的 cluster-config-file 对应的 nodes.conf(nodes-端口号.conf)文件
		3.进入各节点下的 redis-cli -p 2311 -c、redis-cli -p 2312 -c 执行 “flushdb 数据库名” 或者 “flushall” 清空所有数据库
		  可用过获取所有key(keys *),查看是否所有key被清除完毕。
		  如果执行“flushdb 数据库名” 或者 “flushall” 清空所有数据库时,报错(error) READONLY You can't write against a read only replica,
		  表示当前进入的端口的数据库是备机,所以显示只读。
		4.各节点下重启redis
			/home/data/redis/bin/redis-server /home/data/redis/redis-2311.conf
			/home/data/redis/bin/redis-server /home/data/redis/redis-2312.conf
			ps aux|grep redis

猜你喜欢

转载自blog.csdn.net/zimiao552147572/article/details/97253748