redis 复制提纲

让一个服务器去复制另一个服务器 slaveof

基本概念

Redis 复制功能分为同步(Sync)和命令传播(command propagate)两个操作

同步流程

  • 发送Sync命令

  • 发送RDB文件

  • 发送缓冲区保存的所有写命令

旧版本复制的功能缺陷

初次复制、断线后复制

Sync需要执行BGSAVE,非常消耗资源

断线后没有必要再次进行全量复制

新版复制功能的实现

使用PSYNC命令代替SYNC命令来执行复制时候的同步操作

PSYNC具有完整重同步(full resynchronization)和部分重同步(partial resynchronization) 两种模式

  • 完整重同步用于初次复制,执行步骤和SYNC命令的执行步骤基本一样。

  • 部分重同步用于断线后复制的情况。部分重同步有一下三部分组成:

    • 主服务器的复制偏移量(replication offset)和从服务器的复制偏移量

    • 主服务器的复制积压缓冲区(replication backlog),主服务器维护的一个固定长度先进先出的队列默认大小1MB。

    • 服务器的运行ID (run ID),在启动时生成,40个随机的十六进制字符组成。

  • 部分重同步的流程:

    • 从服务器通过PSYNC命令将自己的偏移量发给主服务器,主服务器根据这个偏移量判断执行何种同步。

    • 如果积压的命令已经不再积压缓冲区了,那么就进行完整重同步。

  • PSYNC

    • 从服务器:从服务器从来没有复制过任何服务器,发送PSYNC -1命令

    • 从服务器:复制过,发送PSYNC命令,

    • 主服务器:返回 + FULLRESYNC 表示进行全整重同步

    • 主服务器:返回 + CONTINUE 表示进行部分重同步。

复制流程

  • 设置主服务器的地址和端口

  • 建立套接字连

  • 发送PING命令

  • 身份验证

  • 发送端口信息

  • 同步

  • 命令传播

powered by Gitbook该文件修订时间: 2019-07-05 09:33:43

results matching ""

    No results matching ""