Redis主从复制实现原理
一、Redis2.8之前的版本,
首先redis复制功能分为同步操作和命令传播两个操作
同步操作作于将从服务器的数据库状态更新至主服务器当前所处的数据库状态
命令传播操作则用于在主服务器的数据库状态被修改,导致主从服务器的状态不一致时,让主从服务器的数据重回一致状态。
旧版复制实现:
同步:
从服务器想主服务器发送SYNC命令
收到SYNC命令的主服务器执行BGSAVE命令,然后生成一个RDB文件,并使用一个缓存区记录从现在开始执行命令的所 有命令
当主服务器的BGSAVE命令执行完毕,将RDB文件在发送给从服务器,从服务器载入这个RDB文件,在将数据库状态更 新至主服务器状态一致
主服务器将记录在缓冲区内里的所有写命令发送给从服务器,然从服务器执行这些写命令,将自己的状态更新跟主服务器 当前的状态。
命令传播:
当同步操作执行完后,主从服务器状态达到一致,但每当主服务器的数据发生变化时,导致主从服务器的状态不一致。这时 为了主从服务器再次回到一致状态,主服务器需要将自己执行的命令,发送给从服务器执行,这样主从服务器回到一致状态。
旧版复制的缺陷:
断线后重复制:再主从服务器状态一致时,从服务器发生宕机,这时主服务器继续接收客户端发来的写命令,然主服务器这时状态已被修改。从服务器重新连接,从服务器向主服务器发送同步命令,然主服务器执行BGSAVE命令,创建RDB文件,并使用使用缓冲区记录接下来所有的写命令,在发送RDB文件给从服务器,从服务器接收载入这个RDB文件,上诉操作其实从服务器断开连接以前的数据库状态是一致的,不一致的只是从服务器断开后一段时间内的数据,然旧版复制还是将主服务器包含所有数据的RDB文件发送给从服务器,效率极其低下。
Redis2.8之后,新版复制功能实现:
为了解决旧版复制功能在从服务器断线重连后的低效复制问题,从2.8之后,使用PSYNC命令代替SYNC命令来执行复制的同步操作
PSYNC命令具有完整重同步和部分重同步两种模式
其中完整重同步主要用于初次重复制的情况,完整同步实现与SYNC命令步奏一样。
部分重同步则用于处理断线后重复制的情况,它主要实现是在从服务器断线后重连主服务器时,将断线后主服务器接收到的写命令发送给从服务器,从服务器在执行这些命令,从而达到主从服务器状态一致。
部分重同步实现:
1. 复制偏移量
主从服务器各自维护自己的偏移量,主服务器每次向从服务器传播N个字节的数据时,会将自己的复制偏移量加N,然从服务器的复制偏移量的值也加N。如主从服务器的状态一致时,两者的偏移量是相同的。相反如果偏移量不同,说明主从服务器的状态处于不一致状态。
2. 复制积压缓冲区
如果在从服务器a断线重连后,从服务器a向主服务器发送PSYNC命令,得知从服务器a当前的复制偏移量在999,如果这个时使用部分重复制,则断线期间的数据丢失。
未完待续。。。。。。
Redis主从复制实现原理的更多相关文章
- Redis主从复制的原理
更多内容,欢迎关注微信公众号:全菜工程师小辉.公众号回复关键词,领取免费学习资料. 在Redis集群中,让若干个Redis服务器去复制另一个Redis服务器,我们定义被复制的服务器为主服务器(mast ...
- redis之(十四)redis的主从复制的原理
一:redis主从复制的原理,步骤. 第一步:复制初始化 --->从redis启动后,会根据配置,向主redis发送SYNC命令.2.8版本以后,发送PSYNC命令. --->主red ...
- Redis主从复制简单介绍
由于本地环境的使用,所以搭建一个本地的Redis集群,本篇讲解Redis主从复制集群的搭建,使用的平台是Windows,搭建的思路和Linux上基本一致! (精读阅读本篇可能花费您15分钟,略读需5分 ...
- Redis主从复制getshell技巧
Redis未授权漏洞常见的漏洞利用方式: Windows下,绝对路径写webshell .写入启动项. Linux下,绝对路径写webshell .公私钥认证获取root权限 .利用contrab计划 ...
- Redis主从复制原理总结
和Mysql主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redi ...
- 【*】深入理解redis主从复制原理
1.复制过程 从节点执行 slaveof 命令. 从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制. 从节点内部的定时任务发现有主节点的信息,开始使用 socket 连接主节点 ...
- 深入Redis 主从复制原理
原文:深入Redis 主从复制原理 1.复制过程 2.数据间的同步 3.全量复制 4.部分复制 5.心跳 6.异步复制 1.复制过程 从节点执行 slaveof 命令. 从节点只是保存了 slaveo ...
- Redis面试篇 -- Redis主从复制原理
Redis一般是用来支撑读高并发的,为了分担读压力,Redis支持主从复制.架构是主从架构,一主多从, 主负责写,并且将数据复制到其它的 slave 节点,从节点负责读. 所有的读请求全部走从 ...
- 5.如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么?
作者:中华石杉 面试题 如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么? 面试官心理分析 其实问这个问题,主要是考考你,redis ...
随机推荐
- WPF 的DynamicResource的NewLine问题
wpf的TextBlock支持换行,换行可以用 符号来表示. 比如: <TextBlock Text="第1行 第2行"></TextBlock> 显示效果 ...
- 拆分Codeigniter 数据库,独立提取
起因: codeigniter的activeRecord链式操作非常的方便,目前手头的项目用的不是CI,但是又想使用CI的数据库操作. 1. 新建文件夹 activeDB,内部目录如下 最 ...
- WPF Build Action
None: The file is not included in the project output group and is not compiled in the build process. ...
- Flot Reference flot参考文档
Consider a call to the plot function:下面是对绘图函数plot的调用: var plot = $.plot(placeholder, data, options) ...
- Easy Compression Library(代替TFileStream, TMemoryStream and TStream)
Easy Compression Library is a very easy-to-use replacement of TFileStream, TMemoryStream and other T ...
- 使用Visual Studio开发Python
Python优秀的集成开发环境有PyCharm,Visual Studio Code等,当然你仍然可以使用Visual Studio进行开发.如果你熟悉Visual Studio,使用Visual S ...
- Java 几个有用的命令 - All Options, Memory Options, GC Options, System Properties, Thread Dump, Heap Dump
jcmd ##Refer to http://www.cnblogs.com/tang88seng/p/4497725.html java -XX:+PrintFlagsFinal -version ...
- C#调用记事本并填写内容
using System.Runtime.InteropServices; using System.Diagnostics; [DllImport("User32.DLL") ...
- 前端开发在uc浏览器上遇到的坑
关于uc 的flex 和textarea 的width:100%: 这些天再做一个wap的项目,本想着手机上不用考虑兼容性问题,可以大刀阔斧搞,fuck ie678! 在pc上完成页面开发,在chro ...
- 【spring boot】application.properties官方完整文档
官方地址: https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/ 进入搜索: Appendice ...