赞
踩
官网地址: Redis cluster specification | Redis
由于数据量过大,单个 Master
复制集难以承担,因此需要对 多个复制集 进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是 Redis
的集群,其作用是提供在多个 Redis
节点间共享数据的程序集。
Redis
集群支持多个 Master
,每个 Master
下可以挂在多个 Slave
。Cluster
自带 Sentinel
的故障转移机制,内置了高可用,无需单独使用哨兵的功能。Redis
节点的连接,不需要连接集群中的所有节点,只需要连接集群中任意可用节点即可。槽位slot
负责分配各个物理服务节点。由对应的集群来负责维护 节点 、插槽 和 数据 之间的关系。**`Redis集群`** 没有采用一致性 **`hash`**,而是采用了 **哈希槽** 的的概念。
**`Redis集群`** 一共有 **16384** 个哈希槽,每个 **`key`** 通过 **`CRC16`** 算法后,对 **16384** 取模来决定放置哪个槽。集群中每个 **主节点** 负责一部分哈希槽。
举例: 当前集群由3个主节点
定义: 使用 Redis集群
时我们会将存储的数据分散到多台 Redis
机器(Master
)上,这称为 分片 。简言之,集群中的每个 Redis
实例(Master
)都被认为是整个数据的一个分片。
为了找到指定 key
的分片,我们对 key
进行 CRC16(key)
算法处理并通过对总分片数量(16383
)取模。然后,使用确定性哈希函数,这意味着指定的 key
将多次始终映射到同一个 分片 ,我们可以推断将来读取特定 key
的位置。
方便增加和删除 Redis
主节点。
例如: 增加D主节点,需要将A、B、C中部分槽位分给D。
例如: 删除A主节点,将A的所有槽位分给B、C。然后将没有任何槽位的A节点在集群中删除即可。
由于从一个主节点将哈希槽移动到另一个主节点,并不会停止服务。所以,无论增加删除或者改变某个主节点的哈希槽的数量并不会对集群造成不可用状态。
哈希取模分区
用户每次读写操作都是根据公式:hash(key) % n
个机器台数,计算出哈希值,用来决定数据映射到哪一个节点上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。