主从数据同步原理

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与自己的数据差异在哪里呢?

相关推荐
Lx3524 分钟前
SELECT * 的性能陷阱与列筛选优化
后端·sql·mysql
时序数据说5 分钟前
时序数据库IoTDB在工业物联网时序数据管理中的应用
大数据·数据库·分布式·物联网·时序数据库·iotdb
import_random8 分钟前
[mysql]基础知识(介绍)
mysql
扶尔魔ocy13 分钟前
欧拉系统openEuler-24.03忘记密码,如何改密码
linux·运维·服务器
1nullptr13 分钟前
【持续更新】linux网络编程试题
linux·服务器·网络
SlowFeather17 分钟前
Apache 反向代理Unity服务器
服务器·unity·apache
DarkChunk44 分钟前
[LevelDB]关于LevelDB存储架构到底怎么设计的?
数据库
星梦客1 小时前
VMware 虚拟机开机自启动配置指南
linux·运维·服务器
martian6651 小时前
达梦数据库中无效触发器的排查与解决方案指南
开发语言·数据库
网硕互联的小客服1 小时前
RAID 阵列有哪些?分别有什么作用?
运维·服务器·网络·数据库·网络安全·raid