[Redis][主从复制][上]详细讲解
目录
- 0.前言
- 1.配置
- 1.建立复制
- 2.断开复制
- 3.安全性
- 4.只读
- 5.传输延迟
- 2.拓扑
- 1.一主一从结构
- 2.一主多从结构
- 2.树形主从结构
0.前言
- 说明:该章节相关操作不需要记忆,理解流程和原理即可,用的时候能自主查到即可
- 主从复制?
- 分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他服务器,满⾜故障恢复和负载均衡等需求
- Redis也是如此,它提供了复制的功能,实现了相同数据的多个Redis副本
- 复制功能是⾼可⽤Redis的基础,哨兵和集群都是在复制的基础上构建的
- 从节点上的数据要跟随主节点变化,从节点的数据要和主节点保持一致
- 主从模式,主要是针对"读操作",进行并发量和可用性的提高
- 写操作,无论是可用性还是并发量,都非常依赖主节点,主节点不能搞多个
1.配置
1.建立复制
- 参与复制的Redis实例划分为主节点(master)和从节点(slave)
- 每个从结点只能有⼀个主节点,⽽⼀个主节点可以同时具有多个从结点
- 复制的数据流是单向的,只能由主节点到从节点。
- 配置复制的⽅式有以下三种:
- 在配置文件中加入
slaveof {masterHost} {masterPort}
随Redis启动⽣效 - 在
redis-server
启动命令时加⼊--slaveof {masterHost} {masterPort}
⽣效 - 直接使⽤Redis命令:
slaveof {masterHost} {masterPort}
⽣效
- 在配置文件中加入
- 示例:
- 将
redis.conf
配置⽂件复制⼀份redis-slave.conf
,并且修改其daemonize
为yes
# By default Redis does not run as a daemon. Use 'yes' if you need it. # Note that Redis will write a pid file in /var/run/redis.pid when daemonized. daemonize yes
- 接下来,默认启动的Redis作为主Redis,重新通过命令行启动一个Redis实例作为从Redis
- 注意:修改配置主要是**修改从机的配置,主机配置不变**
# ubuntu redis-server /etc/redis/redis-slave.conf --port 6380 --slaveof 127.0.0.1 6379
- 注意:修改配置主要是**修改从机的配置,主机配置不变**
- 通过
netstat -nlpt
确保两个Redis均已正确启动 - 通过
redis-cli
可以连接主Redis实例,通过redis-cli -p 6380
连接从Redis,并且观察复制关系127.0.0.1:6379> set hello world OK 127.0.0.1:6379> get hello "world"127.0.0.1:6380> get hello "world"
- 可以通过
info replication
命令查看复制相关状态- 主节点6379复制状态信息
offset
:从节点和主节点之间,同步数据的进度
127.0.0.1:6379> info replication # Replication role:master connected_slaves:1 slave0:ip=127.0.0.1,port=6380,state=online,offset=100,lag=0 master_replid:2fbd35a8b8401b22eb92ff49ad5e42250b3e7a06 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:100 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:100
- 从节点6380复制状态信息
127.0.0.1:6380> info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:170 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:2fbd35a8b8401b22eb92ff49ad5e42250b3e7a06 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:170 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:170
- 主节点6379复制状态信息
- 将
- Redis主从节点复制过程
2.断开复制
slaveof
命令不但可以建⽴复制,还可以在从节点执⾏slaveof no one
来**断开**与主节点复制关系- 例如:在6380节点上执⾏
slaveof no one
来断开复制
- 例如:在6380节点上执⾏
- 断开复制主要流程:
- 断开与主节点复制关系
- 从节点晋升为主节点
- 从节点断开复制后并不会抛弃原有数据,只是无法再获取主节点上的数据变化
- 通过
slaveof
命令还可以实现切主操作,将当前从节点的数据源切换到另⼀个主节点,执⾏slaveof {newMasterIp} {newMasterPort}
命令即可- 该方法的修改是临时性的,如果重启了Redis服务器,仍然会按照最初在配置文件中设置的内容来建立主从关系
- 切主操作主要流程:
- 断开与旧主节点复制关系
- 与新节点建立复制关系
- 删除从节点当前所有数据
- 从新主节点进行复制操作
3.安全性
- 对于数据⽐较重要的节点,主节点会通过设置
requirepass
参数进⾏密码验证,这时所有的客⼾端访问必须使⽤auth
命令实⾏校验 - 从节点与主节点的复制连接是通过⼀个特殊标识的客⼾端来完成,因此需要配置从节点的
masterauth
参数与主节点密码保持⼀致,这样从节点才可以正确地连接到主节点并发起复制流程
4.只读
- 默认情况下,从节点使⽤
slave-read-only=yes
配置为只读模式 - 由于复制只能从主节点到从节点,对于从节点的任何修改主节点都⽆法感知,修改从节点会造成主从数据不⼀致
- 综上建议线上不要修改从节点的只读模式
5.传输延迟
- 从节点⼀般部署在不同机器上,复制时的⽹络延迟就成为需要考虑的问题
- Redis提供了
repl-disable-tcp-nodelay
参数⽤于控制是否关闭TCP_NODELAY
,默认为no
,即开启tcp nodelay
功能,说明如下:- 当关闭时,主节点产⽣的命令数据⽆论⼤⼩都会及时地发送给从节点,这样主从之间延迟会变⼩, 但增加了⽹络带宽的消耗
- 适⽤于主从之间的⽹络环境良好的场景,如同机房部署
- 当开启时,主节点会合并较⼩的TCP数据包从⽽节省带宽,这种配置节省了带宽但增⼤主从之间的延迟
- 默认发送时间间隔取决于Linux的内核,⼀般默认为40毫秒
- 适⽤于主从⽹络环境复杂的场景,如跨机房部署
- 当关闭时,主节点产⽣的命令数据⽆论⼤⼩都会及时地发送给从节点,这样主从之间延迟会变⼩, 但增加了⽹络带宽的消耗
2.拓扑
1.一主一从结构
-
⼀主⼀从结构是最简单的复制拓扑结构,⽤于主节点出现宕机时从节点提供故障转移⽀持
-
当应⽤写命令并发量较⾼且需要持久化时,可以只在从节点上开启AOF,这样既可以保证数据安全性同时也避免了持久化对主节点的性能⼲扰
- 缺点:主节点一旦挂了,不能让它自动重启
- 如果自动重启,此时主节点没有AOF文件,就会丢失数据
- 进一步的主从同步,会把从节点的数据也删了
- 改进方法:主节点挂了之后,让主节点从从节点这里获取到AOF文件,再启动
- 缺点:主节点一旦挂了,不能让它自动重启
2.一主多从结构
-
⼀主多从结构(星形结构)使得应⽤端可以利⽤多个从节点实现读写分离
-
对于读⽐重较⼤的场景,可以把读命令负载均衡到不同的从节点上来分担压⼒
-
对于⼀些耗时的读命令可以指定⼀台专⻔的从节点执⾏,避免破坏整体的稳定性
-
-
缺点:对于写并发量较⾼的场景,多个从节点会导致主节点写命令的多次发送从⽽加重主节点的负载
2.树形主从结构
-
树形主从结构(分层结构)使得从节点不但可以复制主节点数据,同时可以作为其他从节点的主节点继续向下层复制
-
通过引⼊复制中间层,可以有效降低住系欸按负载和需要传送给从节点的数据量
-
适用场景:当主节点需要挂载等多个从节点时为了避免对主节点的性能⼲扰,可以采⽤这种拓扑结构
-
缺点:一旦数据进行修改,同步的延时是比上面两种结构更长的
相关文章:

[Redis][主从复制][上]详细讲解
目录 0.前言1.配置1.建立复制2.断开复制3.安全性4.只读5.传输延迟 2.拓扑1.一主一从结构2.一主多从结构2.树形主从结构 0.前言 说明:该章节相关操作不需要记忆,理解流程和原理即可,用的时候能自主查到即可主从复制? 分布式系统中…...
【算法】leetcode热题100 146.LRU缓存. container/list用法
https://leetcode.cn/problems/lru-cache/description/?envTypestudy-plan-v2&envIdtop-100-liked 实现语言:go lang LRU 最近最少未使用,是一种淘汰策略,当缓存空间不够使用的时候,淘汰一个最久没有访问的存储单元。目前…...
[论文总结] 深度学习在农业领域应用论文笔记13
文章目录 1. Downscaling crop production data to fine scale estimates with geostatistics and remote sensing: a case study in mapping cotton fibre quality (Precision Agriculture ,2024, IF5.585)背景方法结果结论个人总…...

《Detection of Tea Leaf Blight in Low-Resolution UAV Remote Sensing Images》论文阅读
学习资料 论文题目:Detection of Tea Leaf Blight in Low-Resolution UAV Remote Sensing Images(低分辨率UAV遥感图像中茶叶枯萎病的检测)论文地址:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber10345618 Abstr…...

低代码BPA(业务流程自动化)技术探讨
一、BPA流程设计平台的特点 可视化设计工具 大多数BPA流程设计平台提供直观的拖拽式界面,用户可以通过图形化方式设计、修改及优化业务流程。这种可视化的方式不仅降低了门槛,还便于非技术人员理解和参与流程设计。集成能力 现代BPA平台通常具备与其他系…...

开闭原则(OCP)
开闭原则(OCP):Open Closed Princide:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有代码,实现一个热插拔的效果。 简言之,是为了使程序的扩展性更好,…...
Unity之 TextMeshPro 介绍
TextMeshPro 是 Unity 中用于处理文本显示的高级插件,旨在替代 Unity 内置的 UI.Text 和 TextMesh 组件。与默认的文本组件相比,TextMeshPro 提供了更高的文本渲染质量和更多的文本样式选项,同时具备强大的优化能力。 TextMeshPro 的主要特点…...

Linux套接字Socket
Linux套接字Socket 前提知识补充 为不同机器上的两个进程之间提供通信机制 主机字节序小端存储,网络字节序大端存储 特点TCPUDP连接类型面向连接无连接可靠性高低有序性保证数据包按顺序到达不保证数据包顺序流量控制有滑动窗口机制无拥塞控制有拥塞控制机制无复杂性较高较低…...
基于 Web 的工业设备监测系统:非功能性需求与标准化数据访问机制的架构设计
目录 案例 【说明】 【问题 1】(6 分) 【问题 2】(14 分) 【问题 3】(5 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于 Web 系统架构设计的叙述,回答问题 1 至问题 3 。 【说明】 某公司拟开发一款基于 Web 的…...

【MySQL】基础入门篇
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:理解什么是MySQL,如何安装MySQL,简单使用MySQL。 > 毒鸡汤:有些事情,总是不明白,所以我不…...
uni-app vue3封装websocket,支持微信小程序
一、创建useWebSocket.js 文件 // useWebSocket.js // 获取链接的URL前缀 import {BASE_URL } from "./request";import {ref,onMounted,onBeforeUnmount } from "vue";// 假设我们使用 uni-app 的 globalData 或 Vuex 来管理用户状态 // 这里为了简单起…...

杭州算力小镇:AI泛化解锁新机遇,探寻AI Agent 迭代新路径
人工智能技术不断迭代,重点围绕着两个事情,一是数据,二是算力。 算法的迭代推动着AI朝向多模态的方向发展,使之能够灵活应对不同领域的不同任务,模型的任务执行能力大大提升,人工智能泛化能力被推上高潮。…...
IT行业的现状与发展趋势
IT行业的现状与发展趋势 随着信息技术的迅速发展,IT行业已成为全球经济的重要支柱之一。无论是传统行业的数字化转型,还是新兴技术的快速崛起,IT行业都在不断推动社会的进步和发展。本文将探讨IT行业的现状及未来发展趋势。 IT行业的现状 …...

华为认证HCIA篇--网络通信基础
大家好呀!我是reload。今天来带大家学习一下华为认证ia篇的网络通信基础部分,偏重一些基础的认识和概念性的东西。如果对网络通信熟悉的小伙伴可以选择跳过,如果是新手或小白的话建议还是看一看,先有个印象,好为后续的…...
【linux】regulartor-fixed
作用:创建一个固定的 regulator。一般是一个 GPIO 控制了一路电,只有开(enable) \ 关(disabled)两种操作。 device-tree node io_vdd_en: regulator-JW5217DFND {compatible "regulator-fixed"…...

11年408考研真题解析-计算机网络
第一题: 解析:网络层虚电路服务和数据报服务 传输服务只有:有连接可靠和无连接不可靠两种,直接排除BC。 网络层指的是IP协议,由图二可知:运输层,网际层,网络接口层唯一有连接可靠的协…...

wireshark使用要点
目录 IP过滤 端口过滤 内容过滤 过滤udp 过滤tcp IP过滤 ip.src XXX.XXX.XXX.XXX 只显示消息源地址为XXX.XXX.XXX.XXX的信息 ip.dst XXX.XXX.XXX.XXX 只显示消息目的地址为XXX.XXX.XXX.XXX的信息 ip.addr XXX.XXX.XXX.XXX显示消息源地址为XXX.XXX.XXX.XXX࿰…...
WebGL扩展与WebGPU
目录 WebGPU扩展的探索使用实验性或未标准化的特性示例:使用纹理压缩扩展多视口渲染自定义着色器阶段可变多重采样抗锯齿...

基于小安派AiPi-Eyes-Rx的N合1触摸屏游戏
基于小安派AiPi-Eyes-Rx的N合1触摸屏游戏 目前存在的游戏: 植物大战僵尸:demos/pvz羊了个羊:demos/yang消消乐:demos/xiaoxiaole华容道:demos/huarongdao PVZ功能展示可见: 羊了个羊: 消消…...
Java List sort() 排序
sort是java.util.List接口的默认方法。 List的排序方法在Java 8中被引入。 排序方法接受比较器作为参数,并根据指定的比较器对这个列表进行排序。 default void sort(Comparator<? super E> c) 示例代码: import java.text.Collator; import …...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...