[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 …...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...
