Redis学习之复制

作者: lixin_karl | 来源:发表于2019-05-28 15:17 被阅读0次

    复制

    slaveof master-ip master-port

    SYNC
    • 1、从服务器发送 SYNC命令同步数据库数据

    • 2、主服务器收到SYNC命令后,执行BGSAVE,生成RDB文件,再利用缓冲区记录此后的命令

    • 3、主服务器BGSAVE完成后,将RDB文件发送给从服务器,给其加载数据

    • 4、主服务器将缓冲区里面的命令发送给从服务器执行,两者状态一致。

    SYNC命令是一个非常耗费资源的命令,原来如果主从断开连接,当从服务器再次连接上主服务器时,从服务器又会发送SYNC命令。
    redis2.8 之后使用了PSYNC命令,初次主从同步操作跟上面一样。而断线重连之后,依据以下数据同步数据库。

    • 主服务器的复制偏移量和从服务器的复制偏移量

      ​ 主服务器每复制N个字节,偏移量加上N,从服务器每接收N个字节偏移量加上N, 对比偏移量就可以知道主从同步是否一致。不一致通过积压缓冲区恢复主从服务器的不一致的数据

    • 主服务器的复制积压缓冲区

      ​ 是一个默认大小为1M的先进先出队列。当写命令写入主库,积压缓冲区就会写入命令并且记录偏移量,如果offset以后的数据存在复制后面的数据,如果offset后面的数据不存在,那么完整复制。

    • 服务器的运行ID
      通过运行ID来确认断线重连的从服务器是不是之前的从服务器。

    PSYNC <runid> <offset> runid:断线前复制的主服务器ID offset:从服务器最后接收命令的偏移量。主服务器返回 +CONTINUE 执行部分同步复制操作

    复制的实现

    ​ 1、设置主服务器的ip port:
    ​ 2、建立到主服务器的连接:
    ​ 3、发送PING命令:主服务器返回PONG表示正常
    ​ 4、身份验证:
    ​ 5、发送端口信息:主服务器 info REPLICATION 打印出从服务器的监听端口号信息
    ​ 6、同步:PSYNC
    ​ 7、命令传播:接收主服务器的写命令

    心跳检测

    ​ 从服务器会以每秒一次的频率发送REPLCONF ACK <replication_offset>给主服务器
    ​ 1、检测主从的连接状态
    ​ 2、辅助实现min-slaves选项
    ​ 3、检测命令丢失:如果从服务器发送的offset跟主服务器不一样,主库会同步数据

    相关文章

      网友评论

        本文标题:Redis学习之复制

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