Redis主从复制

本文详细介绍了Redis主从复制的三个机制:正常的指令复制、缓冲区补全的部分复制和RDB文件的全量复制。在数据类型中,复制依赖于replid和offset。复制过程中,从节点首先保存主节点信息并建立连接,执行psync指令,随后进行全量复制,包括生成RDB文件并发送给从节点。在后续的复制中,主节点将修改操作写入缓冲区,断开连接后通过部分复制或全量复制恢复同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三个复制机制

主从复制有三个机制,正常的指令持续复制;通过缓冲区补全的部分复制;通过RDB文件的全量复制。三个复制机制的状态转移如下
在这里插入图片描述
 

数据类型

在数据复制和同步时,主要依靠 replication IDoffset
通过指令可以查看一个主从节点的这两个信息

>>> info replication
role: master
master_replid:
master_replid2:
master_repl_offset:
second_repl_offset:

replication ID可以看作一个数据库的源头信息, offset则是基于这个源头进行了多少版本
在这里插入图片描述
每一个主节点有两个 replication ID:当从节点选举为主节点时,老的 replication ID会被记录到master_replid2上,供其他从节点继续复制数据。
 

复制过程

当从节点第一次连接主节点时,复制大致过程如下
在这里插入图片描述
主流程:

  1. 从节点会保存主节点网络信息
  2. 建立主从节点间socket连接
  3. 从节点发送Ping命令,并通过心跳保持连接畅通
  4. 验证节点密码及权限
  5. 执行psync指令
  6. 指令持续复制

 
由于是第一次复制,会使用全量复制过程:
(1)从节点发送pysnc ? -1
(2)主节点返回FULLRESYNC replication ID offset
(3)主节点执行bgsave,开始保存数据到RDB文件
(4)发送RDB到从节点
(5)主节点在执行数据修改操作,例如写指令,过期指令时,会写入缓冲区。缓冲区可通过client-output-buffer-limit控制,当区域大小超过阈值,会断开从节点的复制连接。
(6)从节点把RDB数据加载到内存
(7)主节点开始发送缓冲数据
(8)从节点加载缓存数据

 
在复制过程中,如果出现超时连接,或者网络断开。在连接恢复后,会先尝试部分复制过程
(1)从节点发送自己节点的数据信息replication ID offset
(2)主节点判断replication ID是否匹配自己的信息,并在缓冲区查找offset。如果缓冲区有相同的offset,则可以继续通过部分复制。该缓冲区的大小通过repl-backlog-size控制
(3)如果找不到,则会执行全量复制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值