04 Cluster 分片
Cluster 分片
Cluster 客户端按 16384 个槽定位主节点;MOVED 更新长期路由,ASK 只用于迁槽过程中的一次临时重定向。
版本:Redis Open Source 8.10.3;核实日期:2026-11-12。官方在线文档可能继续更新,源码链接固定到对应发布标签。图为原理抽象,省略非本页重点。
specification {
element actor { style { shape person; color amber } }
element system { style { color muted } }
element component { style { color primary } }
element storage { style { shape storage; color green } }
}
model {
c = actor 'Cluster 客户端'
a = system '节点 A'
b = system '槽所属节点 B'
bus = component 'Cluster 总线'
}
views {
dynamic view index {
title '核心链路'
variant sequence
c -> c '按 key 或 hash tag 计算 CRC16 槽号'
c -> a '向缓存路由节点发送命令'
a -> c '槽已转移时返回 MOVED'
c -> c '更新槽缓存'
c -> b '重试命令到目标节点'
b -> c '执行并返回结果'
a -> bus '交换节点与槽状态'
bus -> b '传播集群拓扑信息'
}
}
关键判断
- 同槽键由同一主节点处理;多键操作通常要求相关键处在同槽,hash tag 可让一组键共用槽。
- 普通请求由客户端直接发给目标节点;Cluster 总线交换拓扑与故障信息,不是所有命令的转发代理。
- 迁槽期间 ASK 要求客户端对目标节点先发 ASKING 再执行本次命令;不要据此永久覆盖槽映射。
边界
图画稳定槽归属变化的 MOVED 分支;Cluster 的异步复制仍有写丢失窗口,分片不等于强一致。