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

2024-02-29 1392阅读

温馨提示:这篇文章已超过394天没有更新,请注意相关的内容是否还可用!

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

Redis集群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
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]