浅谈4种redis不同部署模式的理解和对比

redis现在可以说是很多系统项目必备的中间件了,凭借其自身缓存的特性,不管是一些单体的项目还是微服务系统,都能看到redis 的身影;当然,就redis的使用来说,常见的有4中部署方式,下面开始逐一列举:
常见部署模式:
1、单机模式;
2、主从模式;
3、哨兵模式(sentinel);
4、集群模式(redis-cluster);

这四种部署方式是逐层递进的关系,每个序号其实是前一个序号的升级版,可以理解成大序号对应的部署方式是前一个小序号的升级版,弥补了前一个小序号的缺陷而设计的;

一、单机模式

系统架构中只有一个redis节点,没有备用的节点,适用于数据可靠性不高的纯缓存业务场景;可以通过RDB和AOF持久化机制能将数据持久化到硬盘上,但数据是存储在一台服务器上的,如果服务器出现硬盘故障等问题,会导致数据不可用
优点

  • 部署方便,架构简单;
  • 容易维护;

缺点

  • 数据可靠性无法保证;
  • 存在单点故障,服务宕机后,缓存无法使用;
  • 高性能受限于单核 CPU 的处理能力(Redis 是单线程机制),CPU 为主要瓶颈,所以适合操作命令简单,排序、计算较少的场景。也可以考虑用 Memcached 替代

二、主从模式

可以实现两个redis服务部署在不同机器上,一主一从模式;主节点有数据写入后会同步到从节点内,写操作一般在主节点上进行,从节点进行读的操作;从节点可以设置只读属性,但是主节点没有只写属性;
主从模式避免了单机部署的单点故障,实现了读写分离;
优点

  • 实现了读写分离,提供了redis工作效率;在写操作少读操作多的场景下,可以扩充多个从节点,来提高读的效率;
  • 实现了数据备份,可以提供多个数据副本;从节点宕机了,整个redis服务影响很小;

缺点

  • 主节点故障后,会影响服务写的操作,但是读操作可以继续使用,需要通过手动干预,将从节点变为主节点,redis服务才能恢复正常;可用性低;不具备容错和自动恢复的功能;(从数据库中使用SLAVE NO ONE命令将从数据库提升成主数据继续服务,启动之前崩溃的主数据库,然后使用SLAVEOF命令将其设置成新的主数据库的从数据库,即可同步数据。)
  • 主节点只能有一个,对于写操作比较多的场景下写操作压力无法分散,当个主节点存储能力也受到限制;

三、 哨兵模式(sentinel)

为解决前两种模式的缺陷,redis在2.8版本后正式提供了稳定版本的哨兵模式; 哨兵模式核心还是主从复制,只不过在相对于主从模式在主节点宕机导致不可写的情况下,多了一个竞选机制:从所有的从节点竞选出新的主节点。竞选机制的实现,是依赖于在系统中启动一个sentinel进程。哨兵本身也有单点故障的问题,所以在一个一主多从的Redis系统中,可以使用多个哨兵进行监控,哨兵不仅会监控主数据库和从数据库,哨兵之间也会相互监控。每一个哨兵都是一个独立的进程,作为进程,它会独立运行;这样就形成了下面的架构图
在这里插入图片描述

哨兵可以监控所有服务器是否可以正常运行,通过发送命令返回监控服务器的运行状态; 当哨兵监控到master宕机了,会自动将slave切换成master,然后通过发布订阅模式通知其他从服务器,修改配置文件,让他们切换master;已经宕机的那台服务也会变为新master的slave节点;也就是说即使原来旧的服务恢复后,不会恢复原来的master身份,而是作为一个新的slave;

优点

  • 实现了故障发现和自动转移;

缺点

  • 主动切换的过程存在服务不可用,切换时间越长,不可用越长;
  • 哨兵模式只有一个主节点对外提供服务,写操作存在单机瓶颈;
  • 中心化的集群实现方案;仅存在一个主节点;

四、集群模式(redis-cluster)

redis在3.0版本后正式推出了Redis Cluster来实现分布式集群解决方案,主要解决 Redis 分布式方面的需求,比如,当遇到单机内存,并发和流量等瓶颈的时候,Redis Cluster 能起到很好的负载均衡的目的。
Redis Cluster 集群节点最小配置 6 个节点以上(3 主 3 从),其中主节点提供读写操作,从节点作为备用节点,不提供请求,只作为故障转移使用。Redis Cluster 采用虚拟槽分区,所有的键根据哈希函数映射到 0~16383 个整数槽内,每个节点负责维护一部分槽以及槽所印映射的键值数据。 cluster集群模式在每台节点上都存储了不同的数据,解决了单机redis容量限制。将数据按照一定规则分配到多台机器,这样redis就行分布式集群高扩展性的优势了;
Redis Cluster采用Sharding技术(分片和路由都是在服务端实现),多主多从,每一个分区都是由一个Redis主机和多个从机组成,片区和片区之间是相互平行的,实现了完全去中心化。架构图如下:
在这里插入图片描述

优点

  • 无中心架构,即有多个master节点,不像哨兵模式下仅有一个。这样写的压力就可以分散了
  • 数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布;
  • 可扩展性:可线性扩展到 1000 多个节点,节点可动态添加或删除;
  • 高可用性:部分节点不可用时,集群仍可用。节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave 到 Master 的角色提升。

缺点

  • 如果主节点A和它的从节点A1都宕机了,那么该集群就无法再提供服务了;如果某个槽归属的小群内都不可用时,整个服务仍然是不可用的!通过cluster-require-full-coverageyes 控制该特性, 默认yes 即需要集群完整,方可对外提供服务,设置为no ,其他的小集群仍然可以对外提供服务。

redis-cluster主要是针对海量数据+高并发+高可用的场景,海量数据,如果业务场景的数据量很大,那么建议就用redis-cluster,数据量不是很大时,使用sentinel哨兵就够了。redis-cluster的性能和高可用性均优于哨兵模式。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值