Redis的主从复制过程

Posted by KANG's BLOG on Tuesday, March 15, 2022

主从复制过程

  1. slave 服务启动,slave 会建立和 master 的连接,发送 sync 命令。
  2. master 启动一个后台进程将数据库快照保存到 RDB 文件中
  3. 注意:此时如果生成 RDB 文件过程中存在写数据操作会导致 RDB 文件和当前主 redis 数据不一致,所以此时 master 主进程会开始收集写命令并缓存起来。
  4. master 就发送 RDB 文件给 slave
  5. slave 将文件保存到磁盘上,然后加载到内存恢复
  6. master 把缓存的命令转发给 slave

后续 master 收到的写命令都会通过开始建立的连接发送给 slave。 当 master 和 slave 的连接断开时 slave 可以自动重新建立连接。如果 master 同时收到多个 slave 发来的同步连接命令,只会启动一个进程来写数据库镜像,然后发送给所有 slave。

主从复制机制

  • 在redis2.8版本之前

    主从复制从redis每次同步都会从主redis中复制全部的数据,

  • 在2.8之后

    从机连接主机后,会主动发起 PSYNC 命令,从机会提供 master 的 runid(机器标识,随机生成的一个串) 和 offset(数据偏移量,如果offset主从不一致则说明数据不同步),主机验证 runid 和 offset 是否有效,runid 相当于主机身份验证码,用来验证从机上一次连接的主机,如果 runid 验证未通过则,则进行全同步,如果验证通过则说明曾经同步过,根据 offset 同步部分数据。