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 ...
随机推荐
- Win8Metro(C#)数字图像处理--2.11图像锐化
原文:Win8Metro(C#)数字图像处理--2.11图像锐化 [函数名称] 图像锐化函数SharpeningProcess(WriteableBitmap src,double sharpe ...
- vs调试cordova app时 scriptedsandbox64.exe已停止工作的错误处理方法
1.把ie更新到版本11 2.去掉 选项->调试->调试时启动诊断工具 有时候调试会启动失败,提示版本过低,再一次点击调试就可以了.
- Central Subscriber Model Explained
原文 http://www.sqlrepl.com/sql-server/central-subscriber-model-explained/ The majority of SQL Server ...
- 增加收入的 6 种方式(很多公司的模型是:一份时间卖多次。比如网易、腾讯。个人赚取收入的本质是:出售时间)good
个人赚取收入的本质是:出售时间.从这个角度出发,下面的公式可以描述个人收入: 个人收入 = 每天可售时间数量 * 单位时间价格 * 单位时间出售次数 在这个公式里,有三个要素: 每天可出售的时间数量 ...
- Markdown 入门
一. Markdown语法的简要规则 标题 标题是非常重要的一个标记,一段文字标记为标题,只需要在文字前加 #.具体可以支持到1到6个# 1 2 3 4 # 一级标题 ## 二级标题 ### 三级标题 ...
- android 获取 cpu 频率信息
cpu的频率信息可以在/sys/devices/system/cpu/cpu0/cpufreq/路径下读取 比如最高频率路径为:/sys/devices/system/cpu/cpu0/cpufreq ...
- LINE_NO in format of XXXX example -> Line 10 is 0010
select case when length(line_no) = 1 then to_char(line_no) when length(line_no) = 2 then '00' || lin ...
- MongoDB centos安装问题 error while loading shared libraries: libnetsnmpmibs.so.31
安装mongodb-linux-x86_64-enterprise-rhel70-4.0.5 cd /usr/mongodb tar -zxvf mongodb-linux-x86_64-enter ...
- Delphi的Anymouse方法探秘
匿名函数是用Interface来实现的,具体细节可以看http://www.raysoftware.cn/?p=38匿名函数还是非常方便的.比如自己封装的异步调用.Async(procedure(AP ...
- Web性能优化分析
如果你的网站在1000ms内加载完成,那么会有平均一个用户停留下来.2014年,平均网页的大小是1.9MB.看下图了解更多统计信息. 直击现场 <HTML开发MacOSApp教程> ht ...