文章目录
- 单机模式
- 主从模式
- 哨兵模式
- 集群模式
- Cluster群集
- 为什么要实现Redis Cluster
- 优缺点
- 系统优化
- 1. 单例服务器,服务器本身优化
- 2. 单例服务器应用服务本身优化
单机模式
单机模式:缓存服务站只有一台redis服务器,对应用进行读和写功能,吞吐量低,容易引起宕机
主从模式
主从模式:采用一台redis服务器跟多台从服务器,主对应用做写,从做读,实现读写分离,解决单台redis压力,但是如果主服务器挂掉后需要手动的选取从服务器
哨兵模式
哨兵模式:这边也有主服务器跟从服务器,并且有哨兵进行对他们的监控状态,如果主挂掉后,会自动选取一个从作为新主,解决可用性问题,但是因为只有一台主服务器所以有大量的写操作,依然有问题
集群模式
集群模式:通过多个独立的主从,redis对外解决可用和吞吐量问题,但是应用具体写到哪一台主从,集群模式下有16384个哈希槽分别分布在主从上,根据key计算出哈希槽的位置,从而确定在哪一个主从。
Cluster群集
Redis Cluster是Redis官方提供的Redis集群功能
为什么要实现Redis Cluster
1.主从复制不能实现高可用
2.随着公司发展,用户数量增多,并发越来越多,业务需要更高的QPS,而主从复制中单机的QPS可能无法满足业务需求
3.数据量的考虑,现有服务器内存不能满足业务数据的需要时,单纯向服务器添加内存不能达到要求,此时需要考虑分布式需求,把数据分布到不同服务器上
4.网络流量需求:业务的流量已经超过服务器的网卡的上限值,可以考虑使用分布式来进行分流
5.离线计算,需要中间环节缓冲等别的需求
- 为什么要做数据分布
全量数据,单机Redis节点无法满足要求,按照分区规则把数据分到若干个子集当中
特点
所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
节点的fail是通过集群中超过半数的节点检测失效时才生效。
客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。
Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。
优缺点
优点
将Redis的写操作分摊到了多个节点上,提高写的并发能力,扩容简单
缺点
每个Node承担着互相监听、高并发数据写入、高并发数据读出,工作任务繁重
如果一个节点宕机,整个集群不可用
生产中环境
redis-cluster与主从模式搭配使用,即可避免出现的集群宕机问题
架构方式(Master之间是互通的)
系统优化
1. 单例服务器,服务器本身优化
硬件资源选择(系统五大资源)
磁盘 固态盘 SCSI(硬件磁盘阵列)
服务器内存条选择(本地服务器和云服务器)
CPU 核数选择
网络网卡(本地服务器和云服务器),需要考虑负载压力下的网络流量 QPS
服务器选型(麒麟、晓龙、浪潮英信、华为、华三、戴尔(类型:刀片、塔式、机柜))
以上需要计算费用成本,还需要考虑到该服务器上的服务在运行时消耗的性能比例(需要预留给系统一部分资源)
服务本身环境的选择
操作系统选择 Linux 发行版:centos ubantu redhat server debian alphon mac SUSE(PS:虚拟化 KVM XEN FUFE)
基于操作系统,依赖环境。选择最小化安装还是指定操作系统版本的安装 + 指定内核版本。软件是否有依赖(例如:tomcat 需要 JDK,编译需要 gcc gcc-c++ pcre …)
软件资源优化 五大负载+内核优化(TCP协议相关、队列相关、路由转发、重定向、端口、文件打开数、系统的软硬限制等)
2. 单例服务器应用服务本身优化
以 redis 为例
首先从启动读取的恢复文件来看,基于AOF需要开启 AOF功能(RDB 默认)
RDB 中 save M N 触发周期的选择判定,这会影响到磁盘资源的使用
AOF 中选择合适的 syncwrite 同步写入磁盘的策略 everysecond
使用过程中,需要考虑到的是内存的使用量( OOM )
内存淘汰策略:惰性淘汰+定期删除,禁止淘汰+定期删除。根据情况选择合适的淘汰策略(配置文件中定义)。
持久化方向
持久化的功能在保证数据完整性的同时,依然会持续性的对磁盘产生存储压力(压力来源于 AOF 和 RDB 生成的数据文件,AOF 和 RDB 的日志文件)。
数据/日志文件的定期归档
日志文件的分割(保存在日志中心)
共享存储 NFS GFS fastDFS
redis主进程
可以使用两个 redis 主进程配合实现备份冗余,提高抗高并发的能力
3. 集群优化
4. 架构优化
5. 根据数据流向进行优化