Redis主从同步:全量同步 增量同步

日常工作中使用的Redis集群是一主多从的架构模型(如下图),当主1发生宕机时,会切写到从(为了方便制作预案主1主2同时1切写到从1),此时面临的问题是主2没有宕机,如果直接写从2,那写进从2的数据会不会被主2重新覆盖(主2没有宕机)?


针对以上问题引申出Redis主从同步的机制问题,学习了解后记录如下:

Redis主从同步分为两种机制:全量同步、增量同步。

主从复制过程:

当设置好slave服务器后,slave会建立和master的连接,然后发送sync命令。无论是第一次同步建立的连接还是连接断开后的重新连接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。后台进程完成写文件后,master就发送文件给slaveslave将文件保存到磁盘上,然后加载到内存恢复数据库快照到slave上。接着master就会把缓存的命令转发给slave。而且后续master收到的写命令都会通过开始建立的连接发送给slave。从masterslave的同步数据的命令和从 client发送的命令使用相同的协议格式。当masterslave的连接断开时slave可以自动重新建立连接。如果master同时收到多个 slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave

总结如下:

Slave需要和Master进行数据同步时:

1)     Salve会发送sync命令到Master

2)     Master启动一个后台进程,将Redis中的数据快照保存到文件中

3)     启动后台进程的同时,Master会将保存数据快照期间接收到的写命令缓存起来

4)     Master完成写文件操作后,将该文件发送给Salve

5)     Salve将文件保存到磁盘上,然后加载文件到内存恢复数据快照到SalveRedis

6)     Salve完成数据快照的恢复后,Master将这期间收集的写命令发送给Salve

7)     后续Master收集到的写命令都会通过之前建立的连接,增量发送给salve


总结一下,主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。所以,回到我们最初的疑问,正常情况下,当切写到从2时,主2由于没有数据写入不会触发增量同步也不会触发全量同步,所以正常情况下主2的数据不会覆盖从2新写入的数据。

其他

Redis 2.8以后提供了PSYNC优化了断线重连的效率 ,具体参考另外一篇博客
http://blog.csdn.net/sk199048/article/details/77922589





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章