前言
虽然前面介绍的Redis主从模式和Redis哨兵原理能够解决Redis单机问题, 但是业务发展过程中遇到的峰值瓶颈.
- redis提供的服务OPS可以达到10万/秒,当前业务OPS已经达到10万/秒
- 内存单机容量达到256G,当前业务需求内存容量1T
使用集群的方式可以快速解决上述问题
1. Redis-Cluster集群架构简介
集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果.
集群作用
- 分散单台服务器的访问压力,实现负载均衡
- 分散单台服务器的存储压力,实现可扩展性
- 降低单台服务器宕机带来的业务灾难
2. Redis-Cluster集群结构设计原理
其实Redis集群就是将多个服务器横向扩展在一起, 存储原理底层也是利用碎片化管理进行的.
2.1 数据存储设计
Redis的数据结构就是key-value的模式进行存储,存储时, key经过一定运算进行设计存储.
- 通过算法设计, 计算出key应该保存的位置
- 将所有的存储空间计划切割成16384份, 每台主机保存一部分, 每份代表的是一个存储空间(注意: 不是一个key独占一份存储空间), 每一份是一个槽
- 将key按照计算出的结果放到对应的存储空间.
- 增加可扩展性.
2.2 集群内部通讯设计
- 各个数据库相互通信, 保存各个库中槽的编号数据
- 比如, A节点保存编号1-10的槽, B节点保存编号11-20的槽, C节点保存编号21-30的槽, D节点保存编号31-40的槽空间, 等等…
- 每台节点上都保存着其他节点的槽编号信息.
- 客户端查询redis中的数据时, 会访问集群中的某一个节点, 如果key的存储位置正好在该节点的槽空间上, 则直接返回客户端结果.
- 如果key的位置没有在该节点上, 则会告诉客户端对应的节点, 客户端再去对应节点上读取数据.