1.建立连接
(1)从服务器执行slaveof后,创建连接master的socket连接
(2)从服务器向master发送ping,如果回复不是pong,则断开重连
(3)身份验证,密码一致
(4)从服务器发送自己的监听端口,master保存下来
2.数据同步
(1)完整重同步(首次复制,也可能是断线后重连)
(2)部分重同步(断线重连)
runid:
主服务器运行id,Redis实例运行idoffset
,复制偏移量。主服务器和从服务器各自维护一个复制偏移量,记录传输的字节数。当主节点向从节点发送N个字节数据时,主节点的offset增加N,从节点收到主节点传来的N个字节数据时,从节点的offset增加Nreplication backlog buffer
,复制积压缓冲区。是一个固定长度的FIFO队列,默认大小1MB。需要注意的是该缓冲区由master维护并且有且只有一个,所有slave共享此缓冲区,其作用在于备份最近主库发送给从库的数据
3.命令传播
master每执行一次写,都会想slave发送同样的写命令,slave会每秒向master发送一次心跳检测,心跳检测命令会附带上从服务器的复制偏移量,可以检测是否有同步命令丢失