简介: Redis6.X节点高可用之Cluster数据分片和虚拟哈希槽介绍
- 背景
- 主节点的写能力和存储能力受限
- 单台机器无法满足需求,因此把数据分散存储到多个机器
- 类似案例:mysql分库分表
- 常见的数据分区算法
- 哈希取模
- 对选择的 partitioning key 计算其哈希值,得到的哈希值就是对应的分区
- 范围分片
- 通过确定分区键是否在某个范围内来选择分区
- 一致性Hash分区
- redis cluster集群没有采用一致性哈希方案,而是采用【数据分片】中的哈希槽来进行数据存储与读取的
- 哈希取模
- 什么是Redis的哈希槽 slot
- Redis集群预分好16384个槽,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中
- 大体流程
- 假设主节点的数量为3,将16384个槽位按照【用户自己的规则】去分配这3个节点,每个节点复制一部分槽位
- 节点1的槽位区间范围为0-5460
- 节点2的槽位区间范围为5461-10922
- 节点3的槽位区间范围为10923-16383
- 注意:从节点是没有槽位的,只有主节点才有
- 存储查找
- 对要存储查找的键进行crc16哈希运算,得到一个值,并取模16384,判断这个值在哪个节点的范围区间
- 假设crc16("test_key")%16384=3000,就是节点一
- crc16算法不是简单的hash算法,是一种校验算法
- 使用哈希槽的好处就在于可以方便的添加或移除节点。
- 当需要增加节点时,只需要把其他节点的某些哈希槽挪到新节点就可以了;
- 当需要移除节点时,只需要把移除节点上的哈希槽挪到其他节点就行了
- 假设主节点的数量为3,将16384个槽位按照【用户自己的规则】去分配这3个节点,每个节点复制一部分槽位
本文作者为DBC,转载请注明。