redis主从复制详解
目录
前言:
分布式系统
主从模式
主从同步连接过程
replication id作用
offset作用
psync命令(psync replicationId offset)
全量复制
全量复制过程
部分复制
部分复制过程
实时复制
前言:
redis为了保证高可用,它支持主从模式进行部署服务。可以引入更多硬件资源,提供高可用的服务器。主节点和从节点数据需要一致,那么在读数据就可以在服务器集群中任意选择一个节点进行读取。redis主从复制默认只能在主节点中修改数据,从节点是不可以修改的,也是为了保证主从节点数据的一致性。
分布式系统
采用分布式模式部署redis服务,引入更多的硬件资源。
1)可用性,某个节点服务挂了,还有其他节点可以代替。
2)并发性,硬件资源多了,可处理的请求并发数也就多了。
主从模式
一个主节点,多个从节点。主节点上的数据和从节点数据是同步的,可以认为从节点是主节点的副本。
redis中的主从模式,从节点不允许修改数据,只可以在主节点上同步数据,主节点数据有任何修改都需要同步到从节点。写数据仍然是在主节点上写。
那么读数据,主节点和从节点数据是一致的,都可以去读。写数据只可以在主节点上写,主节点还是有一定的压力。但通常情况下读操作数量远远大于写操作。(很好的解决了读并发的可用性和并发数的提高)
主从同步连接过程
注意:
1)通过配置文件保存主节点ip地址和端口号等一些信息。
2)通过TCP的三次握手进行连接。
3)验证主节点是否能正常工作。
4)redis可能会开启密码,在连接的时候就需要验证。
5)从节点连接到主节点进行数据同步,涉及全量同步和部分同步。
6)当从节点和主节点连接成功后,主节点还是会修改数据,那么就需要持续进行数据同步。
redis提供了psync命令。用于完成数据同步过程。不需要手动执行,redis服务器在建立好主从同步关系后,自动执行。从节点负责执行psync同步主节点数据。
replication id作用
主节点启动的时候就会生成,从节点晋升为主节点也会生成。(即使同一个主节点,每次重启,replication id都是不同的)。从节点和主节点建立了复制关系,就会从主节点这边获取到replication id。
如果从节点认为主节点挂了,自己就会晋升为主节点,给自己生成一个replid(从节点主动断开)。此时这个节点也会记得之前主节点的replid,就是通过replid2。后续发现主节点可以正常通信了,就可以使用replid2来恢复之前的主从关系。(需要手动干预,哨兵机制可以自动完成这个过程)。
offset作用
1)主节点和从节点都会维护 偏移量(整数)。
2)主节点的偏移量,主节点会收到很多的修改命令(每个命令都要占据几个字节)。主节点会把这些修改命令,每个命令的字节数进行累加。
3)从节点偏移量就描述数据同步到哪里了。从节点每秒钟会上报自己的offset给主节点。
4)如果主节点和从节点offset一样,并且replication id也一致,说明主节点和从节点的数据完全一致。
psync命令(psync replicationId offset)
从节点主动发起,用来从主节点同步数据。可能是全量复制,也可能是复制一部分数据(增量复制)
offset如果为-1则是获取全量数据。如果是具体的整数,那么就从当前偏移量进行获取。
全量复制
不是从节点索要哪部分数据,主节点就会给从节点哪部分数据。主节点会做一个判断,如果方便就给部分数据,如果不方便就是全量复制了。
全量复制时机:
从节点首次和主节点进行数据同步
主节点积压缓冲区不足以从节点缺失是数据(主节点积压缓冲区,和从节点断开连接后,数据保存位置)
部分复制时机:
之前已经复制过一部分数据了,由于网络抖动,两者断开连接了。当从节点再次连接上之后。
全量复制过程
1)从节点发送psync命令给主节点进行数据同步,由于是第一次同步,从节点没有主节点replid和offset,所以发送psync ? -1进行全量复制。
2)主节点根据命令,解析出需要全量复制,回复+FULLRESYNC响应。
3)从节点接收主节点的运行信息进行保存。
4)主节点执行bgsave进行rdb文件持久化。
5)主节点发送rdb文件到从节点,从节点保存rdb文件到本地。
6)主节点将从生成rdb文件到从节点接收完成期间执行写命令,写入缓冲区。等从节点保存完rdb文件后,主节点再将缓冲区数据补发给从节点,补发的数据仍然按照rdb二进制格式追加到收到的rdb文件中,保持主从一致性。
7)从节点清空自身原有旧数据。
8)从节点加载rdb文件得到与主节点一致的数据。
9)如果从节点加载完成rdb文件后,并且开启了AOF持久化功能,它会进行bgrewrite操作,得到最近AOF文件。
部分复制
之前已经复制过一部分数据了,由于网络抖动,两者断开连接了。当从节点再次连接上之后。
部分复制过程
1)从主从节点之间出现网络中断时,如果超过rep-timeout时间,主节点就会认为从节点出现故障并中断复制连接。
2)主从连接中断期间主节点仍然接收命令,但无法发送给从节点,所以暂时将这些命令保存在复制积压缓冲区中。
3)当主从节点网络恢复后,从节点再次连接上主节点。
4)从节点将之前保存的replid和offset作为psyns命令参数发送给主节点,请求进行部分复制。
5)主节点接收到psync请求后,进行必要验证,随后根据offset去复制积压缓冲区中查找合适的数据,并响应+CONTINUE给从节点进行部分复制。
6)主节点将从节点需要同步的数据发送给它,完成数据一致性操作。
replication id
从节点再次连接主节点,首先进行replication id判断,如果和之前主节点保存的不一致,则进行全量复制。
如果和之前保存的一致,然后再根据offset进行判断。
offet
当从节点和主节点断开连接后,主节点会临时将数据保存到积压缓冲区中。通过offset进行判断,如果积压缓冲区可以满足从节点,则就部分复制了。
如果积压缓冲去不能满足从节点缺失的数据,则只能全量复制了。
从节点和主节点断开:
从节点和主节点主动断开。从节点就会升级为主节点(生成自己的replication id)
主节点挂了。从节点不会升级为主节点,必须通过人工干预,恢复主节点。
注意:
全量复制:从节点刚连接上主节点之后,进行的数据初始化工作。
部分复制:特殊情况的处理方式,一种优化手段,毕竟全量复制操作比较重量。
实时复制
当从节点和主节点数据已进同步完成,后续主节点还会收到修改数据的操作。主节点和从节点会使用tcp长连接,主节点将变化数据同步到从节点上。
注意:
进行实时复制的时候需要保证连接处于可用状态,使用心跳包机制进行判定。
主节点:默认,每隔10s给从节点发送一个ping命令,从节点收到后返回pong
从节点:默认,每隔1s给从节点发送一个特定的请求,上报从节点的复制进度(offset)
注意:
主从复制最大的问题还是在主节点上,如果主节点挂了,从节点就迷茫了。只能提供读操作,从节点不能自动升级为主节点,替换不了原来主节点角色。只能手动干预,改变拓扑结构。
redis哨兵模式,可以自动对挂了的主节点进行替换。
相关文章:
redis主从复制详解
目录 前言: 分布式系统 主从模式 主从同步连接过程 replication id作用 offset作用 psync命令(psync replicationId offset) 全量复制 全量复制过程 部分复制 部分复制过程 实时复制 前言: redis为了保证高可用,它支持…...
kubernetes/k8s驱逐机制总结篇
概述 k8s的驱逐机制是指在某些场景下,如node节点notReady、node节点压力较大等,将pod从某个node节点驱逐掉,让pod的上层控制器重新创建出新的pod来重新调度到其他node节点。这里也将kube-scheduler的抢占调度纳入到了驱逐的讨论范围内&#…...
Git gui教程---第七篇 Git gui的使用 返回上一次提交
1. 查看历史,打开gitk程序 2. 选中需要返回的版本,右键,然后点击Rest master branch to here 3.出现弹窗 每个选项我们都试一下,从Hard开始 返回的选项 HardMixedSoft Hard 会丢失所有的修改【此处的…...
Web 开发 Django 管理工具
上次为大家介绍了 Django 的模型,通过模型就可以操作数据库,从而就可以改变页面的展示内容,那问题来了,我们只能通过手动编辑模型文件来配置模型吗?当然不是,Django 为我们提供了强大的工具,可以…...
分类算法的评价指标
分类算法的评价指标 查准率、查全率、准确率、F1分数: 查准率(Precision): 模型预测为正例的样本中实际未正的比例。它关注的点在:预测为正例样本的准确性。 查全率(recall): 模型…...
智能工厂移动式作业轻薄加固三防平板数据采集终端
在这个高度自动化和数字化的环境中,数据采集变得尤为重要。为了满足这个需求,工业三防平板数据采集终端应运而生。工业三防平板数据采集终端采用了轻量级高强度镁合金材质,这使得它在保持轻薄的同时具有更强的坚固性。这种材质还具有耐磨防损…...
Python Flask token身份认证
首先安装依赖: pip install flask-jwt-extended 然后在主应用中(项目入口文件)加入以下代码: from flask import Flask from flask_jwt_extended import JWTManager #引入依赖 app Flask(__name__) app.config[JWT_SECRET_KEY…...
docker安装rabbitMQ
目录 1、拉取镜像 2、构造镜像 3、开启插件 4、开启安全组 5、访问 ui界面访问不到解决步骤 1、拉取镜像 docker pull rabbitmq 这里拉取的是最新镜像,若要指定版本可在后加上版本号即可;比如 docker pull rabbitmq:3.7.14 2、构造镜像 方式一:交…...
PDF如何转ppt?PDF转ppt的方法
PDF是一种广泛应用于文档传输和存储的格式,然而,在某些情况下,我们可能需要将PDF文件转换为PPT,以便更加灵活地编辑和展示内容。那么,PDF如何转ppt呢?在本文中,我们将介绍几种常用的方法和工具,…...
设计模式(8)外观模式
一、 1、使用背景:降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。 2、定义: 为子系统中的一组接口定义一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。完美地体现…...
Django(7)-项目实战-发布会管理
登录功能 模板页面 sign/templates/index.html <!DOCTYPE html> <html> <head><title>Login Page</title> </head> <body><h1>发布会管理</h1><form action"/login/" method"post"><la…...
Hbase-技术文档-java.net.UnknownHostException: 不知道这样的主机。 (e64682f1b276)
问题描述: 在使用spring-boot操作habse的时候,在对habse进行操作的时候出现这个问题。。 报错信息如下: 第一段报错: 第二段报错: java.net.UnknownHostException: e64682f1b276 问题定位解读: 错误 ja…...
OpenCV + CLion在windows环境下使用CMake编译, 出现Mutex相关的错误的解决办法
最近在windows下面用cmake编译OpenCV的项目代码,但是一直碰到找不到mutex的问题,百思不得其解, Executing task: g -g -o bin/debug.exe src/main.cppC:\MinGW\lib\opencv\build\include/opencv2/core/utility.hpp:697:14: error: recursive_mutex in namespace st…...
华为质量管理:从产品质量到用户体验,Kano模型成为新方向
目录 前言 华为质量管理的四个阶段 基于 IPD 如何做质量管理呢? CSDN相关课程 作者简介 前言 今天继续来谈谈华为流程体系中的质量管理过程。 通常来说质量具体是指产品的质量,也就是产品的使用价值及其属性。 产品再细分的话可以分为三个层次&a…...
正则表达式学习笔记
正则表达式学习笔记 常用正则表达式 1、匹配字母 Pattern patternPattern.compile("[a-zA-Z]"); 2、匹配数字 Pattern patternPattern.compile("[0-9]"); 3、匹配字母和数字 Pattern patternPattern.compile("([0-9])|([a-zA-Z])")…...
构建数据可视化(基于Echarts,python)
构建数据可视化(基于Echarts,python) 本文目录: 一、写在前面的题外话 二、数据可视化概念 三、用Python matplotlib库绘制数据可视化图 四、基于Echarts构建大数据可视化 4.1、安装echarts.js 4.2、数据可视化折线图制作 4.2.1、基础折线图 4.2…...
【2023最新版】R安装(直接+Anaconda)及使用(Pycharm配置R)教程
目录 一、R语言 1. R官网 2. R介绍 二、直接安装R 1. 下载 2. 安装 三、Pycharm使用R 1. 安装Pycharm 2. R Language for IntelliJ插件 3. R设置 报错 4. R软件包 安装 加载 查看已安装的包 四、使用Anaconda创建R语言虚拟环境 1. 安装Anaconda 2. 创建R语言…...
opencv 案例实战02-停车场车牌识别SVM模型训练及验证
1. 整个识别的流程图: 2. 车牌定位中分割流程图: 三、车牌识别中字符分割流程图: 1.准备数据集 下载车牌相关字符样本用于训练和测试,本文使用14个汉字样本和34个数字跟字母样本,每个字符样本数为40,样本尺…...
Vue实例挂载的过程
一、思考 我们都听过知其然知其所以然这句话 那么不知道大家是否思考过new Vue()这个过程中究竟做了些什么? 过程中是如何完成数据的绑定,又是如何将数据渲染到视图的等等 二、分析 首先找到vue的构造函数 源码位置:src\core\instance\…...
dvwa xss通关
反射型XSS通关 low难度 选择难度: 直接用下面JS代码尝试: <script>alert(/xss/)</script>通关成功: medium难度 直接下面代码尝试后失败 <script>alert(/xss/)</script>发现这段代码直接被输出: 尝试…...
AD如何进行汉化
AD如何进行汉化 通过安装好AD后,默认都是英文界面模式,如果想汉化为中文模式,需要点击“DXP”->“参数选择”,打开界面如下: 然后将上图“本地化”下面的方框勾选上,点击“应用”,“确定”…...
【JUC基础】JUC入门基础
目录 什么是JUC线程和进程锁传统的 synchronizedLock 锁Synchronized 与 Lock 的区别 生产者和消费者问题Synchronized 版Lock版Condition 的优势:精准通知和唤醒线程 8 锁现象问题1:两个同步方法,先执行发短信还是打电话?问题2&a…...
自然语言处理: 第十章GPT的API使用
理论基础 现在的以GPT为首的生成类模型,它拥有对话的能力,它会根据你输入的暗示(prompt)或者指令(instruct)生成对应的回答。所以,不同的输入会导致不同的输出(其实由于chatgpt最终生成的答案是beam_search 以及随机采样的机制,所…...
docker使用harbor进行镜像仓库管理演示以及部分报错解决
目录 一.安装harbor和docker-compose 1.下载 2.将该文件修改为这样,修改好自己的hostname和port,后文的用户和密码可以不改也可以改,用于登录 3.安装 二.修改daemon.json文件和/etc/hosts文件 三.使用powershell作windows端域名映射 四…...
【精算研究01/10】 计量经济学的性质和范围
一、说明 计量经济学是使用统计方法来发展理论或测试经济学或金融学中的现有假设。计量经济学依赖于回归模型和零假设检验等技术。计量经济学也可以用来预测未来的经济或金融趋势。 图片来源:https://marketbusinessnews.com 二、 计量经济之简介 计量经济学是对经济…...
【python知识】用 Tkinter实现“剪刀-石头-布”和“弹球游戏 ”
一、提要 Tkinter是一个Python内置模块,它提供了一个简单易用的界面来创建GUI。 在实现一些动态的画面、如游戏还是需要一些创新性思维的。在本文中,我们将使用 Tkinter 探索 Python GUI 编程。我们将介绍 Tkinter 的基础知识,并演示如何使用…...
Android 绘制之文字测量
drawText() 绘制文字 绘制进度条:paint.strokeCap Paint.CAP.RONUD 线条两边样式 设置文字字体:paint.typeFace Resources.Compat.getFont(context,font) 设置加粗 paint.isFakeBoldText 设置居中: paint.setTextAlign Paint.Align.CENTER //居中, 并不是真正的居中 往…...
基于AVR128单片机智能传送装置
一、系统方案 1、板载可变电阻(电位器)R29的电压作为处理器ATmega128的模数转换模块中单端ADC0的模拟信号输入(跳线JP13短接)。 2、调节电位器,将改变AD转换接口ADC0的模拟信号输入,由处理器完成ADC0的A/D转…...
Nexus私有仓库+IDEA配置远程推送
目录 一、docker安装nexus本地私服,Idea通过maven配置deploy本地jar包(简单) 二、docker push镜像到第三方nexus远程私服(shell命令操作) 三、springboot通过maven插件自动生成docker镜像并push到nexus私服…...
idea2023项目上传到gitee
1、按照gitee插件 File——>Settings plugins——>Marketplace下面搜索gitee,然后按照gitee插件 2、上传项目 VCS_——>Share Project on Gitee 如果第一次没登录的需要先登录,登录完后就可以上传了...
专门做装修的网站/最近的电脑培训学校
给定post请求包体(是json的字符串) {"A" : 10086,"B" : "请求信息"} 发送HTTP过程 1. 将post请求包体(是个json格式的字符串),Marshal成json格式 2. 发送HTTP请求 3. 接收HTTP返回…...
怎么把网站放到空间/成都最新热门事件
2019.08.29学习整理 绑定方法与非绑定方法 绑定方法 对象绑定方法 类的绑定方法 绑定方法:特殊之处,绑定给谁就是谁来调,并且会把自身调过来 类的绑定方法 绑定给类,类来调用,会把类自身传过来 类的绑定方法用在什么地…...
wordpress皮肤下载/博客网站注册
一、简介 Oracle权限分为系统权限和对象权限。 1、系统权限 注意:系统权限不支持级联回收,所以你需要使用sysdba一个个的回收。 2、对象权限 注:对象权限支持级联回收,系统权限不支持级联回收 1、查询oracle中的所有的权限,必须是sysdba才能进行查询 select * from system_priv…...
个人网站简单/个人免费网站建设
临近年底,人们日益关注格力董事长董明珠与小米董事长雷军的10亿赌约谁将赢的问题,其实当下对格力最不利的是它的直接竞争对手美的正凭借多元化的优势在利润方面快速缩短与格力的差距,而此前在营收方面前者已将后者甩开一大截距离,…...
php网站培训机构企业做网站/seo成功案例分析
本篇文章帮大家学习xml-RPC实例(java),包含了XML-RPC实例(Java)使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。在本节中,将通过Java编程语言演示如何使用XML-RPC,首先创建一个使用Java类…...
赣州市做网站设计/杭州seo公司
1、创建场景函数 var scenenew THREE.Scene();说明: 创建一个场景,所有的物体,容器都放在该场景中,并且只存在于一个唯一的场景。 2、创建相机函数 var cameranew THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeig…...