master-slave模式
在从服务器使用命令:salveof 主ip:端口。设置了要跟着的服务器
复制功能分两部分:sync和命令传播
2.8之前版本sync和之后版本不一样,之前sync命令是sync,之后是psync
步骤:
1、从服务器向主发送sync
2、主收到后执行bgsave命令,开始生成RDB文件,同时用缓冲区记录从现在开始新的命令
3、主把RDB发送给从,从载入该文件。
4、主发送缓冲区记录的命令,从执行,保证最终一致。
2.8之前问题:断线后从会再发sync命令到主,再走上面步骤。1、消耗大量CPU,内存和IO资源;2、发送RDB占用网络带宽;3
从载入RDB文件阻塞其他命令。
解决:使用psync命令,避免RDB重复问题
复制偏移量,用偏移量来校验是否一致性。主针对命令传播中会有offset,从接受多少字节,会与主的offset做对比。如果不一致,判断相差的数据是否大于复制积压缓冲的大小(默认1MB),固定长度的队列。如果队列内能找到,则进行增量重传,找不到,则进行RDB
复制积压缓冲区大小可以设置,设置方式依据:每秒产生1MB数据据(协议格的写命令数据),而从服务器短线后平均5秒才能重新连接,那么缓冲区大小不能低于5mb,安全起见可以设置2*5mb。
进行数据复制时会做Redis服务器ID校验,初次复制时主会把自己runID发给从,如果断开重连,从服务会把之前记录主runID发送给主,主会校验,如果不一致则进行RDB复制,一致则走增量复制。