文章目录

  • 单机模式
  • 主从模式
  • 哨兵模式
  • 集群模式
  • Cluster群集
  • 为什么要实现Redis Cluster
  • 优缺点
  • 系统优化
  • 1. 单例服务器,服务器本身优化
  • 2. 单例服务器应用服务本身优化


单机模式

单机模式:缓存服务站只有一台redis服务器,对应用进行读和写功能,吞吐量低,容易引起宕机

redis单节点报错CLUSTERDOWN Hash slot not redis集群单节点读压力大_redis

主从模式

主从模式:采用一台redis服务器跟多台从服务器,主对应用做写,从做读,实现读写分离,解决单台redis压力,但是如果主服务器挂掉后需要手动的选取从服务器

redis单节点报错CLUSTERDOWN Hash slot not redis集群单节点读压力大_redis_02

哨兵模式

哨兵模式:这边也有主服务器跟从服务器,并且有哨兵进行对他们的监控状态,如果主挂掉后,会自动选取一个从作为新主,解决可用性问题,但是因为只有一台主服务器所以有大量的写操作,依然有问题

redis单节点报错CLUSTERDOWN Hash slot not redis集群单节点读压力大_redis_03

集群模式

集群模式:通过多个独立的主从,redis对外解决可用和吞吐量问题,但是应用具体写到哪一台主从,集群模式下有16384个哈希槽分别分布在主从上,根据key计算出哈希槽的位置,从而确定在哪一个主从。

redis单节点报错CLUSTERDOWN Hash slot not redis集群单节点读压力大_数据库_04

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之间是互通的)

redis单节点报错CLUSTERDOWN Hash slot not redis集群单节点读压力大_redis_05

系统优化

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. 根据数据流向进行优化