文章目录
前言
在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选 项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制 的服务器为主服务器(master),而对主服务器进行复制的服务器则被 称为从服务器(slave),如图所示
假设现在有两个redis服务器,地址分别为A:127.0.0.1:6379、B:127.0.0.1:1231,如果A向B发送以下命令:
SLAVEOF 127.0.0.1:6379
那么B服务器将成为A服务器的从服务器,A也会成为B 的主服务器。
进行复制中的主从服务器将保存相同的数据,概念上讲这种现象称为“数据库状态一致”。
1. 同步以及命令传播
1.1 同步
当客户端向从服务器发送SLAVEOF命令,要求从服务器复制主服务器时,从服务器首先需要执行同步操作,也即是,将从服务器的数据库状态更新至主服务器当前所处的数据库状态。
从服务器对主服务器的同步操作需要通过向主服务器发送SYNC
命令来完成,以下是SYNC
命令的执行步骤:
1)从服务器向主服务器发送SYNC
命令
2)收到SYNC
命令的主服务器执行BGSAVE
命令,在后台生成一个RDB文件,并使用一个缓冲区记录从现在开始执行的所有写命令
3)当主服务器的BGSAVE
命令执行完毕时,主服务器会将BGSAVE
命令生成的RDB文件发送给从服务器,从服务器接收并载入这个RDB文件,将自己的数据库状态更新至主服务器执行BGSAVE
命令时的数据库状态
4)主服务器将记录在缓冲区里面的所有写命令发送给从服务器,从服务器执行这些写命令,