Redis的三种集群模式-主从复制

系列文章

概述

Redis集群主要分为三种模式,分别为主从复制模式,Sentinel(哨兵)模式和Cluster模式,本系列将从最简单易懂的主从复制讲起,逐步的讲完三种模式,并简单介绍每种模式的优势和缺陷,相信看完本系列大家一定会对Redis集群有个初步的了解。

我们为什么需要主从复制?

我们都知道电脑是存在损坏的风险的,在单机模式下Redis通过快照等方式将数据保留在本地,如果发生电脑损坏磁盘无法读取的情况,就会导致大量的珍贵数据丢失。主从复制的作用就是将数据分配到多个节点,就算电脑损坏也不再需要担心数据丢失。主从复制还可以应用于读写分离,将读的压力从单节点独自承担,变为多节点共同承担,分摊读取压力。

主从复制是什么?

假设我们有两个Redis节点,主从就是将其中一个Redis节点设置为主(master)节点,另外一个设置为从(slave)节点。然后让slavemaster中的数据复制一份。而后每次master进行数据变更时,slave也要跟随master变更数据,让两个节点的数据永远保持一致。

主从复制示意图

需要注意:
  1. 主节点只能有一个,而从节点可以有很多。
  2. 从节点也可以承接其他从节点的连接同步请求,分摊主节点的同步压力。
  3. 同步操作是以非阻塞方式执行的,也就是说在同步期间数据的读写是不会停止的。

主从复制原理?

这张图图解了主从模式的运行原理
  • 从数据库启动成功后,连接主数据库,发送sync命令。
  • 主数据库接收到sync命令后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令。
  • 主数据库 BGSAVE 执行完后,向所有从数据库发送快照文件,并在发送期间继续记录被执行的写命令。
  • 从数据库收到快照文件后丢弃所有旧数据,载入收到的快照。
  • 主数据库快照发送完毕后开始向从数据库发送缓冲区中的写命令。
  • 从数据库完成对快照的载入,开始接收命令请求,并执行来自主数据库缓冲区的写命令(从数据库初始化完成)。
  • 主数据库每执行一个写命令就会向从数据库发送相同的写命令,从数据库接收并执行收到的写命令(从数据库初始化完成后的操作)。
  • 出现断开重连后,2.8之后的版本会将断线期间的命令传给重数据库,增量复制。
  • 主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。Redis 的策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。

主从复制模式的优势?

  1. 主从复制将数据复制到了多个节点,避免了可能出现的磁盘损坏导致数据丢失的问题。
  2. 主从复制可以创建多个子节点,可将数据的读取操作都交给他们,原先一个机器的工作分摊到多个机器后,可以提升整体的吞吐量。

主从复制模式的缺点?

  1. Redis主从复制在主节点宕机后,需要人工介入去设置一个新的主节点替代原先主节点,不会主动修改。
  2. 主从复制并不是强一致性的,也就是说在还未完全同步的时候,主服务宕机,依然会导致这段未来得及同步内的数据丢失。
  3. 新加入的slave节点和长时间未同步的slave节点都会让主节点进行全量同步,而这个同步对IO的需求是较大的。如果同时启动大量的需要全量同步的节点,会导致主节点IO骤然升高,从而宕机。所以在启动大量需要全量的节点时,需要人为的逐步的启动这些节点。
  4. 数据是复制过去的,也就是所有服务器的数据都是一致的,无法解决数据量过大的问题。

后续文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容