Redis槽位分配查看,快速定位数据分布不均,避免性能瓶颈

文章导读
使用 redis-cli --cluster check 命令快速查看槽位分配情况,定位不均节点:redis-cli -p 7001 --cluster check 127.0.0.1:7001输出示例:[OK] 16384 slots covered.M: 1b9c3e6a8f5d4c2b9e1a7f3d5c8b2e4a127.0.0.1:7001 slots:0-5460 (5461 slo
📋 目录
  1. Redis Cluster 槽位分布查看与优化
  2. 如何快速检查Redis Cluster槽位分布不均
  3. Redis集群槽位分配不均匀问题排查
  4. Redis Cluster 槽位管理命令
  5. 避免Redis Cluster性能瓶颈的最佳实践
A A

使用 redis-cli --cluster check 命令快速查看槽位分配情况,定位不均节点:
redis-cli -p 7001 --cluster check 127.0.0.1:7001
输出示例:
[OK] 16384 slots covered.
M: 1b9c3e6a8f5d4c2b9e1a7f3d5c8b2e4a127.0.0.1:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: 1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p127.0.0.1:7002
5461-10922 (5462 slots) slave
M: 2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q127.0.0.1:7003
slots:10923-16383 (5461 slots) master
如果某个节点 slots 数量明显偏多或偏少,即为不均,可用 redis-cli --cluster rebalance 自动均衡:
redis-cli --cluster rebalance 127.0.0.1:7001 --cluster-weight 1b9c3e6a8f5d4c2b9e1a7f3d5c8b2e4a127.0.0.1:7001=5000

Redis Cluster 槽位分布查看与优化

Redis Cluster 将 16384 个哈希槽(hash slot)分配到各个节点上。每个节点负责一部分槽以及槽中的键。可以使用以下命令查看槽位分配:
1. 连接到任意节点:
redis-cli -c -h 127.0.0.1 -p 7000
2. 执行 CLUSTER SLOTS 命令:
CLUSTER SLOTS
输出会显示每个主节点的槽位范围,例如:
1) 1) (integer) 0
2) (integer) 5460
3) 1) "127.0.0.1"
2) (integer) 7000
4) [1 + 0] [1 + 0]
通过计算每个范围内的槽位数量(end - start + 1),即可判断分布是否均匀。理想情况下每个节点槽位数相差不超过 1。

如何快速检查Redis Cluster槽位分布不均

最简单的方法是使用 redis-cli 的 --cluster check 参数:
./redis-cli --cluster check 192.168.1.100:7000
它会输出类似:
[OK] All nodes agree about slots configuration
>>> Performing hash slots count check
[OK] sum of hash slots in all nodes matches database
M: 192.168.1.100:7001
slots:[0-5460] (5461 slots) master
如果发现某个节点 slots 数量异常,比如一个节点 8000+,另一个只有 5000,就说明分布不均。这时可以用 --cluster rebalance 命令自动调整。

Redis槽位分配查看,快速定位数据分布不均,避免性能瓶颈

Redis集群槽位分配不均匀问题排查

现象:某个节点负载过高,QPS 和 CPU 明显高于其他节点。
排查步骤:
1. redis-cli -c -p 7001
CLUSTER NODES
查看每个节点的 slots 字段,计算槽位数。
2. 或直接:CLUSTER KEYSLOT yourkey 查看键落在哪个槽。
3. 如果确认槽位不均,执行集群再平衡:
redis-cli --cluster rebalance --cluster-weight nodeid=weight 192.168.1.100:7000
weight 参数控制目标槽位占比,默认均匀分配。

Redis Cluster 槽位管理命令

CLUSTER INFO # 集群信息,包括槽位覆盖率
CLUSTER NODES # 详细节点信息,包括负责的槽位
CLUSTER SLOTS # 按槽位范围显示节点
CLUSTER COUNTKEYSINSLOT slot # 某个槽位中的键数量
CLUSTER COUNTKEYSINKEYSINSLOT slot count # 采样统计
这些命令组合使用,就能快速定位数据分布问题,避免热点节点导致性能瓶颈。

Redis槽位分配查看,快速定位数据分布不均,避免性能瓶颈

避免Redis Cluster性能瓶颈的最佳实践

1. 部署时均匀分配槽位,避免手动 add-node 后忘记 rebalance。
2. 定期执行 --cluster check 监控。
3. 使用 hash_tag {} 控制相关键落同一槽。
4. 扩容时逐步添加节点并 rebalance。
5. 监控工具如 redis-exporter + Grafana 显示每个节点槽位数和键数。

FAQ
Q: 如何判断槽位分配是否均匀?
A: 总槽位16384,除以节点数,每节点应得相近数量,相差不超过1。
Q: rebalance命令会丢失数据吗?
A: 不会,Redis会原子性移动槽位和键,保证一致性。
Q: 怎么查看具体某个key在哪个节点?
A: redis-cli -c -p 7000,自动重定向到对应节点。
Q: 槽位不均会导致什么问题?
A: 热点节点负载高,QPS瓶颈,内存压力大,影响整体性能。
Q: 自动rebalance需要指定权重吗?
A: 不需要,默认均匀分配,可用--cluster-weight自定义。