今天同事突然说redis连不上了,先检查集群和节点状态:
- 登录一个节点,检查集群状态:
./bin/redis-cli -c -h 192.168.20.133 -p 6380
cluster info
结果显示集群状态为fail
- 登录所有节点:
./bin/redis-cli -c -h 192.168.20.133 -p 6380
执行命令:
cluster slots
有一个节点结果显示和其他节点不一样,少了两个节点的槽信息:
正确节点的槽信息:
- 在这个出问题节点上,执行设置key的命令
set name xxx
结果显示报错:(error) CLUSTERDOWN The cluster is down
- 在错误节点上执行节点检查命令:
./bin/redis-cli --cluster check 192.168.20.133 6379
结果显示有5000多个槽正在 importing,于是猜测可能是这些槽导入状态有问题没法复位导致节点异常:
于是创建一个txt文件setSlot.txt ,内容为5000个槽的导入状态清除命令:
CLUSTER SETSLOT 10923 STABLE
CLUSTER SETSLOT 10924 STABLE
CLUSTER SETSLOT 10925 STABLE
CLUSTER SETSLOT 10926 STABLE
CLUSTER SETSLOT 10927 STABLE
CLUSTER SETSLOT 10928 STABLE
CLUSTER SETSLOT 10929 STABLE
CLUSTER SETSLOT 10930 STABLE
...
然后执行命令:
cat setSlot.txt |./bin/redis-cli -h 192.168.20.133 -p 6379
- 修复槽状态完毕后,查询集群状态,已经显示正常;再执行一个set命令,也正常,问题修复完毕。