Redis: 主从复制读写分离环境搭建

news2024/10/1 3:45:36

概述

  • Redis 的单机模式实际上就是在一个服务器上装了一个单节点的Redis
  • 通过简单的配置和简单的命令启动起来就可以使用
  • 这种搭建环境,不保证高可用的情况下,完全没有问题
  • 如果说你的项目必须要具备高可用,而且 Redis 也要提供更高的性能
  • 这个单机的模式肯定是不行的, 需要对 Redis 的架构模式进行升级
    • 升级的过程:从单机变为主从,再变为哨兵
    • 最后搭建一个集群的环境

1 )单机环境的优缺点

  • 优点

    • 部署简单
      • 下载,编译安装
      • 通过一些简单的命令启动就可以使用
    • 成本低
      • 单机搭建不复杂,搭建成本低
      • 多机器则复杂,搭建和资金成本高,节点多了管理成本也高
    • 不需要考虑数据最终一致性
  • 缺点

    • 可靠性低,可能会有节点故障
    • 性能受限于当前cpu,内存和磁盘

2 ) 架构升级

  • 实际上开发中,Redis必然是高可用的,所以单机模式并不是我们的终点
  • 我们需要对目前Redis架构模式进行升级,先整一个主从复制读写分离的环境
  • 我们需要注意以下几点
    • 了解主从复制和读写分离的意义
    • Redis主从复制的环境搭建
    • 了解主从复制的原理和流程,如何保证复制一致性
    • 了解全量同步与部分同步
    • 主从复制的配置和查看复制过程 log 日志

主从复制

  • 围绕着这张图, 可以看到多个客户端发起了读写的操作
  • 这些读写的操作都落在了master这个节点上 (先不考虑 slave 从节点)
  • 把这个 master节点 当成之前的单机,客户端所有的读写,都在这个单节点上
  • 在并发比较少的情况下,完全没有任何问题,当并发现在上来了
  • 无非就是读和写的请求多了,性能降低了,不能在第一时间内反馈你结果
  • 或者说在大量的读的请求下,我们要去写数据,不能及时保证数据落盘
  • Redis 的大部分应用场景是缓存,缓存有一个特性:读多写少
  • 基于这个根本的问题,我们解决方案是:把读的压力释放出去
  • 这就有了 Redis 的主从复制读写分离的环境,就是这么来的
  • 它的目标也非常简单,就是把读压力释放出去
  • 所以说我们就多来几个节点,这些节点就只扮演只读的这个角色
  • 这里的从节点,它就是读操作,它不能写,注意:这个也不是绝对的
  • 因为在 Redis 的配置文件里边,也可以开启从节点读写的配置,一般生产不会这么操作

1 )场景演绎

  • 现在咱们有10万的并发,搞了两个从节点,并发变成15万了,或者说20万了
  • 当现在这个主从的环境,两个从节点依然不够用了,就可以再来一个从节点
  • 所以说在这种模式下,大家可以发现我们只需要一个主节点就够了
  • 因为,我们项目中实际上用 Redis 的写操作是比较少的
  • 业务场景主要的定位就是缓存,所以写操作是比较少的
  • 一般就只要一个主节点就可以轻松应对,无非就是要释放读压力
  • 并发无休止的在增长,那你就根据当前的并发去扩展从节点即可
  • 我们需要考虑的问题是:当无休止的扩展从节点,它们内部的数据是不是都是一致的

2 )主从模式的优缺点

  • 优点
    • 分成了 master/slave 主从角色,各司其职,写操作落在了主节点上,读操作分配给从节点
    • 当并发上来后,可以很方便的进行扩展,不停地加机器来提高读性能
    • 当主节点宕机后,可以手动把一个从节点升级为一个主节点的 (这里为哨兵的应用埋下伏笔)
  • 缺点
    • 数据冗余,比如说主节点上有 10 T 的数据,那从节点也要有 10T 的数据
    • 主从之间会有一个同步数据的过程,在这个过程中,会有全量拷贝和增量拷贝
    • 所谓 全量拷贝
      • 环境搭建好之后,突然并发上来了,
      • 需要去扩展从节点,扩展一个新的从节点进来之后
      • 它第一次跟主节点建立连接关系的时候,它的这个节点上有没有数据
      • 它要把主节点所有的数据全部复制过来,才能提供读的支持
      • 这个时候,它就要做一次全量的复制
    • 所谓 增量拷贝
      • 随着后续客户端的写操作到主节点,根据RDB和AOF模式和心跳机制
      • 从节点和主节点持续通信,就可以把客户端写入的数据复制过来,写一个复制过来一个
      • 这就是增量复制
    • 这意味着,主节点有多少数据,从节点就有多少数据,这个存储压力会越来越成为一个问题
    • 但不要着急,集群是一种分片的机制,解决了存储的压力
    • 另一方面,单独去看 master, 只是一个单节点,没有释放写压力,也会有单点故障
    • 一般我们不会频繁的给 Redis 写数据, 除非有相应的使用场景,这个问题在集群中解决
    • 后期通过哨兵配合,自动切换
    • 最后,master 这个单机性能受限于自身配置

环境搭建

  • 现在搭建一主两从的环境,准备3台机器

  • 准备环境

    IP角色
    192.168.10.101Master
    192.168.10.102Slave
    192.168.10.103Slave
  • 每台机器上都要进行安装 Redis 和相关配置

    # 创建配置目录
    mkdir -p /usr/local/redis/conf
    # 创建数据目录
    mkdir -p /usr/local/redis/data
    # 创建日志目录
    mkdir -p /usr/local/redis/log
    # 创建配置文件
    vim /usr/local/redis/conf/redis.conf
    
  • 3台 Redis 节点对配置文件进行编辑,如下

    • 主节点配置
      # 放行访问IP限制,这个需要根据可信ip来配置,目前这个 0.0 做演示
      bind 0.0.0.0
      # 后台启动
      daemonize yes
      # 日志存储目录及日志文件名
      logfile "/usr/local/redis/log/redis.log"
      # rdb数据文件名
      dbfilename dump.rdb
      # aof模式开启和aof数据文件名
      appendonly yes
      appendfilename "appendonly.aof"
      # rdb数据文件和aof数据文件的存储目录
      dir /usr/local/redis/data
      # 设置密码
      requirepass 123456
      # 从节点访问主节点密码(必须与 requirepass 一致)
      masterauth 123456
      # 从节点只读模式
      replica-read-only yes
      
    • 从节点配置, 除了上述配置,还要添加下面额外的配置
      # 从节点,属于哪个主节点
      slaveof  192.168.10.101  6379
      
  • 配置好之后,把 3台 Redis 实例分别运行起来

    • $ redis-server /usr/local/redis/conf/redis.conf
  • 现在可以访问测试三台节点, 我们从主节点上来进行连接测试

  • $ bin/redis-cli -a 123456 这里仅作为演示,可以通过 auth 来授权登录

  • 因为这个是主节点,我们看下主从配置 $ info replication

  • 再来看下从节点的主从配置 $ info replication

  • 现在,我们来测试下:主节点可读可写,从节点只能读,不能写的功能

    • 在主节点:
      • $ set username wang 正常
      • $ get username 正常
    • 在从节点:
      • $ get username 正常
      • $ set age 18 发现报错:(error) READONLY You can’t write against a read only replica.
  • 这样,我们就搭建测试完毕了

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

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

相关文章

java项目实现钉钉异常告警实时监控

最近有个小伙伴问我,我们的项目核心业务的地方总是有异常,虽然有打印日志,但不能立马通知我;所以今天我就教大家如何实现异常报警实时提醒 1.需要有钉钉 自己新建的企业用户 2.建一个群,需要有三人以上;…

yolov8/9/10模型在仪表盘、指针表检测中的应用【代码+数据集+python环境+训练/应用GUI系统】

可视化训练系统 可视化应用系统 yolov8/9/10模型在仪表盘、指针表检测中的应用【代码数据集python环境训练/应用GUI系统】 背景意义 随着科学技术的快速发展,机器视觉以及人工智能等技术逐渐从理论走向实践,并在各个领域得到广泛应用。机器视觉检测系统…

TCP CUBIC 曲线对 BIC 折线的拟合

bic 旨在对 reno 改进,用二分逼近替换线性遍历逼近,时间规模从 O ( W m a x ) O(W_{max}) O(Wmax​) 下降到 O ( ln ⁡ W m a x ) O(\ln {W_{max}}) O(lnWmax​),这是本质,而 cubic 可以看作对 bic 的 bugfix,解除了…

新书速览|MySQL 9从入门到性能优化:视频教学版

《MySQL 9从入门到性能优化:视频教学版》 本书内容 MySQL是流行的关系数据库管理系统之一,由于其体积小、速度快、总体拥有成本低、开放源码等特点,一般中小型企业甚至大型互联网企业的应用开发都选择MySQL作为数据库。《MySQL 9从入门到性能优化:视频教…

【经验分享】自动化测试框架实战

一、什么是自动化测试框架 在了解什么是自动化测试框架之前,先了解一下什么叫框架?框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应…

「iOS」——KVC

iOS学习 前言KVC模式KVC设值KVC取值KVC使用keyPathKVC处理异常处理不存在的key处理nil异常 KVC处理字典KVC高阶消息传递 总结 前言 对KVC模式的简单学习和总结。 KVC模式 KVC(Key-Value Coding,键值编码)是一种通过字符串来访问对象属性的机…

详解Linux文件系统

先来研究一下磁盘: LBA 磁头面数 所有磁头是共进退的。 每个扇区的大小假设为:512 磁盘的总容量:盘面*t*s*512 数组的下标范围:盘面*t*s LBA:xxx 假设xxx为LBA地址 xxx/1000h 及为h号盘面 xxx/100c 及c号磁道…

国产化框架PaddleYOLO结合Swanlab进行作物检测

1. 项目介绍 粮食安全,作为人类生存与发展的基石,始终是全球关注的焦点。它不仅仅关乎粮食的充足供应,更涉及粮食的质量安全、营养健康以及可持续生产等多个维度。在全球化、气候变化和资源环境约束日益加剧的背景下,如何确保粮食…

ComfyUI物品移除讲解

实现效果 一、下载插件 comfyui inpaint nodes 提供重绘功能节点,效果比自带的好很多 官方介绍 使用ComfyUI更好地进行修补的节点:用于SDXL,LaMa,MAT和各种其他工具的Foocus修补模型,用于预填充修补和去除区域。 插件…

Android调用科大讯飞语音转写 API以及解析踩坑之旅

需求 需要对本地音频文件,调用科大讯飞的api进行转文字,本来呢,以为很简单,结果坑不少。 语音转写 API 文档 坑1:解析 下载demo,代码也挺简单,放到idea中,替换一下key&#xff0c…

基于Springboot+Vue的网上书店(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 在这个…

用户体验测试——21条UX设计原则

根据心理学的研究和发展,对应理论不断被完善到用户体验设计领域,以下21条UX设计原则即为心理学在用户体验设计中的应用,在设计和测试中应用这些原则,可以提高用户体验质量特性,如下所示: 21条UX设计原则 有效性 特斯勒定律(最小复杂度定律) 这个定律也被称为“复杂性…

数据转换新利器,开启企业高效之路

Maria是 S 公司的采购专员,最近需要进行公司设备的采购,这可让她犯了难:公司多个部门提交采购申请,但每个部门都有着不同的需求。一时间她就收到了大量的申请单,却难以高效整合处理(比如哪些申请可以合并采…

环境变量

见一见环境变量: 查看环境变量的命令 命令行: echo &PATH echo &HOME env ps ajx ps aux ps -f -o pid code.c中获取环境变量 main(char* env[]) char* getenv(env_name) 本地变量 shell…

App模拟下载场景的demo

摘要 目的:提供一个稳定的下载场景,可以手动触发和定时触发下载,每次下载相同大小文件,研究下载场景的功耗影响 原理:把电脑当做服务器,手机测试App固定下载电脑存放的某个XXXMB的大文件,基于…

如何使用ssm实现校园体育赛事管理系统的设计与实现+vue

TOC ssm713校园体育赛事管理系统的设计与实现vue 绪论 课题背景 身处网络时代,随着网络系统体系发展的不断成熟和完善,人们的生活也随之发生了很大的变化。目前,人们在追求较高物质生活的同时,也在想着如何使自身的精神内涵得…

PE节表中是否存在misc.VirtualSize 比SizeofRawData还要大的情况

确实是存在的,这是win10自带记事本,可以看到 确实是大.所以在申请imagebuffer的时候,还是需要比较大小.但是在还原的时候.只考虑sizeofRawData即可>

【Android 14源码分析】WMS-窗口显示-第一步:addWindow

忽然有一天,我想要做一件事:去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

项目管理专业资质认证ICB 3中关于项目经理素质的标准

项目管理专业资质认证ICB 3中关于项目经理素质的标准,的确很全面,下面摘录之:

三款专业的英文文献翻译工具,翻译论文不在话下

阅读英文论文文献时免不了要借用一些翻译软件来帮助理解,但因为论文文献的特殊性,普通的翻译软件不能很好的翻译一些专业名词和术语,所以这里给大家分享三款可以胜任文献翻译的专业翻译工具,可以快速准确的完成英文文献翻译工作。…