跳至主要內容

Redis主从架构

Yaien Blog原创大约 2 分钟DBRedis

Redis主从架构

工作原理

主从复制(全量复制)

  1. 如果你为 master 节点配置了一个 slave ,不管这个 slave 是否第一次连接上 master ,它都会发送一个 PSYNVC 命令给 master 请求复制数据。
  2. master 节点收到 PSYNC 命令后,会在后台通过 bgsave 进行数据持久化生成最新的rdb快照文件,持久化期间, master 会继续接收客户端的请求,他会把这些可能修改数据集的请求缓存在内存中。
  3. 当持久化进行完毕后, maser 会把这份rdb文件数据集发送给 slaveslave 会把己收到的数据进行rdb持久化,然后加载到内存中。若 master 内存中存在后续修改的数据集,再将之前缓存的命令发送给 slave
  4. masterslave 之间的链接由于某种原因断开连接时, slave 能够自动链接 master ,如果 master 收到多个 slave 并发链接请求,它只会进行一次持久化,而不是一次链接持久化一次,会把这一份持久化的数据发送给多个并发连接的 slave
Redis主从复制(全量复制)
Redis主从复制(全量复制)

主从复制(部分复制)

  1. masterslave 断开连接,一般都会对正分数据进行复制。但是从2.8版本开始,redis改用可以支持部分数据复制的命令 PSYNCmaster 同步数据,slavemaster 能够在网络连接断开重连后进行部分数据复制(断电续传);
  2. master 会在内存中创建一个缓存队列,缓存最近一段时间的数据,master 和它所有的 slave 都维护了缓存的数据下标 offsetmaster进程id
  3. 当网络断开,slave 请求 master 继续进行未完成的复制,从所记录的数据下标开始,如果 master 进程ID变了或者 slave 节点数据下标 offset 已经不在 master 缓存队列中时,会进行一次 全量复制
Reids主从复制(部分复制)
Reids主从复制(部分复制)

⚠️注意:repl buffer中存的数据是先进先出的,当偏移量(offset)已经找不到,则全量复制

问题

主从复制风暴

从上述可以看到我们redis主从同步的执行流程,当我们一个主节点存在很多从节点,从节点同时复制主节点会导致主节点压力过大。这就是我们所说的主从复制风暴。

对于主从复制风暴,我们可以通过让部分的从从节点不再从主节点同步数据,而是跟从节点同步数据,具体结构如下:

主从节点同步模型
主从节点同步模型
上次编辑于:
贡献者: yanggl