[ERR] Not all 16384 slots are covered by nodes.

早些时间公司redis集群环境的某台机子冗机了,同时还导致了部分slot数据分片丢失;

在用check检查集群运行状态时,遇到错误;

[root@node01 src]# ./redis-trib.rb check172.168.63.202:7000


Connecting to node 172.168.63.202:7000: OK

Connecting to node 172.168.63.203:7000: OK

Connecting to node 172.168.63.201:7000: OK

>>> Performing Cluster Check(using node 172.168.63.202:7000)

M: 449de2d2a4b799ceb858501b5b78ab91504c72e0172.168.63.202:7000

  slots: (0 slots) master

   0additional replica(s)

M: db9d26b1d15889ad2950382f4f32639606f9a94b172.168.63.203:7000

  slots: (0 slots) master

   0additional replica(s)

M: f90924f71308eb434038fc8a5f481d3661324792172.168.63.201:7000

  slots: (0 slots) master

   0additional replica(s)

[OK] All nodes agree about slotsconfiguration.

>>> Check for open slots...

>>> Check slots coverage...

[ERR] Not all 16384 slots are covered by nodes.


原因:

这个往往是由于主node移除了,但是并没有移除node上面的slot,从而导致了slot总数没有达到16384,其实也就是slots分布不正确。以在删除节点的时候一定要注意删除的是否是Master主节点。

1)、官方是推荐使用redis-trib.rb fix 来修复集群…. ….  通过cluster nodes看到7001这个节点被干掉了… 那么

[root@node01 src]#  ./redis-trib.rb fix 172.168.63.201:7001


修复完成后再用check命令检查下是否正确

[root@node01 src]# ./redis-trib.rb check172.168.63.202:7000

只要输入任意集群中节点即可,会自动检查所有相关节点。可以查看相应的输出看下是否是每个Master都有了slots,如果分布不均匀那可以使用下面的方式重新分配slot:

[root@node01 src]#  ./redis-trib.rb reshard 172.168.63.201:7001




  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 这个错误提示的意思是:并不是所有的16384个槽位都被节点覆盖了。 这通常是在Redis集群中出现的问题,因为Redis集群将数据分散在多个节点上,每个节点负责一部分槽位。如果出现这个错误,说明有一些槽位没有被任何节点覆盖,导致数据无法正常存储和访问。 解决这个问题的方法是检查集群中的节点数量和配置,确保每个节点都覆盖了一定数量的槽位。如果需要,可以添加或删除节点来平衡槽位的分配。 ### 回答2: 这个错误是 Redis 集群中的一个常见错误,通常情况下是由于 Redis 集群中的某些节点无法正常连接而出现的。有时候在 Redis 集群中添加或删除节点时也可能出现这个错误。 错误消息中的“16384”是 Redis 集群中的槽数量,这意味着集群中需要有足够的节点来覆盖所有的槽。如果有任何一个槽没有被任何一个节点覆盖,那么这个错误就会被触发。 解决这个错误的方法主要有以下几个步骤: 1. 检查节点数量:首先,你需要检查 Redis 集群中节点的数量,确保有足够多的节点来覆盖所有的槽。如果节点数量不够,就需要添加更多的节点。你可以使用 Redis-trib 命令行工具来添加节点。 2. 检查节点连接:如果节点数量足够,那么你需要检查每个节点是否正常连接。你可以使用 Redis-trib 工具来检查节点的健康状况。如果有任何一个节点没有正常连接,那么你需要修复这个问题,确保节点能够正常运行。 3. 重新分配槽位:如果所有的节点都已经正常连接,但是仍然出现了错误,那么你需要重新分配槽位。重新分配槽位可以通过 Redis-trib 命令行工具来完成。你需要按照一定的算法重新分配槽位,确保每个节点都覆盖了至少一个槽位。 总之,这个错误可能会在 Redis 集群中的各种情况下出现。要解决这个错误,需要仔细检查每个节点的连接状况,并尝试重新分配槽位。通过这些方法,你应该可以解决这个错误,并保持 Redis 集群的正常运行。 ### 回答3: 这个错误提示出现在Redis节点集群中,在Redis节点的部署和维护过程中,节点的数量和分配是非常重要的问题。在一个节点集群中,如果不是所有的16384个槽都被节点覆盖,那么就会出现这个错误。这个错误会导致数据在节点中出现丢失或者无法正确的被访问。 那么为什么会出现这个问题呢?通常情况下,出现这个问题的原因可能是以下几种: 1. 新增节点没有正确的加入集群:如果新的节点没有正确的加入到整个Redis节点集群中,那么就会出现节点数量和分配不匹配的问题。 2. 节点信息更新出现问题:节点的信息更新需要在所有节点之间进行同步,如果信息同步出现问题,就会导致节点的数量和分配不匹配。 3. 节点宕机或者网络问题:如果一个节点宕机或者网络出现问题,那么就会导致整个集群的节点数量和分配不匹配。 解决这个问题的方法通常有以下几种: 1. 确认节点状态和信息:首先需要确认节点的状态和信息都是正确的,可以通过cluster info命令来查看节点的状态和信息。 2. 检查集群配置:需要检查集群的配置是否正确,比如槽的分配和节点的数量是否匹配,可以通过cluster slots命令来检查。 3. 重新平衡节点:如果节点数量和分配不匹配,可以通过重新平衡节点的方式来解决问题,可以使用redis-trib.rb进行操作。 总之,解决Redis节点集群中出现[err] not all 16384 slots are covered by nodes的问题,需要对节点的部署和维护进行严格的管理,确保节点数量和分配的正确性,增强节点的容错能力和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值