redis主从复制的理论和实战详细教程

news2024/11/15 4:36:47

0 前言

  就是主从复制,master以写为主,slave以读为主,当master数据变化的时候,自动将新的数据异步同步到其他的slave数据库。也就是redis主从复制异步同步数据的,所以在主从架构中使用分布式锁时,可能会出现单节点故障,因为master节点把锁信息同步到slave节点这个过程中,宕机了。最终没有完成数据同步,造成了多个线程持有锁,以至于线程不安全,这是后话了。

1.主从复制的功能

  1.读写分离;
  2.容灾恢复;
  3.数据备份;
  4.水平扩容支撑高并发;

2. 如何配置主从复制架构

在这里插入图片描述

2.1权限配置

  master如果配置了requirepass参数,需要密码登录 ,那么slave就要配置masterauth来设置校验密码,否则的话master会拒绝slave的访问请求。
在这里插入图片描述

2.2基本操作命令

  info replication :可以查看复制结点的主从关系和配置信息
  replicaof 主库IP 主库端口 :一般写入进Redis.conf配置文件内,重启后依然生效
  slave of 主库IP 主库端口 :每次与master断开之后,都需要重新连接,除非你配置进了redis.conf文件;在运行期间修改slave节点的信息,如果该数据库已经是某个主数据库的从数据库,那么会停止和原主数据库的同步关系 转而和新的主数据库同步,重新拜码头。
  slave of no one :使当前数据库停止与其他数据库的同步, 转成主数据库,自立为王 \textcolor{red}{转成主数据库,自立为王} 转成主数据库,自立为王

2.2.1 实操演示

1.架构说明

  一个Master两个Slave,三台虚拟机,每台都安装redis。拷贝多个redis.conf文件redis6379.conf、redis6380.conf、redis6381.conf。
在这里插入图片描述

2.2.2 配置细节以及注意哪些问题?

  三台虚拟机需要能相互ping通且需要注意防火墙配置,如果有防水墙需要配置开放端口,在测试开发测试阶段关闭防火墙也可以。
  1.开启daemonize yes。
在这里插入图片描述

  2.注掉blind 127.0.0.1。
在这里插入图片描述

  3.修改保护模式protected-mode no;
在这里插入图片描述

  4.指定端口;
在这里插入图片描述

  5.指定当前工作目录,dir。
在这里插入图片描述

  6.pid文件名称,pidfile
在这里插入图片描述

  7.log文件名称,logfile。
在这里插入图片描述

  8.requirepass。
在这里插入图片描述

  9.dump.rdp名称
在这里插入图片描述

  10.aof文件,appendfilename,本步骤可选。
在这里插入图片描述
  11.从机访问主机的通行密码masterauth,必须要配置,即在从机的redis配置文件上进行配置,主机不需要配置。
在这里插入图片描述

2.2.3 一主二从

1.方案1
配置文件执行:1.replicaof 主库IP 主库端口,具体详情在上一小节中的步骤11中 说明过;2.配从(库)不配(主)库:配置从机;3.先master后两台slave依次启动。4.主从关系查看。
启动redis主从
连接成功以后,插卡安主机日志,复制主机数据,如下图所示:
在这里插入图片描述
在这里插入图片描述
从机日志,如下如所示:
在这里插入图片描述
在主机客户端中执行info replication
在这里插入图片描述
而在从机中执行,如下所示:
在这里插入图片描述
** 从机切入点问题**
  1. s l a v e 是从头开始复制还是从切入点开始复制 ? \textcolor{blue}{slave是从头开始复制还是从切入点开始复制?} slave是从头开始复制还是从切入点开始复制? A:master启动,写到k3 slave1跟着master同时启动,跟着写到k3 slave2写到k3后才启动,那之前的是否也可以复制? 首次一次性全量复制到从节点,后续跟随,master写,slave跟随。
主机shutdown后,从机会上位吗?
  1.从机不动,原地待命,从机数据可以正常使用,等待主机重启归来。
机shutdown后,重启后主从关系还在吗?从机还能否顺利复制?
  1.主从关系依然存在,从机依旧是从机,可以顺利复制。
某台从机down后,master继续,从机重启后它能跟上大部队吗?
  1.可以,类似于从机切入点问题。

2.2.4. 方案2:命令操作手动主从关系指令

  1.从机停机去掉配置文件中的配置项,3台目前都是主机状态,各不从属。操作时,从机配置注释掉info replication。
  2.3台master。
  3.预设的从机上执行命令,salveof 主库IP 主库端口。
用命令使用的话,2台从机重启后,关系还在吗?不会存在了。
在这里插入图片描述

2.2.5 薪火相传

  1.上一个slave可以是下一个slave的master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻主master的写压力
  2.中途变更转向:会清除之前的数据,重新建立主从关系并拷贝最新的
  3.slaveof 新主库IP 新主库端口

2.2.6 反客为主

  slaveof no one 使当前数据库停止与其他数据库的同步关系。

总结

lave启动,同步初请

  1.slave启动成功链接到master后会发送一个sync命令。
  2.slave首次全新连接master,一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除。

首次连接,全量复制

  1.master节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集的命令并缓存起来,master节点执行RDB持久化完后,master将RDB快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步。
  2.而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化。

心跳持续,保持通信

  repl-ping-replica-period 10

进入平稳,增量复制

  master继续将新的所有收集到的修改命令自动依次传送给slave,完成同步。

从机下线,重连续传

  master会检查backlog里面的offset,master和slave都会保存一个复制的offset还有一个masterId,offset是保存在backlog中的。 m a s t e r 只会把已经缓存的 o f f s e t 后面的数据复制给 s l a v e ,类似断点续传 \textcolor{red}{master只会把已经缓存的offset后面的数据复制给slave,类似断点续传} master只会把已经缓存的offset后面的数据复制给slave,类似断点续传

复制的缺点

复制延时,信号衰减

  由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
在这里插入图片描述

master挂了怎么办?

  默认情况下,不会在slave节点中自动选一个master。那每次都要人工干预? 这个是不现实的,无人值守变成刚需,由此引出了我们下一篇文章,Redis哨兵。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2156633.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4--SpringBoot项目中分类管理

目录 新增分类 分类分页查询 启用禁用分类 根据类型查询 修改分类 本文介绍SpringBoot项目中的分类管理,操作类似员工管理模块,具体详解可见以下博客,此处给出各部分代码 2--SpringBoot项目中员工管理 详解(一)-C…

基于51单片机的手环设计仿真

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,DHT11温湿度采集温湿度,滑动变阻器连接ADC0832数模转换器模拟水位传感器检测水位,通过LCD1602显示信息,然后在程序里设置好是否…

vue3项目中引入词云图

在vue3中的项目引入词云图 前言&#xff1a;先看效果图步骤如下 前言&#xff1a; 公司产品要求项目中使用词云图&#xff0c;我算是第一次用&#xff0c;于是在网上查找资料&#xff0c;最后做出来了。 先看效果图 步骤如下 npm i echarts-wordcloud -S <template> …

恶意AI大模型的兴起将改变网络安全

LLM 的恶意版本&#xff08;如 ChatGPT 的黑暗变体&#xff09;的兴起正在通过使用更复杂和自动化的攻击来升级网络战。 这些模型可以生成令人信服的网络钓鱼电子邮件、传播虚假信息并制作有针对性的社会工程消息。 所有这些非法功能都对在线安全构成了重大威胁&#xff0c;并加…

2024年最新前端工程师 TypeScript 基础知识点详细教程(更新中)

1. TypeScript 概述 TypeScript 是由微软开发的、基于 JavaScript 的一种强类型编程语言。它是在 JavaScript 的基础上添加了静态类型检查、面向对象编程等功能的超集&#xff0c;最终会被编译为纯 JavaScript 代码。由于其扩展了 JavaScript 的功能&#xff0c;TypeScript 特…

[Redis][数据类型]详细讲解

1.Redis 特殊数据结构 1.Streams 应用场景&#xff1a;主要用为队列(阻塞队列) 2.Geospatial 应用场景&#xff1a;用来存储坐标(经纬度) 3.HyperLogLog 应用场景&#xff1a;估算集合中的元素个数注意&#xff1a; HyperLogLog不存储元素的内容&#xff0c;但是能够记录“…

【机器学习】ROC曲线

【机器学习】ROC曲线 1、ROC曲线简介2、ROC曲线和AUC值2.1 ROC曲线2.2 AUC值 3、实验内容3.1 准备数据集3.2 特征提取3.3 数据集划分3.4 模型训练与预测3.5 计算和绘制ROC曲线3.6 绘制混淆矩阵3.7 三分类混淆矩阵 4 源代码4.1 实现ROC二分类4.2 三分类混淆例子 1、ROC曲线简介 …

cnn机器学习时python版本不兼容报错

在使用python执行CNN算法时&#xff0c;发生如下报错&#xff1a; A module that was compiled using NumPy 1.x cannot be run in NumPy 2.1.1 as it may crash. To support both 1.x and 2.x versions of NumPy, modules must be compiled with NumPy 2.0. Some module may …

网络高级day03(Http)

目录 【1】HTTP简介 【2】 HTTP特点 【3】 HTTP协议格式 1》客户端请求消息格式 1> 请求行 2> 请求头 3> 空行 4> 请求数据 2》服务器响应消息格式 【1】HTTP简介 HTTP协议是Hyper Text Transfer Protocol &#xff08;超文本传输协议&#xff09;的缩写&a…

低代码平台:数据筛选功能的全新变革

随着软件开发需求的不断增长&#xff0c;传统的开发方法因其复杂性和耗时性而逐渐无法满足市场对快速交付和迭代的需求。低代码开发平台作为一种新型的软件开发工具&#xff0c;以其高效、易用的特点受到了广泛的关注和应用。 在软件开发领域&#xff0c;数据筛选是一项基础且…

frpc内网穿透

官网地址&#xff1a;frp官网 本次用到的Liunx包&#xff1a; https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz下载&#xff1a; wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.g…

经典大语言模型解读(3):参数量更大、泛化性能更强的生成式模型GPT-2

概述 在GPT-1的基础上&#xff0c;OpenAI提出了包含15亿参数&#xff08;GPT-1参数量的10倍以上&#xff09;的GPT-2模型。该模型在一个更大规模的文本数据集WebText上进行预训练。与GPT-1依赖特定任务上的有监督微调来提升性能不同&#xff0c;GPT-2具备更强的零样本&#xf…

中小企业体系技术抽象沉淀-异地灾备篇

IT团队内部使用工具 系列文章&#xff1a;https://blog.csdn.net/caicongyang/article/details/136857045 DDL DML管控 https://github.com/hhyo/Archery/ flyway 文档编写 wiki 技术对外输出文档推荐gitbook 同城双活数据同步方案 总览&#xff1a; vivo 系列文章&#x…

脱离枯燥的CRUD,灵活使用Mybatis,根据mybatis动态的xml片段和接口规范动态生成代理类,轻松应付简单业务场景。

需求 需求是这样的&#xff0c;我们有一个数据服务平台的产品&#xff0c;用户先将数据源信息保存到平台上&#xff0c;一个数据源可以提供多个接口服务&#xff0c;而每个接口服务在数据库中存一个具有mybatis语法的sql片段。这样的话&#xff0c;对于一些简单的业务只需要编…

*C++:list

一.list简介 1. list 是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list 的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后一个元素…

一文 学透 力扣—N数之和

题目一&#xff1a;1. 两数之和❤ 题目思路 当我们需要查询一个元素是否出现过&#xff0c;或者一个元素是否在集合里的时候&#xff0c;就要第一时间想到哈希法。 本题呢&#xff0c;我就需要一个集合来存放我们遍历过的元素&#xff0c;然后在遍历数组的时候去询问这个集合…

第一个NDK项目

新建项目 选择Native C的项目&#xff0c;我这里给项目的命名是NDKTest。 目录分析 新增了一个cpp目录&#xff0c;里面有一个CMakeLists和.cpp文件。 CMakeLists 文件是用来配置C编译过程的。 # Sets the minimum CMake version required for this project. cmake_minimum_…

[OpenCV] 数字图像处理 C++ 学习——16直方图均衡化、直方图比较 详细讲解+附完整代码

文章目录 前言1.直方图均衡化的理论基础(1)什么是直方图(2)直方图均衡化原理(3)直方图均衡化公式 2.直方图比较理论基础(1)相关性 (Correlation)——HISTCMP_CORREL(2)卡方 (Chi-Square)——HISTCMP_CHISQR(3)十字交叉性 (Intersection) ——HISTCMP_INTERSECT(4)巴氏距离 (Bha…

缓存的思考与总结

缓存的思考与总结 什么是缓存缓存命中率数据一致性旁路模式 Cache aside双写模式直写模式 write through异步写 Write Behind 旁路和双写 案例 新技术或中间的引入&#xff0c;一定是解决了亟待解决的问题或是显著提升了系统性能&#xff0c;并且这种改变所带来的增幅&#xff…

Mysql删库跑路,如何恢复数据?

问题 删库跑路&#xff0c;数据还能恢复吗&#xff1f; 我们经常听说某某被领导训斥了&#xff0c;对领导心生痛恨&#xff0c;然后登录 Mysql 删库跑路。对于闲聊中经常听说过的一个段子&#xff0c;在现实生活中是否真的发生过&#xff0c;如果发生了&#xff0c;我们该如何解…