主从数据同步原理

2.2.主从数据同步原理

2.2.1.全量同步

主从第一次建立连接时,会执行全量同步,将master节点的所有数据都拷贝给slave节点,流程:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里有一个问题,master如何得知salve是第一次来连接呢??

有几个概念,可以作为判断依据:

  • Replication Id:简称replid,是数据集的标记,id一致则说明是同一数据集。每一个master都有唯一的replid,slave则会继承master节点的replid
  • offset:偏移量,随着记录在repl_baklog中的数据增多而逐渐增大。slave完成同步时也会记录当前同步的offset。如果slave的offset小于master的offset,说明slave数据落后于master,需要更新。

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

因为slave原本也是一个master,有自己的replid和offset,当第一次变成slave,与master建立连接时,发送的replid和offset是自己的replid和offset。

master判断发现slave发送来的replid与自己的不一致,说明这是一个全新的slave,就知道要做全量同步了。

master会将自己的replid和offset都发送给这个slave,slave保存这些信息。以后slave的replid就与master一致了。

因此,master判断一个节点是否是第一次同步的依据,就是看replid是否一致

如图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

完整流程描述:

  • slave节点请求增量同步
  • master节点判断replid,发现不一致,拒绝增量同步
  • master将完整内存数据生成RDB,发送RDB到slave
  • slave清空本地数据,加载master的RDB
  • master将RDB期间的命令记录在repl_baklog,并持续将log中的命令发送给slave
  • slave执行接收到的命令,保持与master之间的同步

2.2.2.增量同步

全量同步需要先做RDB,然后将RDB文件通过网络传输个slave,成本太高了。因此除了第一次做全量同步,其它大多数时候slave与master都是做增量同步

什么是增量同步?就是只更新slave与master存在差异的部分数据。如图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么master怎么知道slave与自己的数据差异在哪里呢?

相关推荐

  1. mysql5.7 数据库主从同步实现

    2024-04-12 00:10:02       55 阅读
  2. MySQL主从同步数据库环境部署

    2024-04-12 00:10:02       43 阅读
  3. PostgreSQL Windows 数据库主从模式 热同步

    2024-04-12 00:10:02       31 阅读
  4. Kafka数据同步原理详解

    2024-04-12 00:10:02       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 00:10:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 00:10:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 00:10:02       82 阅读
  4. Python语言-面向对象

    2024-04-12 00:10:02       91 阅读

热门阅读

  1. C# AOP最经典实现

    2024-04-12 00:10:02       24 阅读
  2. Terraform 通过 Provisioner 配置服务器

    2024-04-12 00:10:02       39 阅读
  3. 并发编程中常见的设计模式

    2024-04-12 00:10:02       44 阅读
  4. 比武中的一段PHP代码

    2024-04-12 00:10:02       38 阅读
  5. Vue3+elementPlus组件递归

    2024-04-12 00:10:02       34 阅读
  6. Vue 3 组合式 API:优化代码的利器

    2024-04-12 00:10:02       32 阅读
  7. JQuery

    2024-04-12 00:10:02       32 阅读
  8. ubuntu下使用ndk编译libevnet

    2024-04-12 00:10:02       31 阅读
  9. 算法刷题记录 Day37

    2024-04-12 00:10:02       33 阅读
  10. 代码随想录训练营16day:二叉树5

    2024-04-12 00:10:02       32 阅读
  11. 21. 面试指导-高频面试题详解

    2024-04-12 00:10:02       32 阅读