1、使用redis-cli -p 6379 --cluster create
命令创建Redis集群,报错如下
[ERR] Node 172.24.83.165:6381 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
解决办法:
上网一通百度,基本上给出的解决办法都是
(1)停掉所有的Redis进程
(2)删除appendonly.aof、dump.rdb以及所有的nodes.conf文件
(3)使用redis-cli -c -h -p登录每个redis节点,执行以下命令
flushdb
cluster reset
(4)重启全部Redis节点并创建集群
⚠️注意:
- 上述解决办法是正确的,但是我当时找这些文件的位置花费了一些实践,后来发现就在我的用户home目录下。当然,大家也可以使用find命令查找
- 当某个节点slot数不对时,这种方式是无效的,需要使用fix命令,先修复一下问题节点
2、Redis集群不可用了,把所有Redis服务器都登陆了一遍,发现有的Redis服务器状态(cluster_state)是ok有的是fail。使用cluster nodes
命令查看集群的节点信息,发现我正常是有6个节点可供使用,现在只能看到5个,如下图所示
红框圈住的位置不知道是什么鬼???
由于缺少了6379端口的节点,我决定将该节点手动添加到集群中,作为slave备用,使用redis-cli --cluster add-node 192.168.0.251:6379 192.168.0.251:6383 --cluster-slave
(6379为新添加的从节点,6383为master节点)命令
2.1 报错:[ERR] Not all 16384 slots are covered by nodes.
这个错误往往是由于主节点移除了,但是并没有移除主节点上面的slot,从而导致了slot总数没有达到16384,其实也就是slots分布不正确。所以在删除节点的时候一定要注意删除的是否是master主节点。
解决办法:修复集群
redis-cli --cluster fix 192.168.0.251:6379
当出现如下信息表示修复成功,再次执行添加节点操作
>>> Performing Cluster Check (using node 192.168.0.251:6379)
M: c0767666bee76e5e0dc67f24031a3e1b574235cc 192.168.0.251:6379
slots:[0-16383] (16384 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
2.2 报错:[ERR] Nodes don't agree about configuration!
这个问题产生原因是由于我指定的master节点已经有slave节点了。于是我准备删除这个奇怪的
节点,于是执行了删除节点命令redis-cli --cluster del-node 0:0 '059c3746efc935e6decaf05013432ddbf97fead6'
,但是我并不知道ip和端口号是多少,因此这种方式无法使用了…最后还是采用了将集群全部重启的方式。
参考博客:
redis cluster 集群 fail状态
redis集群节点重启后恢复
redis集群节点宕机
Redis-5.0.5集群配置