redis 架构

110 阅读5分钟

1.单机模式

单机模式就是在一台服务器上安装redis,然后启动,所有业务都调用这一台redis服务器。

image.png

优点:

1.部署简单,只需要在一台服务器上安装并启动redis就行。

2.成本低,没有备用节点,不需要其他的开支。

3.数据一致性,单机不需要同步数据,数据天然一致性。

缺点:

1.可靠性较弱,一旦服务器宕机,所有业务都无法使用redis服务。

2.性能受限于CPU的处理能力。

2.主从模式

主从模式是指有多台redis服务器,其中一台主要负责写入客户端请求数据,称为主节点(master),其他服务专门负责处理客户端的读取数据的请求,不负责写入数据,称为从节点(slave)。主节点写入的数据会复制的各个从节点上,并且数据复制的方向是单向的,只能从主节点复制到从节点。(注意这里说的主从模式主节点只有一台)

image.png

优点

1.高性能 :读写分离,减轻服务压力

2.高可用: 主从数据冗余备份,如果某一个从节点挂掉,还有其他从节点可以读;主节点挂掉,可以手动升级从节点尾主节点

缺点

1.手动切换:master宕机后,slave节点升级成新的master节点后,需要手动切换主机

2.数据不一致:主从节点同步可能会有延迟,读的时候可能不是最新数据,只能保证最终一致性;从节点切换为主节点会有部分数据不能及时同步从服务器,造成数据不一致。

3.slave宕机后,多个slave恢复后,大量的SYNC同步会造成master IO压力倍增。

4.主从模式只要一个maste节点,所以master节点的写数据的能力会受到单机的限制。

3.哨兵模式

哨兵模式主要是在主从复制模式基础上,增加了自动化的故障恢复功能。因为主从复制模式下,当master节点宕机后,虽然slave节点会升级成新的master节点,但是升级后的slave节点的ip顺其自然的就称为了新的master节点ip,原先其他的slave节点配置的master节点的ip也是需要变更的,在主从复制模式下,这种变更是需要人工手动去修改配置文件的。而哨兵模式则完美的解决了这一缺陷,实现了快速的自动恢复,不再需要人工修改 (注意这里说是在主从复制模式基础上,所以主节点也是只有一个的) image.png

哨兵的主要功能:

1.集群监控:负责监控 master 和 slave 进程是否正常工作。

2.消息通知:如果某个 Redis 实例宕机,那么哨兵负责向(哨兵间,客户端)发送消息。

3.自动故障转移:当master宕机后,由哨兵负责重新在slave节点中选举出新的master节点,并将其他slave连接到新的master,以及告知客户端新的服务器地址。更好的为客户端提供高可用服务。

优点:(在主从模式的优点之外)

1.自动主从切换

缺点:(主从模式的缺点之外还有的缺点) 哨兵的部署会占用额外的服务器资源,且不提供数据的读取服务。哨兵模式除了解决了主从模式手动切换主从节点的问题外,其他主从模式存在的问题,哨兵模式基本也都存在。

集群模式 redis cluster

首先交代一下上面的模式的一些缺点

1.主节点只有一个,高并发情况下存在性能瓶颈

2.数据存储:每台机器都存储完整的一份数据,单台机器的存储是有上限的

集群模式解决了上面两个问题

Redis集群采用去中心化的思想,没有中心节点的说法,对于客户端来说,整个集群可以看成一个整体,可以连接任意一个节点进行操作,就像操作单一Redis实例一样,不需要任何代理中间件,当客户端操作的key没有分配到该node上时,Redis会返回转向指令,指向正确的node。 Redis也内置了高可用机制,支持N个master节点,每个master节点都可以挂载多个slave节点,当master节点挂掉时,集群会提升它的某个slave节点作为新的master节点。Redis集群可以看成多个主从架构组合起来的,每一个主从架构可以看成一个节点(其中,只有master节点具有处理请求的能力,slave节点主要是用于节点的高可用)

image.png

这种模式使用的一致性哈希是为了解决节点的负载均衡中有个节点失败退出的问题 www.bilibili.com/read/cv1568…

每个Redis实例会自己维护一份slot - Redis节点的映射关系,假设你在节点A上设置了某个key,但是这个key通过CRC16计算出来的槽位是由节点B维护的,那么就会提示你需要去节点B上进行操作