_3主3从的`Redis集群`搭建之哈希槽算法
_3主3从的Redis集群
搭建之哈希槽算法
目的
解决一致性哈希算法
数据倾斜问题
实质
是一个数组,数组[0,2^14-1]形成hash slot空间
作用
解决均匀分配问题,在数据和节点之间加入一层(哈希槽slot)用于管理数据和节点之间的关系,现在相当于节点里放槽,槽里放数据
方便数据移动
哈希解决的映射问题,使用key的哈希值来计算所在的槽,便于数据分配
多少个hash槽
一个集群只能有16384个槽,编号0-16383(0-2^14-1)
这些槽会分配给集群中的所有主节点,分配策略没有要求。可以指定哪些编号的槽分配给哪个主节点。集群会记录节点和槽的对应关系。
接下来就需要对key求哈希值,然后对16384取余,余数是几key就落入对应的槽里。slot = CRC16(key) % 16384
。
以槽为单位移动数据,因为槽的数目是固定的,处理起来比较容易,这样数据移动问题就解决了。
举个栗子
Redis 集群中内置了 16384 个哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,也就是映射到某个节点上。如下代码,key之A 、B在Node2, key之C落在Node3上
首先有几个redis就把0-16383分成几个
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GGLSS!
评论
WalineValine