Redis---架构模式

参见:Redis面试题高可用redis服务架构分析与搭建

目录

单机版

主从复制

主从复制+哨兵(sentinel)

集群(proxy 型)

集群(直连型): redis cluster 架构

简单总结


单机版

å¾çæè¿°

特点:简单 问题: 1、内存容量有限 2、处理能力有限 3、无法高可用。

 

主从复制

Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),而通过复制创建出来的服务器复制品则为从服务器(slave)。 只要主从服务器之间的网络连接正常,主从服务器两者会具有相同的数据,主服务器就会一直将发生在自己身上的数据更新同步 给从服务器,从而一直保证主从服务器的数据相同。 特点:

  1. master/slave 角色
  2. master/slave 数据相同
  3. 降低 master 读压力在转交从库

问题:

  1. 无法保证高可用:master挂了之后,服务就不可用了;同时,如果没有配置Redis持久化,Redis内部存储的数据都会丢失。
  2. 没有解决 master 写的压力

主从复制+哨兵(sentinel)

简单配置见:https://www.cnblogs.com/jaycekon/p/6237562.html

å¾çæè¿°

Redis sentinel 是一个分布式系统中监控 redis 主从服务器,并在主服务器下线时自动进行故障转移。其中三个特性:

  • 监控(Monitoring): Sentinel 会不断地检查你的主服务器(master)和从服务器(slaver)是否运作正常。
  • 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover): 主从切换,当一个主服务器(master)不能正常工作时, Sentinel 会开始一次自动故障迁移操作。Sentinel进程可以连通并投票选取新的master时,实现主从切换。

特点:

  1. 保证高可用
  2. 监控各个节点
  3. 自动故障迁移

缺点:

  1. 主从模式,切换需要时间丢数据
  2. 没有解决 master 写的压力

 

集群(proxy 型)

å¾çæè¿°

 

集群(直连型): redis cluster 架构

redis集群模式配置支持3.0及以上的版本。目的提高redis的可用性,但是只能保证一定程度的高可用。(集群中一个节点挂了,那么整个集群就挂了)

redis-cluster架构图

架构简介:

redis是一个开源的key value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群;

  1. redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点
  2. redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制)每个节点都是一个redis实例
  3. 投票容错机制:为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法;
  4. 什么时候集群被认为挂了: 如果集群中任意一个节点挂了,而且该节点没有从节点(slave节点),那么这个集群就挂了。
    1. 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作
    2. 所以每个Redis集群理论上最多可以有16384个节点
  5. Redis 集群有16384个哈希槽( [0-16384]个slot ),每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽;
    1. 节点 A 包含 0 到 5500号哈希槽.
    2. 节点 B 包含5501 到 11000 号哈希槽.
    3. 节点 C 包含11001 到 16384号哈希槽.
  6. 保证集群的高可用redis-cluster的主从复制模型

为了实现一定程度的高可用,比如某个节点挂掉的情况下,服务仍然能够正常使用。redis使用了主从复制模型,例如创建三个节点的集群A,B,C;在集群创建的时候或者过段时间为三个节点,添加从节点A1,B1,C1。此时整个集群有三个master节点和三个slave节点。A节点down掉的情况,集群推举A1为主节点继续服务。当然,如果A,A1都挂掉的情况,集群则无法使用。所以这也是为什么集群只能保证一定程度的高可用。

参考:https://my.oschina.net/kbdxe/blog/2963902https://www.cnblogs.com/yuanermen/p/5717885.htmlredis集群架构(含面试题解析)

简单总结:

  • redis主从:是备份关系, 我们操作主库,数据也会同步到从库。 无法提供高可用:master节点挂了后,服务就不可用;
  • redis哨兵:哨兵保证了故障自动切换,保证特殊情况故障自动切换,哨兵盯着你的“redis主从集群”,如果master节点挂了,它会从slave节点中选出新的节点作为master节点;
  • redis集群:集群保证的是高并发。集群会导致数据的分散,整个redis集群会分成一堆数据槽,即不同的key会放到不不同的槽中。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值