当前位置: 首页 > news >正文

[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,并且修改其daemonizeyes
      # 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
        
  • Redis主从节点复制过程
    请添加图片描述

2.断开复制

  • slaveof命令不但可以建⽴复制,还可以在从节点执⾏slaveof no one来**断开**与主节点复制关系
    • 例如:在6380节点上执⾏slaveof no one来断开复制
  • 断开复制主要流程
    • 断开与主节点复制关系
    • 从节点晋升为主节点
  • 从节点断开复制后并不会抛弃原有数据,只是无法再获取主节点上的数据变化
  • 通过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&#xff0…...

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中被引入。 排序方法接受比较器作为参数&#xff0c;并根据指定的比较器对这个列表进行排序。 default void sort(Comparator<? super E> c) 示例代码&#xff1a; import java.text.Collator; import …...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

2025-05-08-deepseek本地化部署

title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek&#xff1a;小白也能轻松搞定&#xff01; 如何给本地部署的 DeepSeek 投喂数据&#xff0c;让他更懂你 [实验目的]&#xff1a;理解系统架构与原…...

前端工具库lodash与lodash-es区别详解

lodash 和 lodash-es 是同一工具库的两个不同版本&#xff0c;核心功能完全一致&#xff0c;主要区别在于模块化格式和优化方式&#xff0c;适合不同的开发环境。以下是详细对比&#xff1a; 1. 模块化格式 lodash 使用 CommonJS 模块格式&#xff08;require/module.exports&a…...