Redis主从复制的原理

2023-11-10

更多内容,欢迎关注微信公众号:全菜工程师小辉。公众号回复关键词,领取免费学习资料。

在Redis集群中,让若干个Redis服务器去复制另一个Redis服务器,我们定义被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave),这种模式叫做主从复制模式。

> 数据流向是单向的,只能是从master到slave

> 一个slave只能有一个master

主从复制的作用

  • 为数据提供多个副本,实现高可用
  • 实现读写分离(主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性)

主从复制的方式

  • 命令slaveof。
    优点:无需重启。缺点:不便于管理
// 命令行使用
slaveof ip port // 使用命令后自身数据会被清空,但取消slave只是停止复制,并不清空
  • 修改配置。
    优点:统一配置。缺点:需要重启
// 配置文件中配置
slaveof ip port
slave-read-only yes //只允许从节点进行读操作

全量复制

用于初次复制或其它无法进行部分复制的情况,将主节点中的所有数据都发送给从节点,是一个非常重型的操作,当数据量较大时,会对主从节点和网络造成很大的开销

Redis全量复制过程

全量复制过程:

  1. Redis内部会发出一个同步命令,刚开始是Psync命令,Psync ? -1表示要求master主机同步数据
  2. 主机会向从机发送run_id和offset,因为slave并没有对应的 offset,所以是全量复制
  3. 从机slave会保存主机master的基本信息
  4. 主节点收到全量复制的命令后,执行bgsave(异步执行),在后台生成RDB文件(快照),并使用一个缓冲区(称为复制缓冲区)记录从现在开始执行的所有写命令
  5. 主机发送RDB文件给从机
  6. 发送缓冲区数据
  7. 刷新旧的数据。从节点在载入主节点的数据之前要先将老数据清除
  8. 加载RDB文件将数据库状态更新至主节点执行bgsave时的数据库状态和缓冲区数据的加载。

全量复制开销

  • 主节点需要bgsave
  • RDB文件网络传输占用网络io
  • 从节点要清空数据
  • 从节点加载RDB
  • 全量复制会触发从节点AOF重写

部分复制

部分复制是Redis 2.8以后出现的,用于处理在主从复制中因网络闪断等原因造成的数据丢失场景,当从节点再次连上主节点后,如果条件允许,主节点会补发丢失数据给从节点。因为补发的数据远远小于全量数据,可以有效避免全量复制的过高开销,需要注意的是,如果网络中断时间过长,造成主节点没有能够完整地保存中断期间执行的写命令,则无法进行部分复制,仍使用全量复制

Redis部分复制过程

部分复制过程:

  1. 如果网络抖动(连接断开 connection lost)
  2. 主机master 还是会写 repl_back_buffer(复制缓冲区)
  3. 从机slave 会继续尝试连接主机
  4. 从机slave 会把自己当前 run_id 和偏移量传输给主机 master,并且执行 pysnc 命令同步
  5. 如果master发现你的偏移量是在缓冲区的范围内,就会返回 continue命令
  6. 同步了offset的部分数据,所以部分复制的基础就是偏移量 offset。

> 服务器运行ID(run_id):每个Redis节点(无论主从),在启动时都会自动生成一个随机ID(每次启动都不一样),由40个随机的十六进制字符组成;run_id用来唯一识别一个Redis节点。 通过info server命令,可以查看节点的run_id。

开发运维常见的问题

  1. 读写分离
  • 复制数据存在延迟(如果从节点发生阻塞)
  • 从节点可能发生故障
  1. 主从配置不一致
  • 例如maxmemory不一致,可能会造成丢失数据
  • 例如数据结构优化参数不一致:造成主从内存不一致
  1. 规避全量复制
  • 第一次全量复制不可避免,所以分片的maxmemory减小,同时选择在低峰(夜间)时,做全量复制。
  • 复制积压缓冲区不足 增大复制缓冲区配置rel_backlog_size

> 例如如果网络中断的平均时间是60s,而主节点平均每秒产生的写命令(特定协议格式)所占的字节数为100KB,则复制积压缓冲区的平均需求为6MB,保险起见,可以设置为12MB,来保证绝大多数断线情况都可以使用部分复制。

  1. 复制风暴 master节点重启,master节点生成一份rdb文件,但是要给所有从节点发送rdb文件。对cpu,内存,带宽都造成很大的压力

更多内容,欢迎关注微信公众号:全菜工程师小辉。公众号回复关键词,领取免费学习资料。

哎呀,如果我的名片丢了。微信搜索“全菜工程师小辉”,依然可以找到我

转载于:https://my.oschina.net/u/2425469/blog/3102649

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis主从复制的原理 的相关文章

  • ZYNQ 使用AXI_BRAM实现PS与PL 数据交互数据交互

    一 BRAM IP核介绍 总线是一组传输通道 是各种逻辑器件构成的传输数据的通道 接口是一种连接标准 又常被称为物理接口 协议是数据传输的规则 PS与PL连接方式主要是通过AXI总线进行的 ZYNQ上的总线协议有AXI4 AXI4 Lite
  • 拼多多服务器请求失败在手机上如何修复,拼多多登录不了怎么办?怎么解决?...

    其实很多人不知道 其实是可以在拼多多开店的 不仅可以拼团购物 也可以开店卖自己想卖的商品 不过拼多多平台服务器经常不太稳定 大家时常会碰见拼多多后台打不开 账号登录不了等情况 今天疯狂易购网小编就为大家介绍解决办法 一 拼多多后台打不开怎么
  • qt程序使用tcp连接,客户端退出后,再次重连服务器,一直出现close_wait状态,且无法再连接上

    百度了tcp的各个状态 看到了 CLOSE WAIT状态的原因与解决方法 转载留自己看 编程小生的专栏 CSDN博客 close wait 里面说的close wait的现象 主要原因是某种情况下对方关闭了socket链接 但是我方忙与读或
  • 深度学习实现缺陷检测

    深度学习实现缺陷检测 在工业生产过程中 缺陷检测是一个重要的环节 传统的缺陷检测方法通常依赖于人工提取特征和设计分类器 这种方式需要大量的人力和时间 并且对于复杂的缺陷类型可能不够有效 而深度学习技术通过利用神经网络自动学习特征和进行分类
  • Authing 正式发布应用集成网关 - Authing Gateway

    2023 年 2月 Authing 推出了身份领域的 PaaS化应用集成网关 Authing Gateway Authing Gateway 提供将原有应用快速集成到 Authing 身份云产品的能力 在扩充身份认证方式的同时 提高资源的安
  • 【OSGI】Error osgi xx Invalid value for DynamicImport-Package dynamic.import.pack

    1 背景 git下载项目 siddhi test suite 然后运行里面的测试类报错 Error osgi siddhi test suite Invalid value for DynamicImport Package dynamic
  • 计算机组成原理——存储器(一)

    存储器 一 一 存储器概述 二 存储器的分级结构 三 主存储器的技术指标 四 存储器与CPU的联系 地址总线 CPU与存储器的联系 编址方式 1 按字编址 M N 方式 2 按字节编址 五 SRAM存储器 cache 1 存储元基本结构 2
  • vue-element-admin 后台管理系统

    文章目录 前言 一 vue element admin 是什么 二 使用步骤 下载和部署 浏览模板项目代码 官网 启动 三 技术提炼 1 vue全家桶都有什么 2 vuex 什么时候用文件 什么时候直接写vue页面 导航守卫 3 组件之间的
  • 机器学习期末考试

    机器学习期末考试 一 机器学习链接 1 机器学习期末复习试卷 zhouyan2000的博客 CSDN博客 机器学习期末考试 2 机器学习笔试题 4条消息 机器学习笔试题目 北冥有小鱼 CSDN博客 机器学习题目 3 机器学习面试题 4 一天
  • 【Kubernetes理论篇】Kubernetes核心组件及资源介绍

    文章目录 一 Kubernetes架构 二 Kubernetes核心组件 三 Kubernetes核心资源 四 拓展 1 Service和Ingress的区别是什么 2 Replicaset和Deployment的区别是什么 3 Deplo
  • Flink 错误:找不到参数 evidence$ 的隐式值:TypeInformation 大数据

    Flink 是一个流处理和批处理框架 被广泛应用于大数据领域 在使用 Flink 进行开发时 有时会遇到各种各样的错误和异常 本文将详细介绍一种常见的错误情况 即在 Flink 中遇到的 No implicits found for par
  • Pycharm最新版如何设置自动换行

    1 代码编辑区自动换行 对所有文件有效 1 File gt Settings gt Editor gt General 2 找到Soft Wraps 勾选Soft wrap files 3 在输入框中添加 py 如下图所示 2 在图示位置点
  • 使用python和pyqt5轻松上手人脸识别系统(含代码)

    使用python和pyqt5轻松上手人脸识别系统 含代码 一 环境配置 1 1 python环境配置 1 1 1 安装 anaconda 1 1 2 安装pycharm 1 1 3 配置pip源 1 2 mysql数据库安装 1 3 相关依
  • Windows下,Eclipse的Android NDK(r8e) 配置

    一 关于NDK Android NDK全称 Native Development Kit 即本地开发包 1 NDK是一系列工具的集合 NDK提供了一系列的工具 这些工具对开发者的帮助是巨大的 它们能帮助开发者快速开发C 或C 的动态库 并能
  • windows怎么部署项目到云服务器

    要将项目部署到云服务器 可以按照以下步骤进行操作 1 在云服务提供商上创建一个云服务器实例 并确保已经将其配置和启动 2 在本地开发环境中将项目打包成可执行文件或者jar包 并确保项目能够正确运行 3 使用远程连接工具 如SSH RDP等
  • ctfshow萌新web17

    c传参过滤掉php 思路 include文件包含 利用日志文件包含 访问日志文件 c var log nginx access log 发现日志文件记录了user agent头 于是在该头中插入一句话木马 再访问日志文件 看日
  • AMBA总线协议AHB、APB、AXI对比分析

    一 AMBA概述 AMBA Advanced Microcontroller Bus Architecture 高级处理器总线架构 AHB Advanced High performance Bus 高级高性能总线 ASB Advanced
  • Uniapp中vueX实现登录状态功能

    uniapp使用Vuex实现登录状态的判断 退出登录 使用action commit实现登录功能 Vue use Vuex export default new Vuex Store state token userid username
  • 了解CMS(Concurrent Mark-Sweep)垃圾回收器

    原文地址为 了解CMS Concurrent Mark Sweep 垃圾回收器 一字不差的贴的人家的 就是感觉写的比较好 贴出来了 羞羞 1 总体介绍 CMS Concurrent Mark Sweep 是以牺牲吞吐量为代价来获得最短回收停
  • 使用git和maven过程一些命令

    git常用命令 1 git status 查看文件在工作目录与缓存的状态 2 git add 添加所有的文件到缓存 3 git commit m 提交的描述信息 如果我们这里不用 m参数的话 git将调到一个文本编译器 通常是vim 来让你

随机推荐

  • mysql5.7 leftjoin group by(获取关联表最新数据)

    用户表 users 日志表 logs 外键 user id 创建时间 created at 获取所有用户最新的日志 SELECT b from SELECT user id max created at as maxtime from lo
  • nafxcwd.lib(afxmem.obj) error lnk2005

    最近写程序突然遇到个错误 nafxcwd lib afxmem obj error lnk2005 查了下msdn发现主要原因是同时使用了CRT中的new delete和MFC中的new delete重载导致的 参考 http suppor
  • RabbitMq基本概念 = >实践DirectExchange和TopicExchange交换机模式

    AMQP 和IM的区别 AMQP 高级消息队列 1 可以一对多广播 也可以一对一广播 2 生产者和消费者不知道对方是谁 IM 1 只能一对一广播 2 生产者和消费者知道对方是谁 RabbitMQ 只是消息代理 我们不生产消息 我们只是消息的
  • 怎样成为一名优秀的程序员?

    新加坡国立大学计算机系有两门课 CS 1101 1102 几乎所有的大学计算机系课程都有两门类似的课程 但几乎所有的学生都误解了这两门课 以为前者是教C 后者是教java 但实际上前者是 Programming Methodology 后者
  • Java学习笔记——34多线程01

    多线程 实现多线程 进程和线程的区别 多线程的实现方式 方式一 继承Thread类 设置线程名称 线程调度 线程控制 线程生命周期 方式二 实现Runnable接口 实现多线程 进程和线程的区别 进程 是正在运行的程序 是系统进行资源分配和
  • Netstat命令详解(Windows)

    Netstat 用于显示与IP TCP UDP 和ICMP 协议相关的统计数据 一般用于检验本机各端口的网络连接情况 如果你的计算机有时候接收到的数据报导致出错数据或故障 你不必感到奇怪 TCP IP 可以容许这些类型的错误 并能够自动重发
  • Kotlin/Java之常用“集合型”数据类型

    先说说数组 Array 和 ArrayList lt 数组 Array gt 整型数组初始化 val point intArrayOf 0 0 实为IntArray 对应Java类型 int 其他还有 charArrayOf byteArr
  • 两数求和

    给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的那 两个 整数 并返回他们的数组下标 你可以假设每种输入只会对应一个答案 但是 你不能重复利用这个数组中同样的元素 示例 给定 nums 2 7 11 1
  • 服务器租用机房机房的类型应该如何选择

    服务器租用机房机房的类型应该如何选择 1 单电信机房 单电信服务器机房业务模式比较固定 访问量也不是很大 适合新闻类网站或政务类网站 如果网站的PV流量持续增加 建议后期采用租赁CDN的方式解决非电信用户访问网站速度过慢的问题 2 双线机房
  • QKL123区块链排行榜(2019年04月)

    QKL123区块链排行榜包括区块链项目 区块链交易平台 区块链媒体 区块链公众号 区块链矿机 区块链矿池 EOS Dapp ETH Dapp 区块链钱包九大榜单 目前 区块链项目榜单选取的客观指标包括流通市值 GitHub提交数 区块链交易
  • 嵌入式stm32基础项目开发:心率检测仪的设计与实现

    嵌入式stm32基础项目开发 心率检测仪的设计与实现 本教程主要给大家谅解了嵌入式stm32开发 心率检测仪的设计与实现 需要的朋友们可以下载来看看 作为参考 项目描述 通过心律传感器采集我们的心律数据 然后通过串口传送到上位机中 上位机用
  • 这篇文章教大家怎么生成ai图片

    在数字化时代 人工智能技术的发展正在改变我们的生活方式 其中之一就是在艺术领域的应用 ai绘画是人工智能技术在艺术领域的一种应用 它可以自动创作出各种各样的图片 为艺术家和设计师提供了更加便捷和高效的绘画工具 ai绘画的出现 不仅可以缩短绘
  • 素数环(回溯算法)

    回溯算法 在包含问题的所有可能解的解空间树中 从根节点出发 按照深度优先遍历的策略进行搜索 对于解空间树种的某个节点 如果该节点满足问题的约束条件 则进入该子树继续进行搜索 否则将以该节点为根节点的子树进行剪枝 回溯法常常可以避免所有的可能
  • layui table.js表格一直返回数据异常

    1 排查数据是否已经正常返回 2 layui table 返回格式默认不能自定义的 返回的分页json格式需要和table js中规定的返回键一致 如下 3 经过测试 其实最重要的是code需要和上图中statusName后的resultC
  • Cisco 路由器VOIP 配置解析

    在企业网络中推广 IP 语音技术有很多优点 例如可以控制数据流量 保证语音质量 充分利用企业租用的数据线路资源 节省传统的长途话费等等 企业使用 IP 语音技术 可以将语音 数据和多媒体通信融合在一个集成的网络中 并在一个企业解决方案中 把
  • 简易版的飞机大战(C语言)

    一 只会发射激光 画质不清晰的飞机大战 游戏的总体结构根据C语言的循环制作的 本来还想说点什么但是注释里面都有 代码 include
  • ansys18安装以后打不开_ansys18.0安装过程及常见问题解决方案【图文】

    1 首先打开ansys18 0安装文件夹 一般情况下通过网络渠道下载的ansys18 0安装包会有四个文件夹 crack文件夹为授权配置文件夹 disk1 disk2 disk3文件夹为安装程序包 我们首先打开disk1文件夹 双击setu
  • 物联网LoRa系列-31:通过LoRa终端实现远程抄表的原理与系统框架(水、电、气、热等通用)

    LoRa终端远程抄表的系统架构图 抄表系统由 无线电表 线集中器 业务数据中心组成 1 无线电表 又称为LoRa终端 内嵌LoRa模块 进行数据的采集 并LoRa WAN协议实现远程数据的传输 LoRa智能终端能将传统水表 电表等读数通过电
  • 可迭代(iterable)和类数组(array-like)

    可迭代 iterable 和类数组 array like 可迭代 iterable 是实现了 Symbol iterator 方法的对象 可以应用 for of 的对象被称为 可迭代的 类数组 array like 是有索引和 length
  • Redis主从复制的原理

    更多内容 欢迎关注微信公众号 全菜工程师小辉 公众号回复关键词 领取免费学习资料 在Redis集群中 让若干个Redis服务器去复制另一个Redis服务器 我们定义被复制的服务器为主服务器 master 而对主服务器进行复制的服务器则被称为