一、replication的完整流程


  1. slave配置master ip和port
# slaveof <masterip> <masterport>
slaveof 127.0.0.1 6379
  1. slave node内部有个定时任务,每秒检查是否有新的master node要连接和复制,如果发现,就跟master node建立socket网络连接
  2. slave node发送ping命令给master node。如果master设置了requirepass,那么salve node必须发送masterauth的口令过去进行认证
  3. master node第一次执行全量复制,将所有数据发给slave node
  4. master node后续持续将写命令,异步复制给slave node



二、全量复制


  1. master执行bgsave,在本地生成一份rdb快照文件
  2. master node将rdb快照文件发送给salve node,如果rdb复制时间超过60秒(repl-timeout),那么slave node就会认为复制失败,可以适当调节大这个参数
  3. master node在生成rdb时,会将所有新的写命令缓存在内存中,在salve node保存了rdb之后,再将新的写命令复制给salve node
  4. client-output-buffer-limit slave 256MB 64MB 60,如果在复制期间,内存缓冲区持续消耗超过64MB,或者一次性超过256MB,那么停止复制,复制失败
  5. slave node接收到rdb之后,清空自己的旧数据,然后重新加载rdb到自己的内存中,同时基于旧的数据版本对外提供服务
  6. 如果slave node开启了AOF,那么会立即执行BGREWRITEAOF,重写AOF

注意:rdb生成、rdb通过网络拷贝、slave旧数据的清理、slave aof rewrite,很耗费时间



三、增量复制


  1. 如果全量复制过程中,master-slave网络连接断掉,那么salve重新连接master时,会触发增量复制
  2. master直接从自己的backlog中获取部分丢失的数据,发送给slave node,默认backlog就是1MB
  3. 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的完整流程和原理的更多相关文章

  1. 学习Redis从这里开始

    本文主要内容 Redis与其他软件的相同之处和不同之处 Redis的用法 使用Python示例代码与Redis进行简单的互动 使用Redis解决实际问题 Redis是一个远程内存数据库,它不仅性能强劲 ...

  2. Redis学习——Redis持久化之AOF备份方式保存数据

    新技术的出现一定是在老技术的基础之上,并且完善了老技术的某一些不足的地方,新技术和老技术就如同JAVA中的继承关系.子类(新技术)比父类(老技术)更加的强大! 在前面介绍了Redis学习--Redis ...

  3. 深入学习Redis(3):主从复制

    前言 在前面的两篇文章中,分别介绍了Redis的内存模型和Redis的持久化. 在Redis的持久化中曾提到,Redis高可用的方案包括持久化.主从复制(及读写分离).哨兵和集群.其中持久化侧重解决的 ...

  4. 深入学习Redis(2):持久化

    前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化.复制(及读写分离).哨兵.以及集群. 本文将先说明上述几种技术分别解决了Redis高可 ...

  5. 【数据库开发】学习Redis从这里开始

    转载:http://www.epubit.com.cn/article/200 学习Redis从这里开始 本文主要内容 Redis与其他软件的相同之处和不同之处 Redis的用法 使用Python示例 ...

  6. 深入学习Redis主从复制

    一.主从复制概述 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器.前者称为主节点(master),后者称为从节点(slave):数据的复制是单向的,只能由主节点到从节点. 默 ...

  7. 深入学习Redis(5):集群

    前言 在前面的文章中,已经介绍了Redis的几种高可用技术:持久化.主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡. Redis集群解决了上述问 ...

  8. jquery ajax thinkphp异步局部刷新完整流程

    环境:ThinkPHP3.2.3,jQuery3.2   前言: 在一般的网站中,都需要用到jquery或者其他框架(比如angular)来处理前后端数据交互,thinkphp在后台也内置了一些函数用 ...

  9. 20145219 《Java程序设计》第06周学习总结

    20145219 <Java程序设计>第06周学习总结 教材学习内容总结 InputStream与OutputStream 串流设计 1.串流:Java将输入/输出抽象化为串流,数据有来源 ...

随机推荐

  1. PHP curl_unescape函数

    (PHP 5 >= 5.5.0) curl_unescape — 解码经过URL编码的字符串. 说明 string curl_unescape ( resource $ch , string $ ...

  2. PHP date_timezone_set() 函数

    ------------恢复内容开始------------ 实例 设置 DateTime 对象的时区: <?php$date=date_create("2013-05-25" ...

  3. PHP ftell() 函数

    定义和用法 ftell() 函数返回在打开文件中的当前位置. 返回文件指针的当前位置,如果失败则返回 FALSE. 语法 ftell(file) 参数 描述 file 必需.规定要检查的已打开文件. ...

  4. 6.15 省选模拟赛 老魔杖 博弈论 SG函数

    这道题确实没有一个很好的解决办法 唯一的正解可能就是打表找规律 或者 直接猜结论了吧. 尽管如此 在此也给最终结论一个完整的证明. 对于70分 容易发现状态数量不大 可以进行暴力dp求SG函数. 原本 ...

  5. 剑指 Offer 57 - II. 和为s的连续正数序列

    本题 题目链接 题目描述 我的题解 方法三双100%, 方法一 适合范围广 方法一:双指针(也叫 滑动窗口) 思路分析 用两个指针i和表示当前枚举到的以i为起点,j为终点的区间,sum表示[i,j]的 ...

  6. day8.列表、字典、集合相关操作

    一.列表的相关操作 # (1)列表的拼接 (同元组) # (2)列表的重复 (同元组) # (3)列表的切片 (同元组) # 语法 => 列表[::] 完整格式:[开始索引:结束索引:间隔值] ...

  7. heap相关算法的简单实现

    // 12:06 PM/09/28/2017 #pragma once //向下调整算法 主要用来make_heap 以及pop_heap inline void adjustDown(int* he ...

  8. Netty(二):如何处理io请求?

    文接上一篇.上篇讲到netty暴露一个端口出来,acceptor, handler, pipeline, eventloop 都已准备好.但是并没体现其如何处理接入新的网络请求,今天我们就一起来看看吧 ...

  9. Windows10上安装Linux子系统(WSL2,Ubuntu),配合Windows Terminal使用

    Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具.实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销. WSL 说白了安装Li ...

  10. wifi的前世今生

    日常生活中,大家都把wifi等同于wlan,其实二者是不同的东西. wlan是无线局域网,是个技术,有这个技术,我们就可以无线上网了. wifi是wifi联盟,用来做无线产品之间兼容性认证的,当我们的 ...