一、背景
主从集群模式和哨兵集群模式可以解决高并发读、高可用的问题,但是仍然有两个问题没有解决:(1)海量数据存储问题。(2)高并发写的问题。 为了解决这两个问题,使用一种新的集群模式:分片集群结构。
二、分片集群结构
2.1 分片集群结构的特征
- 集群中有多个master,每个master保存不同的数据。
- 每个master有多个slave节点。
- master节点之间通过ping监测彼此的健康状态。
- 客户端请求可以访问集群任意节点,最终都会被转发到正确节点。
2.2 节点路由原理
Redis分片集群引入了哈希槽的概念。Redis集群有16384(2^14)个哈希槽。每个key通过CRC16算法校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。
- 路由规则:根据key的
有效部分(如果key前面有大括号{},大括号的内容就是有效部分,如果没有,则以key本身作为有效部分。)对16384取余,余数作为插槽,寻找插槽所在的实例。
如上图所示,
- 有三个master实例,则每个实例最少可分配5461个插槽。如果实例数增多,可重新分配。
- 命令set name ithema,计算name的hash值并对16384取余,余数作为槽数放到第三个master实例上。
- 命令set {aaa}name ithema,计算有效部分aaa的hash值并对16384取余,余数作为槽数放到第一个master实例上。
2.3 分片集群结构的作用
分片集群主要解决的是海量数据存储的问题。集群中有多个master,每个master保存不同的数据,并且每个master可以有多个slave节点,就可以继续增大集群的高并发能力。同时master节点之间通过ping监测彼此的健康状态,就类似于哨兵模式了。客户端请求可以访问集群任意节点,最终都会被转发到正确节点。