Redis复习之三种模式

272 阅读5分钟

主从复制模式

当我们单台redis节点故障时,我们可以使用AOF+RDB进行数据的恢复, 但是如果节点的磁盘出现了问题,那么丢失数据问题将不可避免。

因此我们将Redis数据库复制多份部署在不同的服务器,Redis提供了复制功能,当一台数据库节点更新后,会将数据同步到其他数据节点。

主从模式中有两种数据库

主数据库:主数据库可以进行读写操作。

从数据库:从数据只能进行读操作。

一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数据库。当写操作发生时主数据库会将数据同步给从数据库。

总结:

引入主从复制机制的目的有两个

一个是读写分离,分担 "master" 的读写压力

一个是方便做容灾恢复

主从复制原理:

1、从服务器启动时,向主服务器发送请求。

2、主服务器接收到请求时会开始创建一个RDB快照文件,并对此时接受的命令进行缓存

3、RDB文件建立好后发送给从服务器,从服务器接受后开始写入新数据。

4、主服务器发送完RDB快照会将缓存指令发送给从服务器,进行新的数据同步,从服务器接收到开始写入。

5、之后每当从服务器接收到一个命令,都会同步给从服务器。

上述的同步方式,在同步时,slave和master都是非阻塞的方式进行的,此时master仍可查询、更新数据,而slave节点依旧可以返回之前的数据(不一定,根据参数配置,也可能返回正在同步的提示)。

并且,Slave可以接受其他Slave的连接和同步请求,可以有效分担master的同步压力。

主从复制模式的优缺点:

优点

1、主从复制可以分担单节点读写压力,将读压力分担一部分给从节点。

2、防止单节点磁盘故障数据丢失。

缺点:

1、主从复制如果主节点宕机,需要手动进行节点切换。才能恢复服务。

2、如果一次启动过多从节点,那么主节点会开始进行多台全量数据同步,可能造成主节点宕机

3、在线扩容较难

4、如果主节点宕机,此时部分数据未进行同步并切换了主节点,那么重启后会造成数据不同步的问题。

哨兵模式

主从模式当主节点故障时需要手动进行故障切换,因此引入了哨兵模式,通过哨兵来监控redis主节点服务的可用性

原理:

哨兵进程会不断的向所有redis节点发送命令,当主节点故障无法响应哨兵的请求时,会将从节点切换为主节点。

哨兵切换步骤:

1、哨兵每秒钟向集群中所有的哨兵、主节点、从节点发送ping命令

2、当主节点无法响应时,会被当前哨兵标记为主观下线,

3、当有足够数量的哨兵标记此节点处于主观下线状态,则被标记为客观下线。

4、此是哨兵会向此主节点的所有从节点发送info命令,获取信息,进行选举更换主节点。

当没有足够的哨兵认为主节点主观下线,那么该节点的主观下线状态将被移除。并且如果主节点响应了哨兵的请求,那么仍然会移除此节点的主观下线状态。

优点:

1、所有主从复制的优点都有,因为是从主从模式衍生而来。

2、哨兵模式可以自动进行故障主节点切换

缺点:

1、难以在线扩容

集群模式:

集群模式是使每台redis节点都存储部分数据。提升了redis的扩展能力

Redis的集群模式使用了哈希槽位的概念,Redis集群中总共有16384个槽位,对每个key进行计算后决定放入那个槽位,这种结构非常适合添加删除节点,当增加节点时,将之前节点中各分出一部分给新加槽位。当删除节点时,将此节点的槽位分给其他几个节点即可。

集群模式还支持主从复制,一个主节点可以挂载多个从节点,当一个主节点宕机时,从节点就会被启用。

如何判断主节点宕机,集群模式并没有哨兵来判断,而是通过其他主节点与某个节点A的ping-pong通讯来判断,当超过半数的主节点与A通信超时,那么A会被认为下线,启用他的从节点。

当无可用节点时,那么根据Redis的配置可能会造成部分数据访问不到或者Redis服务不可用。

优点:

1、极大降低了redis扩容难度

2、支持了故障自动切换和主从复制的优点

缺点:

1、所有节点需要进行ping-pong,虽然进行了优化,但是仍有大量的网络开销