我就是奇迹

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Redis Cluster 的核心机制之一:动态扩容后分片是否会重新组织

Redis Cluster 的核心机制之一:动态扩容后分片是否会重新组织,这个问题非常关键,特别是在生产环境中做 集群水平扩展 时必须搞清楚!

 


 

 

✅ 简短回答:

 

 

是的!当你往 Redis Cluster 中新增一个“主节点”时,Redis 会重新分配槽(slots),也就是你说的“重新组织分片”。

 


 

 

🔍 举例说明

 

 

你原来是:

3 主节点:
- 7000(0 - 5460)
- 7001(5461 - 10922)
- 7002(10923 - 16383)

现在你新增了一个 主节点 7006 + 从节点 7007

 

这时:

 

 

✅ Redis 会 

重新迁移 slots

,比如:

 

 

  • 原来 7000 管 0~5460,可能迁出一部分给 7006

  • 7001、7002 同理

 

 

最终变成:

节点

负责的 slot 范围(示例)

7000

0 - 4000

7001

4001 - 8000

7002

8001 - 12000

7006

12001 - 16383

 

 


 

 

🔁 Redis 会怎么做这个迁移?

 

 

你有两种方式:

 

 

① 自动迁移(推荐)

 

 

使用 redis-cli 的 reshard 命令自动迁移 slot:

redis-cli --cluster reshard 127.0.0.1:7000

然后根据提示:

 

  • 选择迁移多少个 slots(如 4000)

  • 选择目标节点(就是新主节点 ID)

  • 确认迁移

 

 

Redis 会自动做:

 

  • slot 重新分配

  • key 迁移(migrate 命令)

 

 


 

 

② 手动迁移(适合高级控制)

 

# 第一步:设置 slot 迁出
CLUSTER SETSLOT 12000-14000 MIGRATING TO <target-node-id>

# 第二步:目标节点准备接收
CLUSTER SETSLOT 12000-14000 IMPORTING FROM <source-node-id>

# 第三步:移动数据(循环执行)
MIGRATE host port key 0 timeout

这个太繁琐,一般自动就够用了!

 


 

 

🧠 再加一丛会怎么样?

 

 

  • 如果你只是给 7006 新增一个从节点(比如 7007),那么它只是 增加高可用性

  • 不会影响分片逻辑(不动 slots)

 

 

只有新增“主节点”才会触发 slot 重新分布

 


 

 

🧠 再总结一下:

 

操作

是否会重新分片?

说明

新增主节点

✅ 会

需手动或自动迁移 slot

新增从节点

❌ 不会

只是用于高可用,不分配 slot

删除主节点

✅ 会

需要迁移 slot 给其他主

删除从节点

❌ 不会

只影响对应主节点的高可用性

 

 


 

 

✅ 推荐你下一步可以试试:

 

 

  • 自己搭好一个 3主3从 Redis Cluster

  • 然后 add-node 加一个主节点

  • reshard 迁移一些 slot

  • 再用 cluster slots 或 cluster nodes 看看分片变化

 

posted on 2025-04-21 11:40  我就是奇迹  阅读(55)  评论(0)    收藏  举报