Redis 主从复制 初步认识

文章目录

  • 定义
  • 拓扑
    • 拓扑定义
    • 单从拓扑
    • 多从拓扑
    • 树型拓扑
  • 使用
  • 原理
    • 建立流程
    • 持续复制

定义

Redis主从复制技术的主要满足的需求是①数据恢复②负载均衡
①数据恢复的理解:将数据同步到多个Redis服务器中,其中一个节点数据损毁,可通过复制其他节点数据恢复。
②负载均衡的理解:启动多个Redis服务器,它们数据相同,每个节点平均分配client-Redis发起的请求。

拓扑

(解释拓扑也说明在说明主从复制的必要性/作用)

拓扑定义

在计算机网络和系统架构中,拓扑(Topology)是指网络或系统组件之间的物理或逻辑连接方式。它描述了节点(如计算机、服务器、存储设备等)和链接(如电缆、无线连接等)之间的结构关系。拓扑结构对于数据如何在网络中流动、如何被路由以及系统的整体性能都有重要影响。

单从拓扑

⼀主⼀从结构是最简单的复制拓扑结构,⽤于主节点出现宕机时从节点提供故障转移⽀持,如图所⽰。当应⽤写命令并发量较⾼且需要持久化时,可以只在从节点上开启 AOF,这样既可以保证数据安全性同时也避免了持久化对主节点的性能⼲扰。但需要注意的是,当主节点关闭持久化功能时,如果主节点宕机要避免⾃动重启操作(如果主节点在关闭持久化功能后宕机,但在宕机前未能将所有数据同步到从节点,那么在主节点重启后,这部分未同步的数据可能会丢失)。
在这里插入图片描述

多从拓扑

对于读⽐重较⼤的场景,可以把读命令负载均衡到不同的从节点上来分担压⼒。同时⼀些耗时的读命令可以指定⼀台专⻔的从节点执⾏,避免破坏整体的稳定性。对于写并发量较⾼的场景,(缺点/注意)多个从节点会导致主节点写命令的多次发送从⽽加重主节点的负载

在这里插入图片描述

树型拓扑

树形主从结构(分层结构)使得从节点不但可以复制主节点数据,同时可以作为其他从节点的主节点继续向下层复制。通过引⼊复制中间层,可以有效降低住系欸按负载和需要传送给从节点的数据量.

例如下图:数据写⼊节点 A 之后会同步给 B 和 C 节点,C节点进⼀步把数据同步给 D 和 E 节点。当主节点需要挂载等多个从节点时为了避免对主节点的性能⼲扰,可以采⽤这种拓扑结构。
在这里插入图片描述

使用

配置原则:
① 每个从结点只能有⼀个主节点,而一个主节点可以同时具有多个从结点
②复制的数据流是单向的,只能由主节点到从节点

1. 建立主从复制具体方法:
①在redis.conf配置文件中,设置

# redis.conf 配置文件
slaveof <masterip> <masterport> 
# masterip   主节点IP
# masterport 主节点端口

② 在 redis-server 启动命令时加输入以下指令

在 redis-server 启动命令时加⼊ --slaveof {masterHost} {masterPort}

③ 接使⽤ redis 命令:

slaveof {masterHost} {masterPort}

2. 断开主从复制具体方法

在从节点执⾏ slaveof no one 来断开与主节点复制关系。

slaveof no one

3. 切换主从复制具体方法
将当前从节点的数据源切换到另⼀个主节点。执⾏slaveof {newMasterIp} {newMasterPort} 命令即可。

slaveof {newMasterIp} {newMasterPort}

4. 设置主从复制密码的具体方法:

主从复制必然有安全验证手段,否则会被盗取信息。Redis主从复制手段安全保障手段是通过设置连接密码来实现的。

主节点配置(redis.conf文件):

#设置密码验证
requirepass your_password

从节点配置(redis.conf文件):

# 设置主节点的IP和端口
replicaof <masterip> <masterport>
# 设置主节点的密码
masterauth your_password

5. 设置从节点为只读的具体方法:

在实际的生产应用环境中,读数据的频率往往比写(增删改)数据的频率要高,因此有读模式的需求。将从节点设置为只读模式后,从节点的任何修改主节点都⽆法感知,修改从节点会造成主从数据不⼀致。所以将从节点设置为只读模式后,不建议”写“从节点内容。

# 在redis.conf配置文件中
slave-read-only yes

原理

建立流程

(这部份建立流程指的是执行slaveof指令后第一次同步的具体流程)
①保存信息:从节点保存主节点信息(例如主节点的端口、IP信息)
②建立连接:从节点内部通过每秒运⾏的定时任务维护复制相关逻辑,当定时任务发现存在新的主节点后,会尝试与主节点建⽴基于 TCP 的⽹络连接。如果从节点⽆法建⽴连接,定时任务会⽆限重试直到连接成功或者⽤⼾停⽌主从复制。
③验证连接:连接建⽴成功之后,从节点通过 ping 命令确认主节点在应⽤层上是⼯作良好的。如果 ping 命令的结果 pong 回复超时,从节点会断开 TCP 连接,等待定时任务下次重新建⽴连接。
④权限验证:如果主节点设置了 requirepass 参数,则需要密码验证,从节点通过配置 masterauth参数来设置密码。如果验证失败,则从节点的复制将会停⽌。
⑤首次复制:对于⾸次建⽴复制的场景,主节点会把当前持有的所有数据全部发送给从节点,这步操作基本是耗时最⻓的,所以⼜划分称两种情况:全量同步和部分同步(全量复制与复制后面会作解释)。
⑥持续复制:当从节点复制了主节点的所有数据之后,针对之后的修改命令,主节点会持续的把命令发送给从节点,从节点执⾏修改命令,保证主从数据的⼀致性。(持续复制的具体说明见下一部分)

持续复制

SLAVEOF 和 PSYNC指令

Redis 使⽤ psync 命令完成主从数据同步,注意:SLAVEOF指令用于建立主从关系,即将一个Redis实例设置为另一个Redis实例的从节点,从而进行完整的数据复制。PSYNC指令则是在从节点与主节点失去连接并重新连接时,用于请求数据同步或部分数据同步,以便在部分数据丢失或断线重连的情况下保持数据的一致性。

#  PSYNC指令的具体使用
redis-cli -h <slave_host> -p <slave_port>
PSYNC <replicationid> <offset>
#如果 replicationid 设为 ? 并且 
#offset 设为 -1 此时就是在尝试进⾏全量复制.
#如果 replicationid offset 
#设为了具体的数值, 则是尝试进⾏部分复制

复制策略分类:

全量复制:⼀般⽤于初次复制场景,Redis 早期⽀持的复制功能只有全量复制,它会把主节点全部数据⼀次性发送给从节点,当数据量较⼤时,会对主从节点和⽹络造成很⼤的开销。

部分复制:⽤于处理在主从复制中因⽹络闪断等原因造成的数据丢失场景,当从节点再次连上主节点后,如果条件允许,主节点会补发数据给从节点。因为补发的数据远⼩于全量数据,可以有效避免全量复制的过⾼开销。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS学习笔记-基于stm32(6)时间片调度实验

1、什么是时间片调度 在任务优先级相同的时候&#xff0c;CPU会轮流使用相同的时间去执行它&#xff0c;即时间片调度。这个相同的时间就是时间片。而时间片的大小就是SysTick的中断周期&#xff08;SysTick的中断周期可以修改&#xff09;。 比如有三个相同优先级的任务在运行…

一张贴纸50万,炒房炒币的怎么都来炒CSGO皮肤了

一张贴纸50万&#xff0c;为什么炒房炒币的都来炒CSGO饰品了&#xff1f; 一张贴纸50万&#xff0c;炒房炒币的怎么都来炒CSGO皮肤了&#xff1f; 经常有人问我&#xff0c;天天看你们买卖装备&#xff0c;买卖皮肤&#xff0c;说到底这都是虚拟产品&#xff0c;看得见摸不着的…

ue引擎游戏开发笔记(35)——为射击添加轨道,并显示落点

1.需求分析&#xff1a; 我们只添加了开枪特效&#xff0c;事实上并没有实际的效果产生例如弹痕&#xff0c;落点等等。所以逐步实现射击的完整化&#xff0c;先从实现落点开始。 2.操作实现&#xff1a; 1.思路&#xff1a;可以这样理解&#xff0c;每次射击的过程是一次由摄…

二层交换机与防火墙连通上网实验

防火墙是一种网络安全设备&#xff0c;用于监控和控制网络流量。它可以帮助防止未经授权的访问&#xff0c;保护网络免受攻击和恶意软件感染。防火墙可以根据预定义的规则过滤流量&#xff0c;例如允许或阻止特定IP地址或端口的流量。它也可以检测和阻止恶意软件、病毒和其他威…

Ansible-playbook剧本

目录 一、Ansible playbook简介 2.1 playbook格式 2.2 playbook组成部分 二、playbook示例 2.1 yaml文件编写 2.2 运行playbook 2.3 定义、引用变量 2.4 指定远程主机sudo切换用户 2.5 when条件判断 2.6 迭代 三、总结 Ansible中使用playbook脚本的作用和好处 一、A…

5月8日学习记录

_[FBCTF2019]RCEService&#xff08;preg_match函数的绕过&#xff09; 涉及知识点&#xff1a;preg_match函数绕过&#xff0c;json的格式&#xff0c;正则回溯 打开环境&#xff0c;要求用json的格式输入 搜索学习一下json的语法规则 数组&#xff08;Array&#xff09;用方括…

OpenMV 图像串口传输示例

注意&#xff1a;本程序根据 OpenMV采集图片通过串口发送&#xff0c;PC接收并保存为图片 更改。 一、例程说明 这个例程主要实现了以下功能: 1. OpenMV 端采集图像:使用OpenMV开发板上的摄像头采集实时图像数据。 2. 通过串口传输图像数据:将采集到的图像数据打包成字节流,…

智慧工地的5大系统是什么?SaaS化大型微服务架构(智慧工地云平台源码)可多端展示登录

智慧工地解决方案依托计算机技术、物联网、云计算、大数据、人工智能、VR&AR等技术相结合&#xff0c;为工程项目管理提供先进技术手段&#xff0c;构建工地现场智能监控和控制体系&#xff0c;弥补传统方法在监管中的缺陷&#xff0c;最终实现项目对人、机、料、法、环的全…

外企接受大龄程序员吗?

本人知乎账号同公众号&#xff1a;老胡聊Java&#xff0c;欢迎留言并咨询 亲身体会外企经历所见所闻&#xff0c;外企能接受大龄程序员。 1 大概是10年的时候&#xff0c;进一家知名外企&#xff0c;和我一起进的一位manager&#xff0c;后来听下来&#xff0c;年龄35&#xf…

html的标签

基础标签 标签描述<h1>-<h6>定义标题&#xff0c;h1最大&#xff0c;h6最小<font>定义文本的字体&#xff0c;字体尺寸&#xff0c;字体颜色<b>定义粗体文本<i>定义斜体文本<u>定义文本下划线<center>定义文本居中<p>定义段落…

俄罗斯国际消费类电子电器展ICEE:人潮如织,盛况空前

近日&#xff0c;备受全球瞩目的俄罗斯国际消费类电子电器展ICEE在莫斯科盛大落幕。本次展会为期四天&#xff0c;真的攒足了眼球&#xff0c;不仅俄罗斯这边的很多媒体和自媒体有报道&#xff0c;展会第一天&#xff0c;很多参展商通过短视频平台将展会的盛况传到了国内&#…

Ubuntu22.04下安装kafka_2.11-0.10.1.0并运行简单实例

目录 一、版本信息 二、安装Kafka 1.将Kafka安装包移到下载目录中 2.下载Spark并确保hadoop用户对Spark目录有操作权限 三、启动Kafka并测试Kafka是否正常工作 1.启动Kafka 2.测试Kafka是否正常工作 一、版本信息 虚拟机产品&#xff1a;VMware Workstation 17 Pro 虚…

AI PC,到底谁的梦想、谁的红利?

世界上第一台通用计算机是1946年诞生的埃尼阿克&#xff0c;世界上第一台便携电脑是1981年诞生的“奥斯本1号”&#xff0c;世界上第一部智能手机是1993年诞生的IBM Simon。 它们之间看起来毫无关系&#xff0c;但却暗含一种关于创新的微妙潜规则——随着时间推移&#xff0c;…

MM模块学习一(供应商创建,物料类型的定义及功能)

物料管理流程&#xff1a; 源头&#xff1a;采购需求->采购申请 MRP&#xff1a;物料需求计划。运行物料需求计划的结果&#xff0c;根据物料的性质来判断是外购&#xff08;采购申请&#xff09;或者是生产&#xff08;计划订单->生产订单&#xff09;。 采购申请&am…

acwing算法提高之数据结构--平衡树Treap

目录 1 介绍2 训练 1 介绍 本博客用来记录使用平衡树求解的题目。 插入、删除、查询操作的时间复杂度都是O(logN)。 动态维护一个有序序列。 2 训练 题目1&#xff1a;253普通平衡树 C代码如下&#xff0c; #include <cstdio> #include <cstring> #include …

Postgresql源码(128)深入分析JIT中的函数内联llvm_inline

相关 《Postgresql源码&#xff08;127&#xff09;投影ExecProject的表达式执行分析》 《LLVM的ThinLTO编译优化技术在Postgresql中的应用》 《LLVM&#xff08;5&#xff09;ORC实例分析》 1 JIT优化效果 create table t1(i int primary key, j int, k int); insert into t1…

嵌入式开发三:STM32初体验

本节主要向大家介绍如何开发过程中的基本操作&#xff0c;如编译、串口下载、仿真器下载、仿真调试程序&#xff0c;体验一下 STM32 的开发流程&#xff0c;并介绍 MDK5 的一些使用技巧&#xff0c;通过本节的学习&#xff0c;将对 STM32 的开发流程和 MDK5 使用有个大概了解&a…

Windows安全加固-账号与口令管理

在当今日益增长的网络安全威胁中&#xff0c;Windows系统的安全加固显得尤为重要。其中&#xff0c;账号与口令管理作为系统安全的第一道防线&#xff0c;其重要性不言而喻。本文将深入探讨Windows安全加固中的账号与口令管理策略&#xff0c;以确保系统的安全性和稳定性。 账…

认识大模型提示词

一、写作助理 &#x1f4a5;最常使用的 prompt&#xff0c;用于优化文本的语法、清晰度和简洁度&#xff0c;提高可读性。 输入&#xff1a;作为一名写作改进助理&#xff0c;你的任务是改进所提供文本的拼写、语法、清晰、简洁和整体可读性&#xff0c;同时分解长句&#xff…

运行SpringBoot项目失败?异常显示Can‘t load IA 32-bit .dll on a AMD 64-bit platform,让我来看看~

原因是&#xff0c;我放入jdk的bin文件夹下的tcnative-1.dll文件是32位的&#xff0c;那么肯定是无法在AMD 64位平台上加载IA 32位.dll。但是网站上给出的都是32位呀&#xff0c;没有64位怎么办&#xff1a; 其实当我们把“tomcat-native-1.2.34-openssl-1.1.1o-win32-bin.zip”…
最新文章