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

在搭建Redis5.x版本的集群环境出现各节点无法互相发现与Hash槽分配异常 CLUSTERDOWN Hash slot not served的情况

在Linux同一台服务器下搭建伪集群——

127.0.0.1:6380
127.0.0.1:6381
127.0.0.1:6382
127.0.0.1:6383
127.0.0.1:6384
127.0.0.1:6385

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

[root@localhost bin]# redis-cli -c -p 6380
127.0.0.1:6380> auth longshine
OK
127.0.0.1:6380> set a 1
(error) CLUSTERDOWN Hash slot not served

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

127.0.0.1:6380> cluster nodes
e59d13b92dca3edd52d2928083f85aff5a87cb84 :6380@16380 myself,master - 0 0 0 connected

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

127.0.0.1:6380> 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搭建的集群没有互相发现,故而,只需要在其中一台客户端上执行以下指令,手动帮助该节点去发现其他两个节点,因集群是互连的,所以只需要在其中一台上手动发现另外两台即可— cluster meet

127.0.0.1:6380> cluster meet 127.0.0.1 6387
OK
127.0.0.1:6380> cluster meet 127.0.0.1 6381
OK
127.0.0.1:6380> cluster meet 127.0.0.1 6382
OK
127.0.0.1:6380> cluster meet 127.0.0.1 6383
OK
127.0.0.1:6380> cluster meet 127.0.0.1 6384
OK
127.0.0.1:6380> cluster meet 127.0.0.1 6385
OK

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

127.0.0.1:6380> cluster nodes
b5736409d6e318fe53942b8cfd3a47c9dd8406e3 127.0.0.1:6383@16383 master - 0 1669613645000 3 connected
19e38f8eaca8be3d8e955ec95632c36e9f9a748d 127.0.0.1:6381@16381 master - 0 1669613646000 1 connected
e59d13b92dca3edd52d2928083f85aff5a87cb84 127.0.0.1:6380@16380 myself,master - 0 1669613644000 0 connected
b3e67205d783eaef13c3968150367100bdab4d07 127.0.0.1:6385@16385 master - 0 1669613646000 5 connected
23bcc3819d06c6853949a59d33ddaf922fb86fef 127.0.0.1:6384@16384 master - 0 1669613647596 4 connected
054b0b5ff6f383c34c33ba98a5ac2fb9658f08e4 127.0.0.1:6382@16382 master - 0 1669613646593 2 connected

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

127.0.0.1:6380> set key1 ll
(error) CLUSTERDOWN Hash slot not served
127.0.0.1:6380> cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:0
cluster_current_epoch:5
cluster_my_epoch:0
cluster_stats_messages_ping_sent:1211
cluster_stats_messages_pong_sent:53
cluster_stats_messages_meet_sent:13
cluster_stats_messages_sent:1277
cluster_stats_messages_ping_received:53
cluster_stats_messages_pong_received:47
cluster_stats_messages_received:100

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

[root@localhost bin]# ./redis-cli --cluster fix 127.0.0.1:6380

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

>>> Covering slot 15195 with 127.0.0.1:6380
>>> Covering slot 4062 with 127.0.0.1:6380
>>> Covering slot 7708 with 127.0.0.1:6380
>>> Covering slot 11909 with 127.0.0.1:6380
>>> Covering slot 9828 with 127.0.0.1:6380
>>> Covering slot 5152 with 127.0.0.1:6380
>>> Covering slot 8446 with 127.0.0.1:6380
>>> Covering slot 5345 with 127.0.0.1:6380
......

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

127.0.0.1:6380> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:6
cluster_current_epoch:42
cluster_my_epoch:41
cluster_stats_messages_ping_sent:1382
cluster_stats_messages_pong_sent:224
cluster_stats_messages_meet_sent:13
cluster_stats_messages_sent:1619
cluster_stats_messages_ping_received:224
cluster_stats_messages_pong_received:218
cluster_stats_messages_received:442
127.0.0.1:6380> set key1 lll
OK
127.0.0.1:6380> get key1
"lll"

这样就解决了。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值