美文网首页
Redis主从服务设置以及复制原理

Redis主从服务设置以及复制原理

作者: 躺在家里干活 | 来源:发表于2019-10-09 10:27 被阅读0次

    Redis 主从服务设置以及复制原理

    Redis服务可分为主节点从节点

    从节点需要在配置文件中指定主节点:slaveof {masterHost} {masterPort}

    一主三从配置文件

    6379(主):

    port 6379
    databases 5
    dir ./database/
    appendonly yes
    appendfilename setOrder.aof
    save 10 1
    dbfilename snapshot.rdb
    

    7001(从):

    port 7001
    databases 5
    dir ./database/
    appendonly yes
    appendfilename setOrder.aof
    save 10 1
    dbfilename snapshot.rdb
    slaveof 127.0.0.1 6379 
    

    7002(从):

    port 7002
    databases 5
    dir ./database/
    appendonly yes
    appendfilename setOrder.aof
    save 10 1
    dbfilename snapshot.rdb
    slaveof 127.0.0.1 6379 
    

    7003(从):

    port 7003
    databases 5
    dir ./database/
    appendonly yes
    appendfilename setOrder.aof
    save 10 1
    dbfilename snapshot.rdb
    slaveof 127.0.0.1 6379 
    

    演示:

    主从演示

    主从的复制过程

    <img src="https://wang_ya_nan.gitee.io/pages/image/2018/05/14/swdcbh.svg"></img>

    • 复制偏移量:
      参与复制的主从节点都会维护自身的复制偏移量。主节点在处理完写入命令后,会把命令的字节长度做累加记录。从节点每秒钟上报自身的复制偏移量给主节点,主节点也会保存从节点的复制偏移量。从节点在接收到主节点发送的命令后,也会累加记录自身的偏移量。

    • 复制积压缓冲区:
      先进先出的定长队列,默认大小为1MB,主节点响应写命令时,不但会把命令发送给从节点,还会写入这个缓冲区。用于部分复制和复制命令丢失的数据补救。

    • 主节点运行ID:
      每个Redis节点启动时会动态分配一个40位的十六进制的字符串作为运行ID。

    • psync命令
      从节点使用psync命令完成部分复制和全量复制功能。

        psync {runId} {offset}
        runId : 主节点的运行ID
        offset:当前从主节点已复制的数据偏移量
    

    全量复制

    场景:大多用于第一次同步

    1. 从节点发送psync命令,由于是第一次复制,不知道主节点的runId,所以发送: psync ? -1
    2. 主节点先会保存RDB文件到本地,把RDB文件传输给从节点
    3. 从节点接收到全部数据后会清空自身旧数据,加载RDB文件
    4. 加载RDB完成后,如果从节点开启了AOF持久化,会立即做bgrewriteaof操作

    部分复制

    场景:主从节点之间出现网络闪断或者命令丢失等异常情况

    1. 当主从节点之间网络出现中断,中断期间主节点依然响应命令,但是无法发送命令给从节点
    2. 当主从连接恢复后,由于从节点,保存了自身的复制偏移量和主节点的运行ID,所以把它们当成psync的参数发个主节点,要求进行部分复制
    3. 主节点根据offset在自身复制积压缓冲区查找,如果偏移量在其中,则允许从节点进行主从复制
    4. 主节点发送缓冲区的数据给从节点,保证主从复制进入正常状态

    可能存在的问题

    1. 数据延迟:主从节点采取异步复制的方式,可能会有数据延迟的问题
    2. 读到过期数据(两种删除方式:懒惰删除,定时删除),原因同上
    3. 复制风暴,多个从节点同时启动,同时去主节点做第一次同步数据

    我的个人博客,有空来坐坐

    相关文章

      网友评论

          本文标题:Redis主从服务设置以及复制原理

          本文链接:https://www.haomeiwen.com/subject/lbtbyctx.html