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

news/2024/10/4 4:02:42 标签: redis, 数据库, 缓存

概述

  • 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 实例分别运行起来

  • 现在可以访问测试三台节点, 我们从主节点上来进行连接测试

  • $ 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.niftyadmin.cn/n/5689377.html

相关文章

<数据集>工程机械识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:2644张 标注数量(xml文件个数):2644 标注数量(txt文件个数):2644 标注类别数:3 标注类别名称:[dump truck, wheel loader, excavators] 序号类别名称图片数框数1dum…

pdf处理1

处理PDF文件以构建数据索引是一个复杂但关键的步骤,尤其是因为PDF格式的文件通常包含多种元素,如文本、图片、表格、标题等。以下是一个通俗易懂的详细解释,帮助你理解PDF文件是如何被处理和解析的: 1. PDF文件的基本结构 PDF&a…

国外电商系统开发-运维系统开发

因项目运营环境在国外,所以必须将服务器选择国外,加上第一次运营国外项目。在两大趋势下,企业的运营方向必须通过大数据来分析及修正运营方向,加上后期服务器数量日益增多,如何有效的管理众多的服务器及验证运营方向&a…

Solidity智能合约中的事件和日志

1. Solidity 中的事件和日志概述 1.1 什么是事件? 在 Solidity 中,事件(Event)是一种允许智能合约与外部世界进行通信的机制。通过触发事件,可以记录合约执行中的关键操作,并将这些操作发送到链上。事件的…

从零开始讲PCIe(1)——PCI概述

一、前言 在之前的内容中,我们已经知道了PCIe是一种外设总线协议,其前身是PCI和PCI-X,虽然PCIe在硬件上有了很大的进步,但其使用的软件与PCI系统几乎保持不变。这种向后兼容性设计,目的是使从旧设计到新设计的迁移更加…

VPN简述

文章目录 VPNVPN基础VPN类型 VPN VPN隧道安全 VPN基础 背景: 在网络传输中,绝大部分数据内容都是明文传输,存在很多安全隐患(窃听、篡改、冒充) 总部、分公司、办事处、出差人员、合作单位等需要访问总部网络资源 Vi…

YOLOv11有效涨点专栏目录 | 内含各种卷积模块,主干网络,注意力机制,自研模块,二次改进模块,检测头等创新点改进

试读篇 YOLOv11有效涨点专栏目录 | 内含各种卷积模块,主干网络,注意力机制,自研模块,二次改进模块等创新点改进 YOLOv11改进 | Conv篇 | YOLOv11引入AKConv(轻量) YOLOv11改进 | 注意力篇 | YOLOv11引入C…

C语言基础(7)之操作符(1)(详细介绍)

目录 1. 各种操作符介绍 1.1 操作符汇总表 2. 移位操作符 2.1 移位操作符知识拓展 —— 原码、反码、补码 2.2 移位操作符讲解 2.2.1 右移操作符 ( >> ) 2.2.2 左移操作符 ( << ) 3. 位操作符 3.1 & (按位与) 3.2 | (按位或) 3.3 ^ (按位异或) 3.4…