主从复制学习笔记
本文摘抄自这里
主从复制的作用
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式
- 故障恢复: 当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复
- 负载均衡: 在主从复制的基础上,配合读写分离,可以由主节点提供写服务,从节点提供读服务,分担服务器负载
- 高可用基石:除了上述作用外,主从复制还是哨兵和集群能够实施的基础
主从复制的原理
在2.8版本前只有全量复制,而2.8之后有全量复制和增量复制
- 全量复制:比如第一次同步时
- 增量复制:只会把主从网络断连期间主库接收到的命令,同步给从库
全量复制

- 第一阶段主从库间建立连接、协商同步的过程
- 第二阶段 主库将所有数据同步给从库。具体来说就是主库执行bgsave命令,生成RDB文件,接着将文件发送给从库,从库接收到文件后,会先清空当前数据库,然后加载RDB文件
- 第三阶段主库会把第二阶段执行过程中新收到的写命令,再发送给从库
增量复制
主从断开连接后,主从之间通过增量复制的方式继续同步

- repl_backlog_buffer:它是为了从库断开连接后,如何找到主从差异数据而设计的环形缓冲区。如果断开时间内,被写命令覆盖,从库再次连上主库后,只能进行全量复制。所以尽量配置大一些。
- replication buffer:主库用来和从库发送数据的缓冲区
读写分离及其中的问题
- 延迟与不一致问题:优化主从节点的网络环境;监控主从节点延迟
- 数据过期问题:单机版Redis中,存在两种删除策略:1.惰性删除,服务器不会主动删除数据,当客户端查询某个数据时,再判断数据是否过期,如果过期则删除;2.定期删除。主从复制场景下,从节点不会主动删除数据,而是由主节点控制从节点中过期数据的删除。客户端通过从节点很容器读取到已经过期的数据。Redis3.2中解决了该问题
- 故障切换问题
浙公网安备 33010602011771号