• Redis 主从复制的核心原理


    介绍:

    通过 执⾏slaveof命令或设置slaveof选项 让⼀个服务器去复制另⼀个服务器的数据。主数据库可以进⾏读写操作,当写操作导致数据变化时会⾃动将数据同步给从数据库。⽽从数据库⼀般是只读的,并接受主数据库同步过来的数据。⼀个主数据库可以拥有多个从数据库,⽽⼀个从数据库只能拥有⼀个主数据库。

    全量复制:

    1. 主节点 通过bgsave命令fork⼦进程进⾏RDB持久化 ,该过程是⾮常消耗CPU内存(⻚表复制)、硬盘IO
    2. 节点清空⽼数据、载⼊新RDB⽂件的过程是阻塞的⽆法响应客户端的命令;如果从节点执⾏bgrewriteaof,也会带来额外的消耗
    3. 主节点通过⽹络将RDB⽂件发送给从节点,对主从节点的带宽都会带来很⼤的消耗

    部分复制:  

    1. 复制偏移量执⾏复制的双⽅,主从节点,分别会维护⼀个复制偏移量offset
    2. 复制积压缓冲区:主节点内部维护了⼀个固定⻓度的、先进先出(FIFO)队列 作为复制积压缓冲区,当主从节点offset的差距过⼤超过缓冲区⻓度时,将⽆法执⾏部分复制,只能执⾏全量复制。
    3. 服务器运⾏ID(runid):每个Redis节点,都有其运⾏ID,运⾏ID由节点在启动时⾃动⽣成,主节点会将⾃⼰的运⾏ID发送给从节点,从节点会将主节点的运⾏ID存起来。 从节点Redis断开重连的时候,就是根据运⾏ID来判断同步的进度:
      • 如果从节点保存的runid与主节点现在的runid相同,说明主从节点之前同步过,主节点会继续 尝试使⽤部分复制(到底能不能部分复制还要看offset和复制积压缓冲区的情况);
      • 如果从节点保存的runid与主节点现在的runid不同,说明从节点在断线前同步的Redis节点并不是当前的主节点,只能进⾏全量复制。

       

  • 相关阅读:
    python中的Frame对象初探
    Linux SSH连接远程服务器(免密登录、scp和sftp传输文件)
    CSDN 编程竞赛第七期题解
    Ubuntu调整swap大小
    C# OpenCvSharp 实现迷宫解密
    Xray是什么
    运算符重载函数中const的作用
    JavaSE之深度剖析String类
    GB/T 24721.1-2023 公路用玻璃纤维增强塑料产品检测
    Java基础-面向对象进阶-static,继承
  • 原文地址:https://blog.csdn.net/m0_70734549/article/details/126561451