[Redis][主从复制][上]详细讲解

news2024/10/2 5:16:12

目录

  • 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.树形主从结构

  • 树形主从结构(分层结构)使得从节点不但可以复制主节点数据,同时可以作为其他从节点的主节点继续向下层复制

  • 通过引⼊复制中间层,可以有效降低住系欸按负载和需要传送给从节点的数据量

  • 适用场景:当主节点需要挂载等多个从节点时为了避免对主节点的性能⼲扰,可以采⽤这种拓扑结构
    请添加图片描述

  • 缺点:一旦数据进行修改,同步的延时是比上面两种结构更长的

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

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

相关文章

PyTorch自定义学习率调度器实现指南

在深度学习训练过程中,学习率调度器扮演着至关重要的角色。这主要是因为在训练的不同阶段,模型的学习动态会发生显著变化。 在训练初期,损失函数通常呈现剧烈波动,梯度值较大且不稳定。此阶段的主要目标是在优化空间中快速接近某…

ResNet残差网络:深度学习的里程碑

引言 在深度学习领域,卷积神经网络(CNN)的发展一直推动着图像识别、目标检测等任务的进步。然而,随着网络层数的增加,传统的CNN面临着梯度消失和梯度爆炸等难题,限制了深层网络的训练效果。为了克服这些挑…

oracle direct path read处理过程

文章目录 缘起处理过程1.AWR Report 分析2.调查direct path read发生的table3.获取sql text4.解释sql并输出执行计划: 结论:补充direct path read等待事件说明 缘起 记录direct path read处理过程 处理过程 1.AWR Report 分析 问题发生时间段awr如下…

FortiGate OSPF动态路由协议配置

1.目的 本文档针对 FortiGate 的 OSPF 动态路由协议说明。OSPF 路由协议是一种 典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由 域是指一个自治系统,即 AS,它是指一组通过统一的路由政策或路由协议互相交 换路由信息的网络。在这个 AS 中,所有的 …

基于JSP+Servlet+Layui实现的博客系统

> 这是一个使用 Java 和 JSP 开发的博客系统,并使用 Layui 作为前端框架。 > 它包含多种功能,比如文章发布、评论管理、用户管理等。 > 它非常适合作为 Java 初学者的练习项目。 一、项目演示 - 博客首页 - 加载动画 - 右侧搜索框可以输入…

开源服务器管理软件Nexterm

什么是 Nexterm ? Nexterm 是一款用于 SSH、VNC 和 RDP 的开源服务器管理软件。 安装 在群晖上以 Docker 方式安装。 在注册表中搜索 nexterm ,选择第一个 germannewsmaker/nexterm,版本选择 latest。 本文写作时, latest 版本对…

【STM32】RTT-Studio中HAL库开发教程七:IIC通信--EEPROM存储器FM24C04

文章目录 一、简介二、模拟IIC时序三、读写流程四、完整代码五、测试验证 一、简介 FM24C04D,4K串行EEPROM:内部32页,每个16字节,4K需要一个11位的数据字地址进行随机字寻址。FM24C04D提供4096位串行电可擦除和可编程只读存储器&a…

Excel 设置自动换行

背景 版本:office 专业版 11.0 表格内输入长信息,发现默认状态时未自动换行的,找了很久设置按钮,遂总结成经验帖。 操作 1)选中需设置的单元格/区域/行/列。 2)点击【开始】下【对齐方式】中的【自动换…

HAproxy,nginx实现七层负载均衡

环境准备: 192.168.88.25 (client) 192.168.88.26 (HAproxy) 192.168.88.27 (web1) 192.168.88.28 (web2) 192.168.88.29 (php1) 192.168.88.30…

基于微信小程序的教学质量评价系统ssm(lw+演示+源码+运行)

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于微信小程序的教学质量评价系统的开发全过程。通过分析基于微信小程序的教学质量评价系统管理的不足,创建了一个计算机管理基于微信小程序的教学…

【Anti-UAV410】论文阅读

摘要 无人机在红外视频中的感知,对于有效反无人机是很重要的。现有的跟踪数据集存在目标大小和环境问题,不能完全表示复杂的逼真场景。因此作者就提出了Anti-UAV410数据集,该数据集总共410个视频和超过438K个标注框。为了应对复杂环境无人机跟…

丹摩智算(damodel)部署stable diffusion实验

名词解释: 丹摩智算(damodel):是一款带有RTX4090,Tesla-P40等显卡的公有云服务器。 stable diffusion:是一个大模型,可支持文生图,图生图,文生视频等功能 一.实验目标 …

Linux-TCP重传

问题描述: 应用系统进行切换,包含业务流量切换(即TongWeb主备切换)和MYSQL数据库主备切换。首先进行流量切换,然后进行数据库主备切换。切换后发现备机TongWeb上有两批次慢请求,第一批慢请求响应时间在133…

【HarmonyOS】应用引用media中的字符串资源如何拼接字符串

【HarmonyOS】应用引用media中的字符串资源如何拼接字符串 一、问题背景: 鸿蒙应用中使用字符串资源加载,一般文本放置在resoutces-base-element-string.json字符串配置文件中。便于国际化的处理。当然小项目一般直接引用字符串,不需要加载s…

计算机毕业设计 基于Python国潮男装微博评论数据分析系统的设计与实现 Django+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

LeetCode 149. 直线上最多的点数

LeetCode 149. 直线上最多的点数 给你一个数组 points ,其中 points[i] [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 示例 1: 输入:points [[1,1],[2,2],[3,3]] 输出:3 示例 2: 输入&…

【数据结构之线性表】有序表的合并(链表篇)

链表有序表的合并 思路图 将链表L1和L2按照顺序合并到L3中(注:三个链表都是带头结点的) A、要实现有序合并,必须先比较L1,L2两表中结点的大小,这里我们暂时先不讨论,直接根据图中来进行思路整理&#xff…

pve主要架构和重要服务介绍

Proxmox VE (PVE) 是一款开源的虚拟化平台,它基于 KVM (Kernel-based Virtual Machine) 和 LXC (Linux Containers) 技术,支持虚拟机和容器的运行。PVE 还提供高可用集群管理、软件定义存储、备份和恢复以及网络管理等企业级功能。下面介绍 PVE 的主要架…

jenkins中多个vue项目共用一个node_modules减少服务器内存的占用,对空间造成资源浪费

多个vue项目使用的node_modules一致,每个项目都安装一遍依赖,对空间造成资源浪费。 通过服务器上的软连接mklink(windows服务器,如果是linux服务器用ln)来共用一套node_modules windows mklink /d [链接文件或目录] [原始文件或目录] 进入…

二叉树的基本概念(下)

文章目录 🍊自我介绍🍊二叉树的分类满二叉树完全二叉树 🍊二叉树的存储顺序存储[完全二叉树]链式存储 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ &#x1f34…