Redis的主从复制

本文详细介绍了Redis的主从复制过程,包括全量复制的三个阶段和增量复制的实现方式。全量复制通过RDB文件同步,增量复制依赖于repl_backlog_buffer缓冲区和replicationoffset来确定同步差异。当连接断开后,根据缓冲区中的数据是否丢失来决定使用增量还是全量复制。
摘要由CSDN通过智能技术生成

共有三种模式:全量复制、基于长连接的命令传播、增量复制

1、全量复制

第一次同步采用全量复制,即将主服务器的所有数据同步给从服务器。

第一次同步分为三个阶段:

  • 第一阶段是建立链接、协商同步;
  • 第二阶段是主服务器同步数据给从服务器;为了保证主从服务器数据一致,将生成RDB文件过程中新的写操作命令记录到replication buffer缓冲区。
  • 第三阶段是主服务器发送新的写操作命令给从服务器,将缓冲区的命令发送给从服务器。

2、基于长连接的命令传播

第一次同步后,主动服务器双方建立TCP连接,而且是长连接,避免频繁的TCP连接和断开带来性能开销。

3、增量复制

连接过程中,突然断开连接,然后又恢复连接。在这个过程中新的写操作命令将会采用增量复制的模式同步给从服务器。

那么主服务器如何知道要将哪些增量数据同步给从服务器呢?主要利用一下两个东西:

  • repl_backlog_buffer,一个环形缓冲区,用于主从服务器断开连接后,找到差异数据;
  • replication offset,标记环形缓冲区的同步进度,主从服务器都有各自的偏移量,主服务器标记写的位置,从服务器标记读的位置。

主服务器进行命令传播的同时,会将命令写入到环形缓冲区中,当连接断开又恢复后,从服务器会将自己的读的偏移量发送给主服务器,主服务器通过判断读写的差距,决定采用什么方式进行同步:

  • 如果发现从服务器要读的数据还在缓冲区中,采用增量复制
  • 如果不在,采用全量复制

所以缓冲区的大小会决定是否采用增量复制,一般情况下缓冲区大小设置为sencond * write_size_per_second(断开连接后再次连上主服务器的时间 * 主服务器每秒产生的写命令数据大小)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值