Redis主从、哨兵、 Cluster集群一锅端!

前言:

 

1.1 Redsi主从概念

1.2 Redis 主从同步过程

 

正在上传…重新上传取消

Redis主从同步包括三个阶段。

第一阶段:主从库间建立连接、协商同步。

  • 从库向主库发送psync 命令,告诉它要进行数据同步。
  • 主库收到 psync 命令后,响应FULLRESYNC命令(它表示第一次复制采用的是全量复制),并带上主库runID和主库目前的复制进度offset

第二阶段:主库把数据同步到从库,从库收到数据后,完成本地加载。

  • 主库执行bgsave命令,生成RDB文件,接着将文件发给从库。从库接收到RDB 文件后,会先清空当前数据库,然后加载 RDB 文件。
  • 主库把数据同步到从库的过程中,新来的写操作,会记录到replication buffer

第三阶段,主库把新写的命令,发送到从库。

  • 主库完成RDB发送后,会把replication buffer中的修改操作发给从库,从库再重新执行这些操作。这样主从库就实现同步啦。

1.3 Redis主从的一些注意点

1.3.1 主从数据不一致

因为主从复制是异步进行的,如果从库滞后执行,则会导致主从数据不一致

主从数据不一致一般有两个原因:

如何解决主从数据不一致问题呢?

1.3.2 读取过期数据

Redis删除数据有这几种策略:

如果使用Redis版本低于3.2,读从库时,并不会判断数据是否过期,而是会返回过期数据。而3.2 版本后,Redis做了改进,如果读到的数据已经过期了,从库不会删除,却会返回空值,避免了客户端读到过期数据

因此,在主从Redis模式下,尽量使用 Redis 3.2以上的版本。

1.3.3 一主多从,全量复制时主库压力问题

如果是一主多从模式,从库很多的时候,如果每个从库都要和主库进行全量复制的话,主库的压力是很大的。因为主库fork进程生成RDB,这个fork的过程是会阻塞主线程处理正常请求的。同时,传输大的RDB文件也会占用主库的网络宽带。

可以使用主-从-从模式解决。什么是主从从模式呢?其实就是部署主从集群时,选择硬件网络配置比较好的一个从库,让它跟部分从库再建立主从关系。如图:

正在上传…重新上传取消

 

1.3.4 主从网络断了怎么办呢?

主从库完成了全量复制后,它们之间会维护一个网络长连接,用于主库后续收到写命令传输到从库,它可以避免频繁建立连接的开销。但是,如果网络断开重连后,是否还需要进行一次全量复制呢?

如果是Redis 2.8之前,从库和主库重连后,确实会再进行一次全量复制,但是这样开销就很大。而Redis 2.8之后做了优化,重连后采用增量复制方式,即把主从库网络断连期间主库收到的写命令,同步给从库。

主从库重连后,就是利用repl_backlog_buffer实现增量复制。

当主从库断开连接后,主库会把断连期间收到的写操作命令,写入replication buffer,同时也会把这些操作命令写入repl_backlog_buffer这个缓冲区。repl_

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值