一、产生背景
1、虽然单机redis的qps已经达到了10万之多,但是有些突发情况下并发量可能会达到百万级,还有内存不够用的问题,这些情况下,单机已经无法满足业务环境
2、直观的解决方案就是增加服务器
3、在2015年的redis3.0+版本中加入了redis cluster,可以实现分布式集群的架构,将原本单机的数据进行分区,分到若干个子集中
二、分区方式
1、顺序分区
①原理:数据均匀顺序分布到若干节点,比如300个数据分配3个节点,1100号数据在1号节点,101200号数据在2号节点,201~300号数据在3号节点,很多关系型数据库就是使用此方式
②特点:数据分散度容易倾斜,键值分布与业务相关,可顺序访问,支持批量操作
③产品举例:bigtable
2、哈希分区
①原理:数据无序分布到若干节点,如节点取余分区,一致性哈希分区,虚拟槽分区
②特点:数据分散度高,键值分布与业务无关,无法顺序访问,支持批量操作
③产品举例:memcache,redis cluster
④节点取余分区:节点扩容与缩容时,很多数据需要迁移,建议翻倍扩容或半数缩容,可以使数据偏迁移率在最低的50%
⑤一致性哈希分区:每个节点负责一部分数据,对key进行hash,得到结果在node1和node2之间,就放到node2中,顺时针查找,假设添加一个新节点node5,现在只需要迁移一小部分数据,不会影响node3和node4的数据,只会迁移node1和node2的数据,节点比较多的话合适,假设有1000个节点,加一个只要迁移千分之一的数据
⑥虚拟槽分区:预设虚拟槽,每个槽映射一个数据子集,如redis cluster,槽的范围是0~16383,使用CRC16哈希函数,服务端管理槽和节点,把16384个槽平均分配到每个节点,客户端会把数据发送给任意一个节点,通过CRC16对key进行哈希对16383进行取余,算出当前key属于哪部分槽,属于哪个节点,每个节点都会记录是不是负责这部分槽,如果是负责的,进行保存,如果槽不在自己范围内,redis cluster是共享消息的模式,它知道哪个节点负责哪些槽,返回结果,让客户端去找对应的节点
三、分布式集群搭建
1、架构:每个节点之间相互通信,都负责读写,客户端去存,如果不是当前节点,会返回应该存到哪个节点
2、redis cluster特性:节点,meet,指派槽,复制,高可用
①meetA meet一下C,C回复一下,A meet一下B ,B回复一下,这样B和C也能相互感知,A,B,C之间就可以相关交互数据,所有节点共享消息
②指派槽:总共有16383个槽,平均分配到每个节点上
四、安装使用等:http://liuqingzheng.top/db/Redis系列/08-Redis系列之-Redis-Cluster/