Redis深入理解(三)复制

原创
07/17 16:53
阅读数 0

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复制,一致则走增量复制。

 

 

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部