我就是奇迹

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

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 会帮你:

 

  1. 从现有主节点中 挑出 slot(通常平均从几个老主节点中抽)

  2. 把这些 slot 的“所属权”分给新节点(用 CLUSTER SETSLOT)

  3. 把对应的 key 从老节点迁移到新节点(用 MIGRATE)

 

 

⚠️:迁移过程中 Redis 是**“边迁移边服务”**的,不会影响线上运行!

 


 

 

🤔 那我该选多少 slots 呢?

 

场景

建议迁移 slot 数

新增一个主节点(4 主)

4096(= 16384 ÷ 4)

想让节点分担更多(热点压力)

多迁点,比如 6000

测试环境、非全量迁移

随便迁 1000 slots 都可以

 

 


 

 

✅ 总结一句话:

 

 

Redis Cluster 使用 slot 分片机制,新增主节点默认不管任何 slot,
你需要通过 reshard 命令 选择要迁移的 slot 数量,来让它“参与分片”,否则新节点就只是个空壳。
posted on 2025-04-21 11:46  我就是奇迹  阅读(33)  评论(0)    收藏  举报