Redis-Cluster
一 Redis Cluser介绍背景
1.1问题
|
|
1.2 解决
|
|
二 数据分布(分布式数据库)
2.1 存在问题
|
|
2.2 分区方式
分布方式 | 特点 | 产品 |
---|---|---|
哈希分布 | 数据分散度高,建值分布于业务无关,无法顺序访问,支持批量操作 | 一致性哈希memcache,redis cluster,其他缓存产品 |
顺序分布 | 数据分散度易倾斜,建值业务相关,可顺序访问,支持批量操作 | BigTable,HBase |
2.2.1 顺序分区
|
|
2.2.2 哈希分区
|
|
2.2.2 .1 节点取余分区
节点扩容,添加一个节点,存在问题,很多数据需要偏移,总偏移量要大于80%
推荐翻倍扩容,由3变成6,数据量迁移为50%,比80%降低
|
|
2.2.2 .2 一致性哈希分区
每个节点负责一部分数据,对key进行hash,得到结果在node1和node2之间,就放到node2中,顺时针查找
假设添加一个新节点node5,现在只需要迁移一小部分数据,不会影响node3和node4的数据,只会迁移node1和node2的数据
节点比较多的话合适,假设有1000个节点,加一个只要迁移千分之一的数据
|
|
2.2.2 .3 虚拟槽分区
预设虚拟槽:每个槽映射一个数据子集,一般比节点数大
良好的哈希函数:如CRC16
服务端管理节点、槽、数据:如redis cluster(槽的范围0–16383)
|
|
三 集群搭建
3. 1 单机架构
3.2 分布式架构
每个节点之间相互通信,都负责读写,客户端去存,如果不是当前节点,会返回应该存到哪个节点
3.3 Redis Cluster架构
节点,meet,指派槽,复制,高可用
meet解释
A meet一下C,C回复一下,A meet一下B ,B回复一下,这样B和C也能相互感知,A,B,C之间就可以相关交互数据,所有节点共享消息
指派槽
总共有16384个槽,平均分配到每个节点上
3.4 原生安装
1 配置开启节点
|
|
2 meet(相互通信)
|
|
3 指派槽
|
|
4 主从
|
|
|
|