1.redis-cluster结构
redis2.9版本出现了redis-cluster,测试版本,从3.0正式推出redis-cluster,这个结构的出现彻底解决了搭建使用高可用分布式集群的难处
redis-cluster是一个既可以高可用主从故障转移,也可以分片计算,分布式处理数据.从结构上来看比之前高可用分布式做了变换,但是主从复制,故障转移依然存在.分布式计算逻辑不是hash取余,不是一致性hash,hash槽道
2.特性
- 所有节点之间两两互联通信的,底层二进制协议优化传输速度,是redis-cluster的基础
- 哨兵进程消失了,但是哨兵逻辑 没有消失,整合到了master中,集群最小结构是需要3个master存在的,master由于两两互联,可以监听集群所有节点通过master执行投票操作管理集群
- redis-cli客户端可以只连接其中一个节点,发送命令,就可以实现数据分片的计算,集群内部定义的分片计算逻辑--hash 槽
- 在集群中以特殊的内存数据结构记录槽道的数据slot ,分配槽道号 [0,1,2,3…16383]16384个槽道,当数据到达节点之后(set name haha),对key值先做hash取模(散列取余对16384)运算得到 槽道号,槽道号会分片给多个节点管理,通过这种关系key与槽道强耦合的绑定,但是槽道和节点是松耦合,可以实现数据的集群迁移.
3.槽道的工作效果
搭建的集群中,会有16384个槽道被分配给多个节点,每个节点管理其中一部分槽道
分布式计算定义 的计算方法已经是hash槽,外界客户端无论使用哪种分布式计算逻辑,在集群内部都会重新计算分片.
当数据到达某个节点之后,暂时先不处理数据,这个节点作为集群一员先要计算槽道逻辑
1.hash取模 得到0-16383之间整数
2.节点判断这个整数是否在当前节点管理范围
- 所属权判断true 直接处理数据set get del
- 所属权为false 重定向客户端到正确节点发送命令
3.重定向的节点重新执行上述逻辑.
4.数据迁移
在当前槽道逻辑中,槽道和数据key强耦合,槽道和节点是松耦合,可以将槽道迁移到别的地方,数据也会一并迁移,接触了key和节点强耦合关系
换一种方式重新描述一下客户端访问集群任何一个节点的过程
当客户端访问集群任何一个节点:
1.key值计算hash取模得到slot槽道
2.当前节点判断slot归属权
3.如果归属权为false -----重定向客户端到正确节点
4.如果归属权为true ------直接处理当前客户端命令