关闭

Redis主从同步是怎么实现的?

瞎溜达 1年前 ⋅ 78 阅读

全量同步:master服务器会开启一个后台进程用于将redis中的数据生成一个rdb文件,与此同时,服务器会缓存所有接收到的来自客户端的写命令(增,删,改),当后台保存进程处理完毕后,会将rdb文件传递给slave服务器,而slave服务器会装rdb文件保存在磁盘并通过读取该文件将数据加载到内存,在此之后master服务器会将在此期间缓存的命令通过redis传输协议发送给slave服务器,然后slave服务器将这些命令依次作用于自已本地的数据集上,最终达到数据的一致性。

增量同步:从redis2.8版本以前,并不支持部分同步,当主从服务器之后的连接断掉之后,master服务器和slave服务器之间都是进行全量数据同步。

人redis2.8开始,即使主从连接中途断掉,也不需要进行全量同步,因为从这个版本开始融入了部分同步的概念。部分同步的实现依赖于在master服务器内存中给每个slave服务器维护了一份同步日志和同步标识,每个slave服务器在跟master服务器进行同步时都会携带自已的同步标识和上次同步的最后位置。当主从连接断掉之后,slave服务器隔断时间(默认1s)主动尝试和master服务器进行连接,如果服务器携带的偏移量标识还在master服务器上的同步备份日志中,那么就从slave发送的偏移量开始继续上次的同步操作,如果slave发送的偏移量已经不存master的同步备份日志中,则必须进行一次全量更新。在部分同步过程中,master会将本地记录的同步备份日志中记录的指令依次发送给slave服务器,从而达到数据一致。

Redis主从同步策略

主从刚刚连接的时候,进行全量同步,全量同步结束后,进行增量同步。当然,如果有需要,slave在任何时候可以发起全量同步。redis策略是,无论如何,首先会尝试进行增量同步,如果不成功,要求从机进行全量同步。


全部评论: 0

    我有话说: