redis选择多少个slots迁移
当你执行:
redis-cli --cluster reshard 127.0.0.1:7000
Redis CLI 会问你:
How many slots do you want to move (from 1 to 16384)?
这个问题其实是:
🚚 你打算“从已有的主节点中”抽出多少个 slots,迁移给新加入的主节点。
✅ 为什么要“选择要迁移的 slot 数量”?
因为 Redis Cluster 中的 slot 是分片的最小单位,所有的 key 都通过 CRC16(key) 算法分布到 0~16383 之间的一个槽位。
新增主节点之后,它默认 没有负责任何 slot(没有数据),所以你需要把一部分 slot 分给它,它才会:
-
管 slot
-
存 key
-
被客户端路由选中
🧠 举个例子来直观理解:
你当前是 3 主节点:
-
7000 管理 slot:0 - 5460
-
7001 管理 slot:5461 - 10922
-
7002 管理 slot:10923 - 16383
这 3 台节点“瓜分”了 16384 个 slot
现在你新增了一个主节点 7006,它刚进来啥都没:
docker run --name redis-7006 ...
然后你执行:
redis-cli --cluster reshard 127.0.0.1:7000
当它问你:
How many slots do you want to move? 4096
意思就是:
“你想让新节点接管多少个槽位?”
你可以按比例来决定,比如:
-
4096 约等于 1/4,总共 16384
-
表示你打算“让出 1/4 的工作量”给新节点
✅ Redis 会做什么?
Redis 会帮你:
-
从现有主节点中 挑出 slot(通常平均从几个老主节点中抽)
-
把这些 slot 的“所属权”分给新节点(用 CLUSTER SETSLOT)
-
把对应的 key 从老节点迁移到新节点(用 MIGRATE)
⚠️:迁移过程中 Redis 是**“边迁移边服务”**的,不会影响线上运行!
🤔 那我该选多少 slots 呢?
|
场景 |
建议迁移 slot 数 |
|---|---|
|
新增一个主节点(4 主) |
4096(= 16384 ÷ 4) |
|
想让节点分担更多(热点压力) |
多迁点,比如 6000 |
|
测试环境、非全量迁移 |
随便迁 1000 slots 都可以 |
✅ 总结一句话:
Redis Cluster 使用 slot 分片机制,新增主节点默认不管任何 slot,
你需要通过 reshard 命令 选择要迁移的 slot 数量,来让它“参与分片”,否则新节点就只是个空壳。
浙公网安备 33010602011771号