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

    • $ 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.rhkb.cn/news/436856.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【hot100-java】【寻找重复数】

技巧 使用字典,边记录边比较,有直接输出。 def findDuplicate(nums):seen {}for num in nums:if num in seen:return numseen[num] Truereturn None 可惜不是O(1) 二分查找 class Solution {public int findDuplicate(int[] nums) {int left0;int ri…

宝塔搭建nextcould 30docker搭建onlyoffic8.0

宝塔搭建nextcould 宝塔搭建nextcould可以参考这两个博文 我搭建的是30版本的nextcould,服务组件用的是下面这些,步骤是一样的,只是版本不一样而已 nginx 1.24.0 建议选择nginx,apache没成功。 MySQL 8.0以上都可以 php 8.2.…

Certbot自动申请并续期https证书

Certbot自动申请并续期https证书 一、 安装 Certbot:使用命令安装 Certbot: dnf install certbot python3-certbot-nginx获取 SSL 证书:运行 Certbot 命令来获取并安装 SSL 证书。 示例命令,替换其中的域名和路径信息&#xff1a…

jmeter-请求参数加密-MD5加密

方法1 :使用jmeter自带的函数助手digest Tool(工具)---Function Helper Dialog(函数助手对话框) 第一个参数是要md5加密的值,第二个参数是保存加密后值的变量 ( 此处变量是从txt文件导入的,所以使用的是${wd} ) …

Linux网络操作命令与函数全面总结

1. 引言 Linux作为服务器和开发平台,网络操作是其核心功能之一。本文旨在全面总结Linux系统中的网络操作方法,包括命令行工具和编程接口,帮助读者深入理解Linux网络管理的机制。 2. 命令行工具 2.1 ping 命令 ping 命令用于测试网络连接和…

基于投影滤波算法的rick合成地震波滤波matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 RICK合成地震波模型 4.2 投影滤波算法原理 5.完整工程文件 1.课题概述 基于投影滤波算法的rick合成地震波滤波matlab仿真。分别通过标准的滤波投影滤波以及卷积滤波投影滤波对合成地震剖面进行滤波…

基于Hive和Hadoop的共享单车分析系统

本项目是一个基于大数据技术的共享单车分析系统,旨在为用户提供全面的单车使用信息和深入的出行行为分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出,以 S…

论文阅读 | HiDDeN网络架构

ECCV 2018 斯坦福-李飞飞团队 一、问题描述 受以下启发: 对抗性例子的发现:深度学习模型在图像识别任务中对微小的、难以察觉的输入扰动非常敏感,这些扰动可以导致模型错误分类图像。这一现象表明,神经网络可以在图像中编码信息&…

Python或R时偏移算法实现

🎯要点 计算单变量或多变量时序距离,使用欧几里得、曼哈顿等函数量化不同时序差异。量化生成时序之间接近度相似性矩阵。使用高尔距离和堪培拉距离等相似度测量。实现最小方差匹配算法,绘制步进模式的图形表示。其他语言包算法实现。 &…

IP协议讲解

IP协议 IP协议的本质:提供一种能力,将数据跨网络从A主机传输到B主机 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4. 4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大 的数字是15, 因…

【数据结构初阶】排序算法(下)冒泡排序与归并排序

文章目录 4. 交换排序4. 1 冒泡排序 5. 归并排序6. 非比较排序6. 1 计数排序 5. 排序性能分析6. 排序算法复杂度及稳定度分析 4. 交换排序 交换排序基本思想: 所谓交换**,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置**。 交换排序的特点是…

归并排序【C语言版-笔记】

目录 一、概念二、排序流程理解三、代码实现3.1主调函数3.2 merge函数 四、性能分析 一、概念 归并是一种算法思想,是将两个或两个一上的有序表合并成一个长度较大的有序表。若一开始无序表中有n个元素,可以把n个元素看作n个有序表,把它们两…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27目录1. VisScience: An Extensive Benchmark for Evaluating K12 Educational Multi-modal Scientific Reasoning VisScience:…

java中的强软弱虚

在java中对象的引用有强、软、弱、虚四种,这些引用级别的区别主要体现在对象的生命周期、回收时机的不同。 文章目录 准备工作1. 设置内存2. 内存检测 强引用软引用弱引用虚引用 准备工作 1. 设置内存 为方便调试,将内存设置为16MB 依次点击菜单栏的R…

初识算法 · 双指针(1)

目录 前言: 双指针算法 题目一: ​编辑 题目二: 前言: 本文作为算法部分的第一篇文章,自然是少不了简单叭叭两句,对于算法部分,多刷是少不了,我们刷题从暴力过度到算法解法,自…

【Linux】进程概念-2

文章目录 1.环境变量1.1 基本概念1.2 常见环境变量1.3 查看环境变量方法1.4 测试PATH1.5 测试HOME1.6 和环境变量相关的命令1.7 环境变量的组织方式1.8 通过代码如何获取环境变量1.9 通过系统调用获取或设置环境变量1.10 环境变量通常是具有全局属性的1.11 实验 2. 程序地址空间…

安全中心 (SOC) 与 网络运营中心 (NOC)

NOC 和 SOC 之间的区别 网络运营中心 (NOC) 负责维护公司计算机系统的技术基础设施,而安全运营中心 (SOC) 则负责保护组织免受网络威胁。 NOC 专注于防止自然灾害、停电和互联网中断等自然原因造成的网络干扰,而 SOC 则从事监控、管理和保护。 NOC 提…

微信小程序 图片的上传

错误示范 /*从相册中选择文件 微信小程序*/chooseImage(){wx.chooseMedia({count: 9,mediaType: [image],sourceType: [album],success(res) {wx.request({url:"发送的端口占位符",data:res.tempFiles[0].tempFilePath,method:POST,success(res){//请求成功后应该返…

Java在用增强for循环遍历集合时删除元素,抛出java.util.ConcurrentModificationException异常

文章目录 0. 前言1. 问题产生的背景2. Java中增强for循环的底层原理3. 为什么增强for循环不支持在遍历集合时删除元素3.1 问题排查3.2 modCount 变量的来源3.3 expectedModCount 变量的来源3.4 导致modCount变量和expectedModCount不相等的原因3.5 为什么用迭代器遍历元素时删除…

【Nacos架构 原理】内核设计之Nacos通信通道

文章目录 Nacos通信通道 (长链接)现状背景场景分析配置服务 长链接核心诉求功能性诉求负载均衡连接生命周期 Nacos通信通道 (长链接) 现状背景 Nacos 1.X 版本 Config/Naming 模块各自的推送通道都是按照自己的设计模型来实现的…