Redis主从复制原理【超好理解】

        Redis的主从复制是一种异步复制机制,用于实现数据冗余、读写分离和高可用性。其核心原理可分为以下几个关键步骤和机制。

1. 建立主从关系

  • 配置方式:通过SLAVEOF <master_ip> <master_port>命令或在从节点配置文件中设置,使从节点连接到主节点。

  • 身份验证(可选):若主节点配置了requirepass,从节点需提供密码(masterauth配置项)。

2. 数据同步过程

全量同步(Full Resynchronization)
  • 触发条件:从节点首次连接主节点,或复制偏移量(Replication Offset)不在主节点的复制积压缓冲区中。

  • 步骤

    1. 从节点发送PSYNC命令(旧版本为SYNC)请求同步。

    2. 主节点执行BGSAVE生成RDB快照,并缓存此期间的写命令至复制缓冲区

    3. 主节点将RDB文件传输给从节点,从节点清空旧数据后加载RDB。

    4. 主节点发送缓冲区中的写命令,使从节点数据与主节点完全一致。

部分同步(Partial Resynchronization)
  • 触发条件:从节点断开后重连,且其复制偏移量仍存在于主节点的复制积压缓冲区(Replication Backlog)。

  • 机制

    • 主节点仅发送从节点缺失的增量命令,避免全量同步开销。

    • 依赖复制ID(Replication ID)复制偏移量判断同步起点。

3.  命令传播(Propagation)

  • 同步完成后,主节点持续将写命令异步发送给从节点,从节点执行相同命令以保持数据一致。

  • 异步复制特性:主节点不等待从节点确认,可能存在短暂数据延迟(最终一致性)。

4.核心组件

  • 复制积压缓冲区

    • 主节点维护的环形内存缓冲区,默认大小1MB(可配置)。

    • 存储最近的写命令及对应的复制偏移量。

    • 缓冲区大小需根据网络中断时长调整,避免频繁全量同步。

  • 复制偏移量

    • 主节点和从节点各自维护,记录已复制的数据量。

    • 主节点每次传播命令后递增偏移量;从节点接收后更新自身偏移量。

  • 复制ID

  • 主节点唯一标识符。故障切换后,新主节点生成新复制ID,旧复制ID用于兼容部分同步。

断线重连处理

  • 从节点断线后,通过PSYNC命令携带旧复制ID最后复制偏移量重新连接。

  • 主节点根据偏移量判断执行全量或部分同步。

优化与注意事项

  • 无盘复制(Diskless Replication):主节点直接将RDB数据通过Socket发送给从节点,避免磁盘IO(配置repl-diskless-sync yes)。

  • 读写分离:从节点默认read-only,可通过replica-read-only no配置为可写(不推荐,易导致数据不一致)。

  • 链式复制:从节点可作为其他从节点的主节点,形成树状结构,减轻主节点压力。

  • 复制超时:通过repl-timeout控制超时时间(默认60秒),超时后触发重同步。

7. 局限性

  • 数据延迟:异步复制导致从节点数据可能滞后。

  • 脑裂问题:主节点宕机后,若未及时切换,可能引发数据不一致(需配合Sentinel或Cluster解决)。

总结流程

  1. 从节点发起连接,发送PSYNC命令。

  2. 主节点根据复制ID和偏移量决定全量或部分同步。

  3. 全量同步:生成RDB文件并传输,随后发送缓冲命令。

  4. 部分同步:直接发送积压缓冲区中的增量命令。

  5. 进入命令传播阶段,主节点持续推送写命令。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值