这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战
主从复制
在slave启动并连接到Master之后,它将主动发送一个SYNC
命令。此后Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件(rdb)
到Slave,以完成一次完全同步
。而Slave服务器在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。
从上述所述,我们可以得知redis主从复制涉及到两个关键点:全量同步
和增量同步
。
全量同步
redis全量复制一般发生在slave初始化阶段,这时slave需要将master上的所有数据都复制一份。具体步骤如下:
- slave服务器连接master服务器,发送
sync
命令。 - master服务器收到sync命令后,开始执行
bgsave
命令生成rdb文件并使用缓冲区记录
此后执行的所有写命令。 - master服务器bgsave执行完成后,向所有slave服务器发送
快照文件
(rdb文件),并在发送期间继续记录
被执行的写命令。 - slave服务器收到快照文件后丢弃所有旧数据,
载入
收到的快照。 - master服务器快照发送完毕后开始向slave服务器
发送缓冲区中的写命令
。 - slave服务器完成对快照的载入,开始
接收命令请
求,并执行来自master服务器缓存区的写命令。
增量同步
redis增量复制指slave初始化后开始正常工作
时master服务器发生的写操作同步
到slave服务器的过程。增量复制的过程主要是master服务器每执行一个写命令就会像slave服务器发送相同的写命令,slave服务器接收并执行收到的写命令。