图解Redis数据同步(全量 + 增量)

全量同步和增量同步概述:

        全量同步:master将完整内存数据生成RDB,发送RDB到slave。后续命令则记录在repl_baklog,逐个发送给slave。

        增量同步:slave提交自己的offset到master,master获取repl_baklog中从offset之后的命令给slave

什么时候执行全量同步?

        slave节点第一次连接master节点时

        slave节点断开时间太久,repl_baklog中的offset已经被覆盖时

什么时候执行增量同步?

        slave节点断开又恢复,并且在repl_baklog中能找到offset时


增量同步

  rel_baklog:可以理解为是一个数据存储的集合

  offset:偏移量,随着记录在repl_baklog中的数据增多而逐渐增大。slave完成同步时也会记录当前同步的offset。 如果slave的offset小于master的offset,说明slave数据落后于master,需要更新

  replid:当前master节点的唯一标识,在同步前确保该slave节点对应的master节点的同一个

        rel_baklog底层是一个数组,他有一个特点是超出下标范围就会从0下标开始覆写,如果slave对于覆写部分已经进行了读取那还好,如果没有进行读取,那么就不能再在repl_baklog中通过offset来读取新数据,而是将原数据全部删除,再对主节点进行全量同步操作才行 

slave做数据同步,必须向master声明自己的replication id 和offset,master才可以判断到底需要同步哪些数据


全量同步

基本流程: 

1.从节点向主节点发送 SYNC 命令请求进行同步。

该命令请求包含了一个参数,表示从节点的复制偏移量repl_offset以及目标master节点的idreplid。该偏移量指定了从节点需要获取的数据起始点,master节点的id指定了具体同步的master节点

2.主节点收到 SYNC 请求后,开始执行 BGSAVE 命令生成 RDB 文件,并使用缓冲区记录所有接收到的写命令操作。

        主节点接收到 SYNC 命令请求后,会执行 BGSAVE 命令生成 RDB 文件,并将所有接收到的写命令操作记录在主节点的 Replication Buffer 中。

        Replication Buffer 是 Redis 主节点用来缓存新的写操作的内存区域,它位于主节点的服务器状态结构体 server 中。通常情况下,主节点会将所有的写操作持久化保存在 AOF 日志文件中,但是在进行全量同步时,为了减少网络传输的压力,主节点将新的写操作暂时保存在 Replication Buffer 中。

3.当 BGSAVE 命令执行完毕并成功生成 RDB 文件后,主节点通过网络将这个 RDB 文件发送给从节点,并将缓冲区中记录的所有写命令也一起发送给从节点。

        当 BGSAVE 命令执行完毕并成功生成 RDB 文件后,主节点将该RDB文件发送给从节点,并将缓冲区中记录的所有写命令也一起发送给从节点。

        在全量同步时,主节点不仅需要将自己保存的数据发送给从节点,还需要记录接下来的写操作。因此,主节点通过网络将 RDB 文件和缓冲区中的所有写命令发送给从节点,以确保从节点可以获取到最新的数据状态。

4.从节点接收到主节点发送的 RDB 文件和写命令缓冲区后,先加载 RDB 文件,然后再执行缓冲区中的写命令,以达到与主节点相同的数据状态。

        当从节点接收到主节点发送的数据之后,首先会进行 RDB 文件的加载。RDB 文件包含了主节点的快照数据,是从节点用于恢复自身数据的重要文件。

        完成 RDB 文件加载后,从节点开始处理主节点发送的写命令缓冲区。从节点依次执行这些写命令,更新自身的数据状态,以达到与主节点相同的数据状态。

 


master如何判断slave节点是不是第一次来做数据同步?

        首先看slave的offset,如果为空就直接全局同步,如果不为空就去判断Replocation id是否一致,不一致就全局同步,一致就根据offset的位置来同步后边新的数据

 

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学徒630

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值