redis主从复制|8月更文挑战

112 阅读2分钟

这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战

主从复制

在slave启动并连接到Master之后,它将主动发送一个SYNC命令。此后Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件(rdb)到Slave,以完成一次完全同步。而Slave服务器在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。

从上述所述,我们可以得知redis主从复制涉及到两个关键点:全量同步增量同步

全量同步

redis全量复制一般发生在slave初始化阶段,这时slave需要将master上的所有数据都复制一份。具体步骤如下:

  1. slave服务器连接master服务器,发送sync命令。
  2. master服务器收到sync命令后,开始执行bgsave命令生成rdb文件并使用缓冲区记录此后执行的所有写命令。
  3. master服务器bgsave执行完成后,向所有slave服务器发送快照文件(rdb文件),并在发送期间继续记录被执行的写命令。
  4. slave服务器收到快照文件后丢弃所有旧数据,载入收到的快照。
  5. master服务器快照发送完毕后开始向slave服务器发送缓冲区中的写命令
  6. slave服务器完成对快照的载入,开始接收命令请求,并执行来自master服务器缓存区的写命令。

增量同步

redis增量复制指slave初始化后开始正常工作时master服务器发生的写操作同步到slave服务器的过程。增量复制的过程主要是master服务器每执行一个写命令就会像slave服务器发送相同的写命令,slave服务器接收并执行收到的写命令。