四个交互演示:① 16384 槽位分配 · ② CRC16 路由实验 · ③ MOVED / ASK 重定向 · ④ Gossip 八卦传播
下面是一条「16384 槽位进度条」,按 6 个 master 节点分段着色。你可以加节点、删节点,看槽位如何重新分布—— Cluster 的精髓就在这里:16384 总数不变,只是「重新切配」。
MIGRATE 命令搬运,这一过程客户端可能收到 ASK 重定向(Tab ③ 演示)。
输入任意 key,实时显示:CRC16(key) → % 16384 → 落到哪个 slot → 哪个节点。
右侧是 HashTag 对比演示。
同样是「user 1001 相关」,加 / 不加 HashTag 路由结果完全不同:
结论:带 {user:1001} 的所有 key 落同一 slot 同一节点 → 可以 MGET / 事务 / Lua。
不带 HashTag 时各自飘散,多 key 操作会报 CROSSSLOT。
crc16.c 中同款的 CRC16-CCITT (XMODEM) 算法,
所以这里算出的 slot 与真实 CLUSTER KEYSLOT 命令的结果完全一致。
分两个场景演示客户端重定向:MOVED(路由表过时)和 ASK(slot 正在迁移中)。
ASKING「一次性通行证」,否则会被目标节点 MOVED 回来形成死循环。
6 个节点圆形布局,每秒每节点随机选 5 个发 PING。点「让节点 X 下线」,观察 PFAIL 状态怎么逐步「八卦」到全集群、最终升级为 FAIL。