Redis学习之复制

复制

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跟主服务器不一样,主库会同步数据

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容