redis主从库数据同步

redis主从库数据同步

当启用多个redis实例的时候。可以通过replicaof或slaveof命令形成主从库关系
数据同步流程
1.从库发给主库psync命令,包含两个参数runID(主库id)和offset(复制进度),当第一次执行时,由于不知道主库的id,将主库id设为? offset设为-1,代表第一次复制
2.主库接到从库命令后,会使用FULLRESYNC(表示第一次全量复制)命令进行响应,携带runID和offset
3.返回从库后,从库记录下runID和offset
4.主库将所有数据同步给从库,从库收到数据后,在本地完成数据复制(主库生成rdb文件,发送给从库,从库接收到文件后,清空库,保存数据)
5.在从库复制数据时,主库不会阻塞,正常处理命令,将命令记录到repliucation buffer中
6.主库将replication buffer中的命令发送给从库,从库执行这些操作,完成同步
同步数据耗时操作
1.生成rdb文件
2.传输rdb文件
解决耗时操作
将一个从库作为主库,形成主-从-从模式,其中一个从库作为其他库的主库,这样可以减少真正主库的压力
主从库连接方式:长连接
长连接风险点:网络中断
redis解决方案
2.8版本之前,网络中断直接进行全量复制
2.8版本之后,增量复制,当主从库断开连接后,主库将操作命令写入replicaton buffer同时将命令写入repl_backlog_buffer是一个环形缓冲区,repl_backlog_buffer
是环形的,就存在覆盖的问题,从库重连后,会发送从库的offset,如果没有被覆盖就同步增量,否则同步全量,增量同步时是通过replicatin buffer传送给从库的
repl_backlog_buffer大小,使用repl_backlog_size,默认值为1M


版权声明:本文为weixin_42885159原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。