06 数据同步:主从库如何实现数据一致?

极客时间 | 《Redis核心技术与实战》学习笔记目录

Redis 具有高可靠性

  • 一是数据尽量少丢失
    • AOF 和 RDB 实现
  • 二是服务尽量少中断
    • 增加副本冗余量

主从库间网络断了怎么办?

repl_backlog_buffer 是一个环形缓冲区,主库会记录自己写到的位置,从库则会记录自己已经读到的位置。

image

因为 repl_backlog_buffer 是一个环形缓冲区,所以在缓冲区写满后,主库会继续写入,此时,就会覆盖掉之前写入的操作。如果从库的读取速度比较慢,就有可能导致从库还未读取的操作被主库新写的操作覆盖了,这会导致主从库间的数据不一致。

我们要想办法避免这一情况

  • 一般而言,我们可以调整 repl_backlog_size 这个参数。这个参数和所需的缓冲空间大小有关。缓冲空间的计算公式是:缓冲空间大小 = 主库写入命令速度 * 操作大小 - 主从库间网络传输命令速度 * 操作大小。在实际应用中,考虑到可能存在一些突发的请求压力,我们通常需要把这个缓冲空间扩大一倍,即 repl_backlog_size = 缓冲空间大小 * 2,这也就是 repl_backlog_size 的最终值。
  • 切片集群来分担单个主库的请求压力

Redis 的主从库同步的三种模式

  • 全量复制、
  • 基于长连接的命令传播,
  • 增量复制
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus