06.深入学习redis replication的完整流程和原理
一、replication的完整流程
- slave配置master ip和port
# slaveof <masterip> <masterport>
slaveof 127.0.0.1 6379
- slave node内部有个定时任务,每秒检查是否有新的master node要连接和复制,如果发现,就跟master node建立socket网络连接
- slave node发送ping命令给master node。如果master设置了requirepass,那么salve node必须发送masterauth的口令过去进行认证
- master node第一次执行全量复制,将所有数据发给slave node
- master node后续持续将写命令,异步复制给slave node
  
 
 
二、全量复制
- master执行bgsave,在本地生成一份rdb快照文件
- master node将rdb快照文件发送给salve node,如果rdb复制时间超过60秒(repl-timeout),那么slave node就会认为复制失败,可以适当调节大这个参数
- master node在生成rdb时,会将所有新的写命令缓存在内存中,在salve node保存了rdb之后,再将新的写命令复制给salve node
- client-output-buffer-limit slave 256MB 64MB 60,如果在复制期间,内存缓冲区持续消耗超过64MB,或者一次性超过256MB,那么停止复制,复制失败
- slave node接收到rdb之后,清空自己的旧数据,然后重新加载rdb到自己的内存中,同时基于旧的数据版本对外提供服务
- 如果slave node开启了AOF,那么会立即执行BGREWRITEAOF,重写AOF
注意:rdb生成、rdb通过网络拷贝、slave旧数据的清理、slave aof rewrite,很耗费时间
 
 
三、增量复制
- 如果全量复制过程中,master-slave网络连接断掉,那么salve重新连接master时,会触发增量复制
- master直接从自己的backlog中获取部分丢失的数据,发送给slave node,默认backlog就是1MB
- msater就是根据slave发送的psync中的offset来从backlog中获取数据的
 
 
四、心跳
主从节点互相都会发送heartbeat信息
master默认每隔10秒发送一次heartbeat,salve node每隔1秒发送一个heartbeat
 
 
相关名词解释
- offset
master和slave都会在自身不断累加offset
slave每秒都会上报自己的offset给master,同时master也会保存每个slave的offset
作用:1)用在全量复制,2)可以彼此了解数据不一致的情况
- backlog
master node有一个backlog,默认是1MB大小。master给slave复制数据时,也会将数据在backlog中同步写一份。主要是用来做全量复制中断候的增量复制的。
- master run_id
执行info server命令可以看到run_id。
如果master重启,容易导致主从结点数据不一致的情况,重启后run_id会重新生成,那么slave应该根据变化的run_id知道master有变化,需要做全量复制。
如果需要不更改run_id重启redis,可以使用redis-cli debug reload命令。
 
 
hi~我是Mirror,一个为了自由安逸的未来而不断前进的的程序员。
如果你觉得文章对你有一点点帮助,一个小小赞,便是对我的认可,如果有不足之处,也欢迎各位指正。
06.深入学习redis replication的完整流程和原理的更多相关文章
- 学习Redis从这里开始
		本文主要内容 Redis与其他软件的相同之处和不同之处 Redis的用法 使用Python示例代码与Redis进行简单的互动 使用Redis解决实际问题 Redis是一个远程内存数据库,它不仅性能强劲 ... 
- Redis学习——Redis持久化之AOF备份方式保存数据
		新技术的出现一定是在老技术的基础之上,并且完善了老技术的某一些不足的地方,新技术和老技术就如同JAVA中的继承关系.子类(新技术)比父类(老技术)更加的强大! 在前面介绍了Redis学习--Redis ... 
- 深入学习Redis(3):主从复制
		前言 在前面的两篇文章中,分别介绍了Redis的内存模型和Redis的持久化. 在Redis的持久化中曾提到,Redis高可用的方案包括持久化.主从复制(及读写分离).哨兵和集群.其中持久化侧重解决的 ... 
- 深入学习Redis(2):持久化
		前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化.复制(及读写分离).哨兵.以及集群. 本文将先说明上述几种技术分别解决了Redis高可 ... 
- 【数据库开发】学习Redis从这里开始
		转载:http://www.epubit.com.cn/article/200 学习Redis从这里开始 本文主要内容 Redis与其他软件的相同之处和不同之处 Redis的用法 使用Python示例 ... 
- 深入学习Redis主从复制
		一.主从复制概述 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器.前者称为主节点(master),后者称为从节点(slave):数据的复制是单向的,只能由主节点到从节点. 默 ... 
- 深入学习Redis(5):集群
		前言 在前面的文章中,已经介绍了Redis的几种高可用技术:持久化.主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡. Redis集群解决了上述问 ... 
- jquery ajax thinkphp异步局部刷新完整流程
		环境:ThinkPHP3.2.3,jQuery3.2 前言: 在一般的网站中,都需要用到jquery或者其他框架(比如angular)来处理前后端数据交互,thinkphp在后台也内置了一些函数用 ... 
- 20145219 《Java程序设计》第06周学习总结
		20145219 <Java程序设计>第06周学习总结 教材学习内容总结 InputStream与OutputStream 串流设计 1.串流:Java将输入/输出抽象化为串流,数据有来源 ... 
随机推荐
- PHP is_writeable() 函数
			定义和用法 is_writeable() 函数检查指定的文件是否可写. 如果文件可写,该函数返回 TRUE. 该函数是 is_writable() 函数的别名. 语法 is_writeable(fil ... 
- loj #6247. 九个太阳 k次单位根 神仙构造 FFT求和原理
			LINK:九个太阳 不可做系列. 构造比较神仙. 考虑FFT的求和原理有 \(\frac{1}{k}\sum_{j=0}^{k-1}(w_k^j)^n=[k|n]\) 带入这道题的式子. 有\(\su ... 
- luogu P6091 原根
			LINK:原根 再复习一下原根 防止考场上要NTT求原根的时候不会求... 这道题要求求出n之内的所有原根 根据原根的定义. 原根指 若x对于模n的阶为phi(n)且\(1\leq x\leq n\) ... 
- [转]Java CPU 100% 排查技巧
			文章来源:微信公众号:猿天地 平时多积累一点,这样在遇到问题的时候就少句求人的话.如果在实际的开发中遇到CPU 100%问题,要怎么排查呢?如果你没有遇到过这个问题,请先自己思考10s,如果你遇到过, ... 
- Springboot使用JdbcTemplate的使用
			在spring-boot-starter-jdbc这个依赖包中一共分成四个部分. core,JdbcTemplate等相关核心接口和类 datasource,数据源相关的辅助类 object,将基本的 ... 
- 微信小程序订阅消息调研
			相关资料 背景:微信模板消息已正式下架,改为订阅消息,详情如下: 服务变更通知 订阅消息:订阅消息相关内容如下: 订阅消息 接口设计 获取接口访问凭证 :根据appId和secret获取接口访问凭证a ... 
- TF签名为什么这么稳定?TF签名找微导流!
			TF签名作为目前最稳定的签名方式收到了业界开发者们的认可,而在如今鱼龙混杂的签名平台中,应该如何选择客厅的TF签名平台呢?下面就一起来看看TF签名为什么这么稳定?TF签名找微导流! TF签名的 ... 
- 借助GPU Boost和K80 Autoboost提高性能
			原网站:https://devblogs.nvidia.com/increase-performance-gpu-boost-k80-autoboost/ 由于我主要使用nvidia-smi,故nvc ... 
- 说说Spring中的 @RestController 和 @Controller
			Spring MVC执行流程已是JAVA面试中老生常谈的问题,相信各位小伙伴也是信手拈来.今天我们来谈谈另一个面试中必会必知的问题: @RestController和@Controller的区别? S ... 
- Python监控你的女朋友/男朋友每天都在看哪些网站
			需求: 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家提 ... 
