RedisCluster slot

Redis Cluster slot

slot 是什么

我们都知道在集群模式下key是需要进行路由的,那就需要有路由策略,Redis Cluster并没有使用一致性hash的方案,而是使用分配slot的方式进行key路由。

如何分配slot

Redis Cluster为整个集群定义了一共16384个slot,并通过crc16的hash函数来对key进行取模,将结果路由到预先分配过slot的相应节点上。

  • 1.将节点加入Redis Cluster中

  • 2.为集群中的节点分配slot(分配完成后,每个即诶单不仅直到自己的slot列表,还需要知道别的节点的slot列表)

  • 3.分配完成后,key会根据crc16计算出得结果和16384取模进行slot定位,从而定位到具体节点。

举个例子

  • 节点A保存了0-5500的slot

  • 节点B保存了5501-11000的slot

  • 节点C保存了11001-16383的slot

当客户端要执行 SET test 123 实际上会执行crc16(123)

具体流程如下:

  • 客户端调用SET test 123

  • 任意节点接受到指令,将执行crc16(test)=63534

  • 63534%16384=14382

  • 14382术语节点C因此将key test路由到C节点。

    • 因为指令是发到任意节点的,如果这个节点不是C节点,则会触发MOVED命令,将命令发到相应node(各个节点保存了其他节点的slot列表)

重新分配slot

所有分片的算法都会面对一个问题,就是当节点增加或减少时怎么处理,Redis Cluster也不例外

当有节点D加入进来原本的A,B,C节点需要拿出一部分slot给到D,这样的操作就叫做slot重新分配。

redis-trib

redis Cluster 是使用redis-trib来自动实现的slot重新分配

RedisCluster slot_第1张图片
image.png

你可能感兴趣的:(RedisCluster slot)