首页 > 数据库 >redis主从数据同步原理

redis主从数据同步原理

时间:2022-08-28 11:34:43浏览次数:71  
标签:同步 slave buffer redis 复制 master RDB 从库 主从

what:

  redis高可用

    1、数据尽量不丢失;

    2、尽可能的提供服务;

    栗子:AOF 和 RDB 保证了数据持久化尽量不丢失;

      主从复制就是增加副本,一份数据保存到多个实例上。即使有一个实例宕机,其他实例依然可以持续服务;

 

  主从

    复制——为单向的,即:只能从主复制到从;

    读写指责——读:主从都可以读。 写:主库先执行,之后将些操作同步到从库。一般master提供写,slave提供读。

 

  client buffer

    Redis 和客户端通信也好,和从库通信也好,Redis 都分配一个内存 buffer 进行数据交互,客户端就是一个 client,从库也是一个 client,我们每个 client 连上 Redis 后,Redis 都会分配一个专有 client buffer,所有数据交互都是通过这个 buffer 进行的。

 

  RDB和AOF文件对比:

    a、RDB 文件是二进制文件,网络传输 RDB 和写入磁盘的 IO 效率都要比 AOF 高。
    b、从库进行数据恢复的时候,RDB 的恢复效率也要高于 AOF。

  

how:

  第一次全量复制

    分3个阶段:连接建立阶段(即准备阶段)-> 主库同步数据到从库阶段 -> 发送同步期间新写命令到从库阶段

 

     连接建立阶段:从库执行 replicaof(之前是slave of) 并发送 psync 命令,表示要执行数据同步,主库收到命令后根据参数启动复制。命令参数包含了:主库的 runID 和 复制进度 offset 。主库FULLRESYNC 响应表示第一次复制采用的全量复制,也就是说,主库会把当前所有的数据都复制给从库。

      runID:每个Redis 实例启动都会自动生成一个 唯一标识 ID(runID),第一次主从复制,还不知道主库 runID,参数设置为空;
      offset:记录复制进度偏移量,第一次复制为-1;

 

    数据同步:master 执行 bgsave命令生成 RDB 文件,并将文件发送给从库,同时主库为每一个 slave 开辟一块 replication buffer 缓冲区记录从生成 RDB 文件开始收到的所有写命令; slave收到 RDB 文件后保存到磁盘,并清空当前数据库的数据,再加载 RDB 文件数据到内存中;

 

    发送同步期间新写命令到从库:从节点加载 RDB 完成后,主节点将 replication buffer 缓冲区的数据发送到从节点,Slave 接收并执行,从节点同步至主节点相同的状态;

      replication buffer 缓冲区的数据:
        1)master 执行 bgsave 产生 RDB 的期间的写操作;
        2)master 发送 rdb 到 slave 网络传输期间的写操作;
        3)slave load rdb 文件把数据恢复到内存的期间的写操作;

      replication buffer注意:太小会导致主从复制连接断开,由 client-output-buffer-limit slave 设置。

 

  增量复制

    用于网络中断等情况后的复制,只将中断期间主节点执行的写命令发送给从节点,与全量复制相比更加高效(redis 2.8之后增加)。

    原理:repl_backlog_buffer。不管在什么时候 master 都会将写指令操作记录在 repl_backlog_buffer 中。因为内存有限, repl_backlog_buffer 是一个定长的环形数组,如果数组内容满了,就会从头开始覆盖前面的内容。master 使用 master_repl_offset记录自己写到的位置偏移量,slave 则使用 slave_repl_offset记录已经读取到的偏移量。

 

     

    增量同步如下:master 只需要把 master_repl_offset与 slave_repl_offset之间的命令同步给从库即可

      注意:一旦被覆盖就会执行全量复制-

+

 

标签:同步,slave,buffer,redis,复制,master,RDB,从库,主从
From: https://www.cnblogs.com/sfzlstudy/p/16632435.html

相关文章

  • REDIS-读书笔记
    1Redis的概念:Redis是一种key-value类型的内存数据库,可以用于保存string,list,set,sortedset,hash等多种数据结构。由于整个数据库统统加载在内存中进行操作,所以性能也非常出......
  • Redis
    1、redis是一个高性能的key-value数据库2、数据类型Strings,Lists,Hashes,Sets及OrderedSets数据类型操作3、原子性Redis的所有操作都是原子性......
  • redis基础
    NoSQL概述数据存储瓶颈是什么数据量总大小,一个机器放不下数据索引一个机器内存放不下访问量一个服务器不能承受优化数据结构–文件缓存IO后来,随着访问量的上升,几乎大......
  • bind搭建内网DNS服务器架构(主从、子域授权、DNS转发器)
    实验目的模拟企业DNS服务架构服务器及原理实验环境准备实验架构图实验设备DNS服务器4台主服务器master(centos8):IP_192.168.100.30,从服务器slave(rocky8):192.168.1......
  • Redis 集群模式
    概述Redis在3.0之后开始支持Cluster(集群)模式,特点如下:支持节点的自动发现:可向集群动态添加节点,并自动融入支持slave-master选举和容错:多个master宕机后,选举出......
  • Redis常用命令
    字符串string能够存储字符串、整数、浮点数3种类型的值。基本命令+getkey//读取+setkeyvalue//写入+delkey//删除自增/自减+incrkey//键值加1+......
  • redis-主从复制
    一、主从复制的建立1.在slave机器上运行replicaofmaster的ipmaster的ip(Redis5.0之前使用slaveof)2.启动redis时redis-server/etc/redis.conf--replicaof192.168.......
  • redis 入门安装流程
    redis安装流程安装linux的Redis[官网下载即可][https://redis.io/download/]一般会移动到opt目录下mvredis-7.0.4/opt在linux系统下安装redis加压命令tar......
  • java 连接 redis
    Jedis导入对应的依赖<dependencies><!--jedis--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>......
  • Redis
    官网:http://redis.cn/Windows版下载:https://github.com/microsoftarchive/redis/releasesLinux版下载:https://download.redis.io/releases/  Redis简介关系型数据......