【redis】数据同步:主从库如何实现数据一致

如果redis实例宕机了,在恢复期间,无法服务新来的数据存取请求。

redis高可靠性:

  1. 数据尽量少丢失(AOF、RDB)
  2. 服务尽量少中断(增加副本冗余量)-将一份数据同时保存在多个实例上

redis提供了主从模式,采用读写分离-保证数据副本的一致

读操作-主库,从库都可以接收

写操作:主库先执行,然后主库将写操作同步给从库。

【redis】数据同步:主从库如何实现数据一致_第1张图片

主从库如何进行第一次同步

如图:

【redis】数据同步:主从库如何实现数据一致_第2张图片

第一阶段:psync 命令包含了主库的 runID 和复制进度 offset 两个参数。

runID,是每个 Redis 实例启动时都会自动生成的一个随机 ID,用来唯一标记这个实

例。当从库和主库第一次复制时,因为不知道主库的 runID,所以将 runID 设

为“?”。

offset,此时设为 -1,表示第一次复制。

FULLRESYNC 响应表示第一次复制采用的全量复制,也就是说,主库会把当前所有的数据都复制给从库。

第二阶段:主库将所有数据同步给从库。从库收到数据后,在本地完成数据加载。这个过程依赖于内存快照生成的 RDB 文件。

第三阶段:主库会把第二阶段执行过程中新收到的写命令,再发送给从库。

主从级联模式分担全量复制时的主库压力

为了防止给主库带来更多压力,提出一种“主 - 从 - 从”模式。

通过“主 - 从 - 从”模式将主库生成 RDB 和传输 RDB 的压力,以级联的方式分散到从库上。以减轻主库的压力

【redis】数据同步:主从库如何实现数据一致_第3张图片

这个方案很好,但是当主从库之间网络断了将如何进行数据同步?

在redis 2.8之间,会进行主从之间的全量复制,这个开销非常大。

redis2.8开始:进行增量复制 使用repl_backlog_buffer (记录增量),repl_backlog_buffer 是一个环形缓冲区,主库会记录自己写到的位置,从库则会记录自己已经读到的位置。

增量复制的流程:

【redis】数据同步:主从库如何实现数据一致_第4张图片

你可能感兴趣的:(redis,redis,数据库,缓存)