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 看看分片变化
浙公网安备 33010602011771号