Redis的三种模式-主从复制、哨兵、Cluster

Redis单机版

优点:
  • 单机版的Redis也有很多优点,比如实现简单、维护简单、部署简单、维护成本非常低,不需要其它额外的开支。
缺点:
  • 单点故障问题。一个Redis挂了,所有的请求就会直接打在了DB上。
  • 并且一个Redis抗并发数量也是有限的,同时要兼顾读写两种请求,只要访问量一上来,Redis就受不了了。另一方面单机版Redis数据量存储也是有限的,数据量一大,再重启Redis的时候,就会非常的慢,所以局限性也是比较大的。

主从模式

  一个主数据库,多个从数据库。主数据库(master)可以读也可以写(read/write),从数据库仅读(only read)。但是,主从模式一般实现读写分离,主数据库仅写,减轻主数据库的压力。
  当开启主从模式的时候,它的具体工作机制如下:

  • 当slave启动时会向master发送请求同步的命令【这里说一下:Redis2.8之前使用sync同步命令,Redis2.8之后使用psync命令。两者不同之处我们待会在后面简单说一下】当slave启动时向master请求同步,master节点收到从数据库的命令后通过bgsave保存快照(RDB持久化),并且在保存快照期间收到的命令会被缓存起来。
  • 然后master会将保存的快照发送给slave,并且继续缓存期间的写命令。
  • slave收到主数据库发送过来的快照就会加载到自己的数据库中。
  • 最后master将缓存的命令同步给slave,slave收到命令后执行一遍,这样master与slave数据就保持一致了。
优点

1、之所以运用主从复制,是因为主从复制在一定程度上解决了单机版并发量大,导致请求延迟或者redis宕机服务停止的问题。
2、从数据库分担主数据库的读压力,若是主数据库是只写模式,那么实现读写分离,主数据库就没有了读压力了。
3、另一方面解决了单机版单点故障的问题,若是主数据库挂了,那么从数据库可以随时顶上来,综上来说,主从模式一定程度上提高了系统的可用性和性能,是实现哨兵和集群的基础。
4、主从同步以异步方式进行同步,期间Redis仍然可以响应客户端提交的查询和更新的请求。

缺点

1、数据的一致性问题,假如主数据库写操作完成,那么他的数据会被复制到从数据库,若是还没有及时复制到从数据库,读请求又来了,此时读取的数据就不是最新的数据。
2、若是主从同步的过程网络出故障了,导致主从同步失败,也会出现问题数据一致性的问题。
3、一旦主节点宕机,从节点晋升为主节点,同时需要修改应用方的主节点地址,还需要命令所有从节点去复制新的主节点,整个过程需要人工干预。
4、主节点的写能力受到单机的限制。
5、主节点的存储能力受到单机的限制。
6、原生复制的弊端在早期的版本中也会比较突出,比如:Redis 复制中断后,从节点会发起 psync。
7、此时如果同步不成功,则会进行全量同步,主库执行全量备份的同时,可能会造成毫秒或秒级的卡顿。

全量复制和部分(增量)复制

1、sync命令仅支持全量复制过程,psync支持全量和部分复制。
2、全量复制是指主节点将所有数据都发送给从节点,但这样当数据量很大时,会对主从节点和网络造成很大的开销。
3、增量复制用于处理主从复制中因网络闪断原因造成的数据丢失场景,当从节点再次连接上主节点后,如果(条件允许),主节点会补发丢失数据给从节点,因为补发的数据远远小于全量数据,可以有效避免全量复制的过高开销。需要注意的是,如果网络中断时间过长,造成主节点没有能够完整的保存中断期间执行的写命令,则无法进行部分复制,仍使用全量复制。

主从复制会存在以下问题:

  • 一旦主节点宕机,从节点晋升为主节点,同时需要修改应用方的主节点地址,还需要命令所有从节点去复制新的主节点,整个过程需要人工干预。
  • 主节点的写能力受到单机的限制。
  • 主节点的存储能力受到单机的限制。
  • 原生复制的弊端在早期的版本中也会比较突出,比如:Redis复制中断后,从节点会发起psync。此时如果同步不成功,则会进行全量同步,主库执行全量备份的同时,可能会造成毫秒或秒级的卡顿。

比较主流的解决方案是什么呢?

   哨兵。

说下哨兵有哪些功能?

   Redis Sentinel(哨兵)主要功能包括:主节点存活检测、主从运行情况检测、自动故障转移、主从切换。

说一下哨兵的工作原理?

  • 对于每个sentinel节点都需要定期执行一下任务:每个sentinel以每秒一次的频率,向它所知的主服务器、从服务器以及其他的sentinel实例发送一个PING命令。
  • 如果一个实例距离最后一次有效回复PING命令的时间超过所指定的值,那么这个实例会被sentinel标记为主观下线。
  • 如果一个主服务器被标记为主观下线,那么正在监视这个服务器的所有sentinel节点,要以每秒一次的频率确认主服务器是否的确进入了主观下线状态。
  • 如果有足够数量的sentinel(至少要达到配置文件指定的数量)在指定的时间范围内同意主服务器的主观下线状态,那么这个主服务器被标记为客观下线。
  • 一般情况下,每个sentinel会以每10秒一次的频率向它已知的所有主服务器和从服务器发送INFO命令。当一个主服务器被标记为客观下线时,sentinel向下线主服务器的所有从服务器发送INFO命令的频率会从10秒一次改为每秒一次。
  • sentinel和其他sentinel协商客观下线的主节点的状态,如果处于SDOWN状态,则投票自动选出新的主节点,将剩余从节点指向新的主节点进行数据复制。
  • 当没有足够数量的sentinel同意主服务器下线时,主服务器的客观下线状态就会被移除。当主服务器重新向sentinel的PING命令返回有效回复时,主服务器的主观下线状态就会被移除。
    https://www.cnblogs.com/Eugene-Jin/p/10819601.html

Redis集群

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值