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

这篇具有很好参考价值的文章主要介绍了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

最后,在其中一台集群上输入以下指令测试下,没有报异常了——文章来源地址https://www.toymoban.com/news/detail-791678.html

192.168.25.116:6381> zadd z1 1 a
OK

到了这里,关于Redis集群Hash槽分配异常 CLUSTERDOWN Hash slot not served的解决方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 解决Elasticsearch集群 master_not_discovered_exception 异常

    错误描述 查看集群健康返回以下错误: 我通过docker命令在三台机器上分别启动es应用后,单个节点可以通过网络访问,但是他们彼此之间却显示无法通信,导致选举失败,发现不了主节点。 问题排查 查看es日志发现: java.net.NoRouteToHostException: No route to host (Host unreachable) 重要

    2024年02月01日
    浏览(16)
  • K8s集群某节点出现异常,新分配到node上面的pod不能ping通外部pod,同节点pod、宿主机IP也不行,外部pod也不可以ping通IP

    K8s集群某节点出现异常,新分配到node上面的pod不能ping通外部pod,同节点pod、宿主机IP也不行,外部pod也不可以ping通IP IP地址和集群的dns地址一致,通过该节点其他pod对这个问题pod进行ping,发现还是不通,ping同节点其他pod是正常的,问题定位在这个pod上面,接着怀疑是svc未绑

    2024年02月03日
    浏览(14)
  • ②【Hash】Redis常用数据类型:Hash [使用手册]

    ②【Hash】Redis常用数据类型:Hash [使用手册]

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ redis hash 是一个String类型的field(字段)和value(值)的映射表。 redis中每个hash可以存储2^32-1个键值对(40多亿

    2024年02月04日
    浏览(29)
  • redis Hash类型命令

    Redis中的Hash类型有多个常用命令可用于对Hash键进行操作。以下是一些常见的Redis Hash类型命令: HSET:设置Hash字段的值。 它将指定字段与相应的值关联起来,如果字段已经存在,则更新其值,如果字段不存在,则创建一个新的字段并设置值。 具体的命令语法如下: 其中,

    2024年02月13日
    浏览(10)
  • Redis 哈希( Hash )

    【一】简介   Redis hash 是一个键值对集合。  Redis hash 是一个 string 类型的  field  和  value  的映射表, hash 特别适合用于存储对象。 类似 Java 里面的 Map String , Object   用户 ID 为查找的 key ,存储的 value 用户对象包含姓名,年龄,生日等信息,如果用普通的 key/value 结构来存

    2024年02月12日
    浏览(9)
  • redis—Hash哈希

    redis—Hash哈希

    目录 前言 1.常见命令 1.1命令小结 1.2内部编码 2.使用场景 几乎所有的主流编程语言都提供了哈希(hash) 类型,它们的叫法可能是哈希、字典、关联数组、映射。在Redis中,哈希类型是指值本身又是一个键值对结构,形如key= \\\"key\\\", value={{ field1, value1 }, ... {fieldN, valueN }}, Redis 键值对

    2024年02月04日
    浏览(7)
  • redis------Hash操作(字典)

    redis------Hash操作(字典)

     Hash操作,redis中Hash在内存中的存储格式如下图:  # hash类型就是咱们python中的字典,key-value,字典又叫hash类型   字典的key必须可hash -字典类型在底层存储,基于数组存的     key---{key:value,key:value}   hset(name, key, value) # name对应的hash中设置一个键值对(不存在,则创建;否则

    2024年02月12日
    浏览(8)
  • 【Redis】Redis 哈希 Hash 键值对集合操作 ( 哈希 Hash 键值对集合简介 | 查询操作 | 增加操作 | 修改操作 )

    【Redis】Redis 哈希 Hash 键值对集合操作 ( 哈希 Hash 键值对集合简介 | 查询操作 | 增加操作 | 修改操作 )

    Redis 中的 Hash 数据 是一个 键值对集合 , 类似于 Java 中的 Map 集合 ; Hash 数据底层数据结构是 : 压缩列表 ZipList : Hash 中的 键值对 长度较短时 使用 压缩列表 ; 哈希表 HashTable : Hash 中的 键值对 长度较长时 使用 哈希表 ; Redis 中存储对象的方式 : 存储序列化之后的数据 : 将 对象

    2024年02月15日
    浏览(10)
  • 6.Redis-hash

    6.Redis-hash

    哈希类型中的映射关系通常称为field-value,⽤于区分 Redis 整体的键值对(key-value),注意这⾥的value是指field对应的值,不是键(key)对应的值,请注意 value 在不同上下⽂的作⽤。 hset 作用:设置 hash 中指定的字段(field)的值(value) 语法: HSET key field value [field value ...] 返

    2024年02月10日
    浏览(6)
  • Redis学习2 - 哈希(Hash)

    Redis学习2 - 哈希(Hash)

    Hash操作 Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。 Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿) 1. Hset Hset 命令用于为哈希表中的字段赋值 。 如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。 如果字段已

    2023年04月18日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包