Redis集群Hash槽分配异常 CLUSTERDOWN Hash slot not served的解决方式

在搭建Redis6.x版本的集群环境曾出现各节点无法互相发现与Hash槽分配异常 CLUSTERDOWN Hash slot not served的情况,故而把解决方式记录下来。

在一台虚拟机机器搭建Redis集群——

192.168.25.116:6380
192.168.25.116:6381
192.168.25.116:6382
192.168.25.116:6383
192.168.25.116:6384
192.168.25.116:6385

启动Redis集群,然后连接其中一个节点,随便add一个指令,测试集群是否可行,结果报出异常(error) CLUSTERDOWN Hash slot not served提示——

[root@localhost rediscluster]# redis-cli -c -h 192.168.25.116 -p 6381
192.168.25.116:6381> zadd z1 1 a
(error) CLUSTERDOWN Hash slot not served

首先,先看一下集群各个节点是否能互相发现,执行以下指令查看各个节点连接情况——

192.168.25.116:6381> cluster nodes
8c5809df064ad7234c6475555411afda026c230f :6381@16381 myself,master - 0 0 0 connected

接着再检查一下当前集群状态,发现目前状态为fail,说明集群没有互连成功——

192.168.25.116:6381> cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:0
cluster_current_epoch:0
cluster_my_epoch:0
cluster_stats_messages_sent:0
cluster_stats_messages_received:0

发现,Redis搭建的集群没有互相发现,故而,只需要在其中一个节点上执行以下指令,手动帮助该节点去发现其他两个节点,因集群是互连的,所以只需要在其中一个节点上手动发现另外节点即可——

192.168.25.116:6381> cluster meet 192.168.25.116 6380
OK
192.168.25.116:6381> cluster meet 192.168.25.116 6382
OK
192.168.25.116:6381> cluster meet 192.168.25.116 6383
OK
192.168.25.116:6381> cluster meet 192.168.25.116 6384
OK
192.168.25.116:6381> cluster meet 192.168.25.116 6385
OK

完成以上指令,查看各个节点状态,发现当前节点已经能发现其他节点了——

192.168.25.116:6381> cluster nodes
a0cf910effc52eda7c5561746c42f8bcd710f735 192.168.25.116:6380@16380 master - 0 1639410795898 0 connected
a0cf910effc52eda7c5561746c42f8bcd710f735 192.168.25.116:6381@16381 myself,master - 0 1639410795898 1 connected
a0cf910effc52eda7c5561746c42f8bcd710f735 192.168.25.116:6382@16382 master - 0 1639410795898 2 connected
a0cf910effc52eda7c5561746c42f8bcd710f735 192.168.25.116:6383@16383 master - 0 1639410795898 3 connected
a0cf910effc52eda7c5561746c42f8bcd710f735 192.168.25.116:6384@16384 master - 0 1639410795898 4 connected
a0cf910effc52eda7c5561746c42f8bcd710f735 192.168.25.116:6385@16385 master - 0 1639410795898 5 connected

再测试集群状态,发现状态依然还是失败,且还报CLUSTERDOWN Hash slot not served异常——

192.168.25.116:6381> cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:3
cluster_size:0
cluster_current_epoch:2
cluster_my_epoch:2
cluster_stats_messages_ping_sent:26
cluster_stats_messages_pong_sent:30
cluster_stats_messages_meet_sent:3
cluster_stats_messages_sent:59
cluster_stats_messages_ping_received:30
cluster_stats_messages_pong_received:29
cluster_stats_messages_received:59
192.168.25.116:6381> zadd z1 1 a
(error) CLUSTERDOWN Hash slot not served

到这一步,说明当前集群存在hash槽异常情况,那么,可以执行以下指令修复下——

[root@localhost rediscluster]# redis-cli --cluster fix 192.168.25.116:6381

回车执行,顿时就会运行打印很多以下信息,说明正在对16384个hash槽重新分配——

>>> Covering slot 10620 with 192.168.25.116:6381
>>> Covering slot 3059 with 192.168.25.116:6381
>>> Covering slot 9764 with 192.168.25.116:6381
>>> Covering slot 11335 with 192.168.25.116:6381
>>> Covering slot 6368 with 192.168.25.116:6381
>>> Covering slot 4884 with 192.168.25.116:6381
>>> Covering slot 15271 with 192.168.25.116:6381
>>> Covering slot 5109 with 192.168.25.116:6381
......

等运行完成后,我们再检查一下集群状态,发现状态已经由刚刚的fail变出ok了,说明hash槽已经正确分配——

192.168.25.116:6381> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:3
cluster_size:3
cluster_current_epoch:19
cluster_my_epoch:18
cluster_stats_messages_ping_sent:1514
cluster_stats_messages_pong_sent:1486
cluster_stats_messages_meet_sent:3
cluster_stats_messages_sent:3003
cluster_stats_messages_ping_received:1486
cluster_stats_messages_pong_received:1517
cluster_stats_messages_received:3003

最后,在其中一台集群上输入以下指令测试下,没有报异常了——

192.168.25.116:6381> zadd z1 1 a
OK
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰阔落好喝Wow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值