第一部分 Cluster简介
redis从3.0版本开始支持Cluster。Redis Cluster是一个高性能高可用的分布式系统,可以在多个redis节点间共享数据。
第二部分 Cluster原理
redis cluster引入哈希槽(hash slot),实现数据自动分片,即实现分布式功能。同时采用主从复制模型,实现高可用。
一、数据分片
0、分片规则
redis cluster有2^14(16384)个哈希槽, 哈希槽编号从0-16383, 每个key通过CRC16哈希算法计算后对16384取模,来决定放置哪个槽。cluster的每个master节点负责一部分哈希槽。
1、分片举例
假如集群有6个节点,3主3从的模式,哈希槽默认分配方式为:
节点master1包含0到5500号哈希槽。
节点master2包含5501到11000号哈希槽。
节点master3包含11001到16383号哈希槽。
具体如下图所示:参考这里
2、数据读取
以上主要说的是数据写入,那么数据如何读取呢?
客户端随机地请求集群中任意一个Redis实例,然后由该实例将请求转发给正确的节点。Redis Cluster实现了一种混合形式的查询路由,但并不是直接将请求从一个节点转发到另一个节点,而是在客户端的帮助下直接重定向到正确的节点。
Redis Cluster 节点架构图如下:
节点通讯原理看这里
3、增加节点
如果需要增加节点master4, 只需要从节点master1, master2, master3上移动部分哈希槽到master4上。
4、删除节点
如果需要删除节点master1, 只需要把master1上的哈希槽移动到master2和master3上,然后把哈希槽为空的master1删除即可。
5、优势
将哈希槽从一个节点移动到另一个节点,节点并不会停止服务。增加、删除节点并不会造成集群不可用。
二、主从复制
集群每个master节点都有N个slave节点,保证了部分节点下线或故障的时候集群仍可以正常运作。
例如master2故障了,集群会从master2节点的所以slave中投票选举一个作为master节点,继续处理5501 号至 11000 号的哈希槽。如果节点master2和它的全部从节点都下线了,那么集群将无法正常运行, 因为集群找不到节点来处理5501号至11000号哈希槽。
三、心跳机制
Redis集群-Cluster实现原理
参考:
Redis 集群教程Redis cluster tutorial
Redis 集群实现原理探讨
Redis Cluster 原理初探
redis集群原理