Redis7【⑥ Redis复制(replica)】

news2024/9/21 12:35:31

Redis复制

Redis 复制(Replication)是 Redis 的一项核心功能,用于将一个 Redis 数据库的所有数据复制到另一个 Redis 实例上。Redis 复制可以提高系统的可用性、可靠性和扩展性,使得在发生故障时可以快速地恢复数据。

Redis 复制支持主从复制和从从复制两种方式,可以根据实际情况选择不同的方式来部署和管理 Redis 实例。

  • 主从复制

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ar3nRGvx-1687942030566)(img/2023-04-15_001017.png)]

  • 从从复制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2OxI7byY-1687942030567)(img/2023-04-15_001151.png)]


1. 环境配置

(1)克隆两个虚拟机,一主二仆,Redis设主节点,Redis1和Redis2设从节点。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FZJfjpWm-1687942030567)(img/2023-04-14_052056.png)]

(2)配置网络IP:
在这里插入图片描述

(3)关闭防火墙:
在这里插入图片描述

(4)修改redis.conf配置文件

这里我们直接把最纯净版的配置文件复制到我们之前自定义生成的 /myredis下面,命名加上端口号

  • 基础配置

在这里插入图片描述
pid 这里默认是给你写了端口号的文件,但是后续可能会用得到这里
在这里插入图片描述
aof 文件设置,非必须,老师这里演示就没有设置

在这里插入图片描述

  • 主要配置

这部分配从不配主!
在这里插入图片描述

2. 基本命令

从节点配置了需要连接的主节点后,打开Redis客户端即可自动连接到主节点。并且开始同步主节点的数据。
这里我们需要先主后从依次启动服务端 server,这里读取刚刚写好的配置文件,同时记得这次启动要写好端口号,要不然默认访问6379,而配置文件又没配置6379在哪。
在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mHAOd71j-1687942030572)(img/2023-04-14_113140.png)]

主从关系查看可以使用命令,或者读取我们刚刚写的日志文件

读取主机日志文件
在这里插入图片描述
读取从机日志文件
在这里插入图片描述

INFO REPLICATION:查看主从关系和配置信息

  • 查看主节点信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PN6Oc8hM-1687942030572)(img/2023-04-14_105932.png)]

  • 查看从节点信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-suHftq4P-1687942030572)(img/2023-04-14_110313.png)]

replicaof 主节点IP 主节点端口:配置需要连接的主节点IP和端口。一般写入进redis.conf文件中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fe2NOzKW-1687942030572)(img/2023-04-14_111840.png)]

slaveof 主节点IP 主节点端口:临时更换需要连接的主节点IP和端口。

这是一个临时的主从关系,每次与主节点断开后都需要重新配置。

在运行期间修改slave节点的信息,如果该数据库已经是某个主数据库的从数据库,那么会停止和原数据库的同步关系,开始和新配置的主数据库同步,并且清除原有的数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-46mh8ph9-1687942030573)(img/2023-04-14_113853.png)]

将从节点redis2的追随的主节点更改为redis1后,查看redis1的信息:是redis的从节点,也是redis2的主节点。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9HDYAdKl-1687942030573)(img/2023-04-14_114241.png)]

slaveof no one:停止当前从节点与主节点的的数据同步。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qSV9joyD-1687942030573)(img/2023-04-14_221538.png)]

3. 常见问题

  • slave可以执行写命令吗?

    slave不可以执行写命令。master负责写命令,slave负责读命令,当然master也可以读命令。

    即使slave是另一台slave的master,也不能执行写命令。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-opgz8wqX-1687942030573)(img/2023-04-14_223633.png)]

  • slave是从头开始复制还是从切入点开始复制?

    在 Redis 复制中,从节点(Slave)可以选择从头开始复制或者从切入点开始复制。

    当从节点第一次连接主节点时,如果主节点没有持久化数据,从节点将从头开始复制。即主节点会将自己的全部数据发送给从节点,从节点将接收并保存全部数据。

    当从节点与主节点已经建立了连接,并且已经有了初始数据同步,如果从节点断开与主节点的连接后重新连接,从节点可以选择从上次同步的位置(复制偏移量)继续同步数据,这样可以避免从头开始复制所带来的性能影响和数据冗余。
    (master会检查backlog里面的offset,master和slave都会保存一个复制的offset和一个masterId)

    需要注意的是,如果从节点断开与主节点的连接时间过长,主节点可能已经自动执行了 BGSAVE 命令,生成了新的 RDB 文件,此时从节点需要从头开始复制。此外,如果从节点的内存不足,也可能需要从头开始复制,以避免内存溢出。

    比如master写到k3,slave启动后会同步k3及之前的数据,然后跟随master同步数据。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wrggmug4-1687942030574)(img/2023-04-14_235542.png)]

  • 主节点SHUTDOWN后,从节点会上位吗?

    主节点关闭后,从节点不会变成主节点,它们会等待主节点重新启动,但是从节点的数据可以正常读取。

    主节点重启后,主从关系依旧存在。

4. Redis复制流程

(1)从节点向主节点发送 SYNC 命令,请求全量复制。

(2)主节点接收到 SYNC 命令后,开始执行 BGSAVE 命令生成 RDB 文件,并在生成过程中记录所有执行的写命令。

(3)主节点在 BGSAVE 命令执行完毕后,将生成的 RDB 文件发送给从节点,同时将在执行 BGSAVE 命令期间记录的写命令发送给从节点,让从节点进行执行。

(4)从节点接收到主节点发送的 RDB 文件和写命令,并执行相应的操作来保持与主节点的数据一致。

(5)从节点持续监听主节点发来的新命令,并将其执行,以保持与主节点的数据同步。

(6)为了保持主节点和从节点之间的通信,master会发出PING包的周期默认是10秒:repl-ping-replica-period 10(在661行)

(6)当主节点发生故障时,从节点会尝试与其他主节点建立连接,并选举出一个新的主节点,从而成为新的从节点,保证系统的可用性和可靠性。

需要注意的是,Redis 复制是异步的,因此从节点可能存在数据不一致的情况。为了避免数据不一致,可以设置 Redis 的复制偏移量(replication offset),当从节点与主节点连接断开后,从节点可以通过该偏移量快速地同步数据。

5. Redis复制的缺点

在这里插入图片描述

(1)数据同步延迟:由于 Redis 复制是异步的,从节点的数据可能会与主节点存在一定的延迟,因此从节点可能无法实时获取到最新的数据

(2)单点故障:当主节点发生故障时,需要手动进行故障转移或者使用集群来保证系统的可用性

(3)网络通信问题:当网络出现故障或者通信延迟过高时,复制的效率会受到影响,从节点可能无法及时接收到主节点发送的数据

(4)内存消耗问题:当从节点处理不过来主节点发送过来的写命令时,从节点会自动触发执行全量复制,这会导致从节点内存消耗变大

(5)数据安全问题:当主节点的数据被误删或者篡改时,从节点也会受到影响,因此需要采取一定的措施来保证数据的安全性

需要注意的是,这些缺点并不是 Redis 复制本身的问题,而是分布式系统中常见的问题,需要根据实际情况进行综合考虑和处理

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

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

相关文章

【TiDB v7.1.0】资源管控调研及评测

作者: angryart 原文来源: https://tidb.net/blog/ad24240a 多租户是什么 有语云,食在广州,玩在杭州,死在柳州,广东人除了天上飞的飞机不吃,地上走的坦克不吃,其它的什么都吃&am…

Mybatis面试题--MyBatis一级缓存,二级缓存

Mybatis的一级、二级缓存用过吗? 一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当Session进行flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存 二级缓存 是基于n…

Python将多维列表「拉伸」为一维列表的10种方式

来源:投稿 作者:Fairy 编辑:学姐 在Python编程中,列表是一种常用的数据类型。当我们遇到了一个嵌套列表,如果想将它扁平化为一维列表,就可以使用下面10种方法之一来实现这个需求。 1. 使用两层循环遍历 l…

【记录】实践场景

Apache Doris 在京东搜索实时 OLAP 探索与实践 https://doris.apache.org/zh-CN/blog/JD_OLAP/ 通过对比开源的几款实时OLAP引擎,我们发现doris和clickhouse能够满足我们的需求,但是clickhouse的并发度太低是个潜在的风险,而且clickhouse的数…

已将该虚拟机配置为使用 64 位客户机操作系统。但是,无法执行 64 位操作。

错误提示: 一般只有下面几种方法 百度经验解决方法 http://jingyan.baidu.com/article/90bc8fc859b481f653640cac.html http://jingyan.baidu.com/article/25648fc1bfd4a29190fd0067.html 2.第二种方法 检测问题所在: 下载LeoMoon CPU-V 检查一下CP…

小程序本地生活

2023年7月1号 感觉就是视频要快点看不完 不然哪天接口又失效了 Page({/*** 页面的初始数据*/data: {// 存放轮播图的数据swiperList:[],// 存放九宫格的数据gridList:[]},/*** 生命周期函数--监听页面加载*/onLoad(options) {this.getSwiperList()this.getGridList()},// 获…

【GIS】阿里AI Earth选择内置地图

说明 aie.Map,构造一个地图组件Map对象,用于可视化渲染计算结果。坐标系固定为EPSG:4326。 阿里AI Earth中,坐标系默认为EPSG:4326 效果 import aie aie.Authenticate() aie.Initialize() my_province aie.FeatureCollection(China_Provin…

【Python】Python基础笔记

Python基础笔记 数据的输入和输出 print("数据") # 这是数据的输出 name input() # 这是数据的输入,并将输入的数据赋值给name。而且无论输入的何种类型的数据,最终的结果都是 字符串 类型的数据pint 输出不换行: # print 输出…

结合ace编辑器实现MapboxGL热力图样式在线配置

概述 MapboxGL热力图的配置参数并不多,但是有时候为了或得一个比较好用的热力图配置参数,我们不得不改代码再预览,显得尤为麻烦,为方便配置,实现实时预览,本文使用ace实现了一个热力图样式在线配置页面。 …

MSF之信息收集及漏洞利用

MSF之信息收集及漏洞利用 一、Metasploit简介二、Metasploit安装三、安装postgresql数据库四、KaIi-msfdb-Postgresql报错排查处理五、Metasploit-启动六、Metasploit-目录结构六、Metasploit-模块七、Metasploit-信息收集7.1、db_nmap/nmap7.2、Metasploit auxiliary7.2.1、端…

【STM32】步进电机及其驱动(ULN2003驱动28BYJ-48丨按键控制电机旋转)

本篇文章包含的内容 一、步进电机的结构和工作原理1.1 步进控制系统的组成1.2 步进电机简介1.3 步进电机的分类1.4 步进电机的工作原理1.4.1 单极性步进电机(5线4相)1.4.2 双极性步进电机(4线2相)1.4.3 细分器驱动原理 1.5 步进电…

hcia回顾复习

一、OSI七层参考模型 OSI/RM 开放式系统互联参考模型 由ISO ---- 国际标准化组织 — 1979提出 核心思想 分层 :上层协议再下层协议提供服务的基础上再提供增值服务。 应用层 — 提供各种应用服务.可以将抽象语言转换为编码 .应用程序 APP:通过人机交互提供&#xff…

Win10打字输入法不显示输入框怎么办?

Win10的打字输入法是我们日常计算机使用中必不可少的工具之一,然而,有时候在使用过程中可能会遇到打字输入法不显示输入框的问题,这给我们的输入和操作带来了很大的困扰,如果您也遇到了这个问题,不要担心,以…

Linux--获取某个区间文本的指令:head和tail

Linux--获取文本前n行的指令&#xff1a;head 语法&#xff1a; head 选项 文件名 功能&#xff1a; head 用来显示档案的开头至标准输出中&#xff0c;默认head命令打印其相应文件的开头10行。 选项&#xff1a; -n <行数> 显示的行数 示例&#xff1a; ①生成默…

【UE5 Cesium】05-Cesium for Unreal 在子关卡中添加Actor

上一篇&#xff1a;【UE5 Cesium】04-Cesium for Unreal 将不同地区的倾斜摄影作为不同子关卡 步骤 首先将关卡切换到“DenverRooftop” 添加一个“立方体” 将关卡切换到“Globe” 然后再向场景中添加一个“椎体” 此时如果我们将关卡切换到“Boston”&#xff0c;只能看到“…

如何高效获取嵌入式系统知识和技能

学习嵌入式系统的方法&#xff1a; 设定明确的目标&#xff1a;在学习嵌入式系统之前&#xff0c;明确自己的学习目标和期望结果。这可以帮助你更有针对性地选择学习材料和项目&#xff0c;并保持专注和动力。 分解学习计划&#xff1a;将学习过程分解成小的可管理的任务和阶段…

SQL注入经验方法总结

SQL注入 先判断是哪种数据库。再进行后续操作。 SQL注入漏洞产生的原理 web应用程序&#xff0c;对用户输入的语句没有做严格的过滤&#xff0c;导致被输入的语句被拼接成恶意代码的SQL语句进入数据库中查询&#xff0c;修改信息等。 所以SQL注入漏洞需要的条件&#xff1a…

chatglm2 本地部署中遇到的问题

在本地GPU部署的时候&#xff0c;发现了报错&#xff0c; ModuleNotFoundError: No module named transformers_modules.chatglm2-6b 但是自己路径都是正确的&#xff0c; 确实是按照双斜杠来写的路径。 但依旧报错 最后发现是安装的 transformers 包的版本太新导致的。 …

抖音SEO账号矩阵系统源码

一、抖音SEO账号矩阵系统源码思路 1. 数据采集与分析 2. 排名算法设计 3. 用户管理模块 4. 内容推荐系统 二、抖音矩阵系统源码功能概述 &#xff08;1&#xff09;多平台多账号管理,支持抖音&#xff0c;快手&#xff0c;好看视频&#xff0c;B站&#xff0c;西瓜&#x…

jdbc获取数据库元数据信息

DatabaseMetaData 接口&#xff1a; 获取数据库&#xff0c;&#xff0c;&#xff0c;表&#xff0c;&#xff0c;列&#xff0c;&#xff0c;等元数据信息 jdbc使用&#xff1a; // 获取一个连接 Connection connection DriverManager.getConnection(url,username,password)…