【redis】主从复制:单点问题、配置详解、特点详解
文章目录
- 单点问题
- 什么是主从复制
- 主从模式能解决的问题
- 并发量有限
- 可用性问题
- 配置
- 建立复制
- 通过配置文件来指定端口
- 配置主从
- 查看集群结构
- 断开复制
- 特点
- 安全性
- 只读
- 传输延迟
单点问题
分布式系统中,涉及到一个非常关键的问题:单点问题
某个服务器程序,只有一个节点(只搞一个物理服务器,来部署这个服务器程序)。这就可能会遇到一些问题:
- 可用性问题。如果这个机器挂了,意味着服务就中断了
- 性能/支撑的并发量也是比较有限的
引入分布式系统,主要也就是为了解决上述的单点问题
什么是主从复制
在分布式系统中,往往希望有多个服务器来部署 redis
服务器,从而构成一个 redis
集群。此时就可以让这个集群给整个分布式系统重其他的服务,提供更稳定/更高效的数据存储功能
在分布式系统重,希望使用多个服务器来部署 redis
,存在以下几种 redis
部署方式:
- 主从模式
- 主从+哨兵模式
- 集群模式
主从模式:
在若干个 redis
节点中,有的是“主节点”,有的是“从节点”。假设有三个物理服务器(称为三个节点),分别部署了一个 redis-server
进程
此时就可以把其中的一个节点,作为“主节点”,另外两个节点作为“从节点”。
- 从节点得听主节点的(从节点上的数据要跟随主节点变化;从节点的数据要和主节点保持一致)
- 本来,在主节点上保存一堆数据,引入从节点后,就是要把主节点上面的数据,复制出来放到从节点中。后续,主节点这边对于数据有任何修改,都会把这样的修改给同步到从节点
- 从节点就是主节点的副本
redis
主从模式中,从节点上的数据不允许被修改,只能读取数据
主从模式能解决的问题
并发量有限
- 由于从节点的数据都是时刻和主节点保持一致的,所以其他的客户端从从节点读取数据,和从主节点这里读取数据,是没有区别的
- 后续如果有客户端来读取数据了,就可以从上述节点中,随机挑一个节点,给这个客户端提供读取数据的服务
- 引入了更多的计算资源,自然能够支撑的并发量也就大幅提高了
可用性问题
之前只是单个 redis
服务器节点,此时这个机器挂了,整个 redis
就挂了
- 上述这个主从结构,这些
redis
的机器不太可能“同时挂了”
但是整个机房,是否可能被一锅端了?(也是可能存在的)
-
这个时候如果考虑到更高的可用性,就可以把这些机器放到多个不同的机房中(异地多活)
-
如果是挂掉了某个从节点,没什么影响。此时继续从主节点或者其他从节点读取数据,得到的效果完全相同
-
如果挂掉了主节点,还是有一定影响的。从节点只能读取数据,如果需要写数据,就没得写了
可用性是提高了,但还是没有到非常理想的程度
我们可以弄多个主节点吗?
- 一山容不得二虎
- 如果存在两个主节点,相互之间如何同步数据,是个麻烦事
更准确的说,主从模式,主要是针对“读操作”进行并发量&可用性的提高。而写操作的话,无论是可用性还是并发,都是非常依赖主节点,主节点又不能搞多个。实际业务场景中,读操作往往就是比写操作更加频繁
主从结构,是分布式系统中比较经典的一种结构。不仅仅
redis
支持,MySQL
也支持
配置
建立复制
配置 redis
主从结构,首先需要启动多个 redis 服务器。正常来说,每个 redis
服务器程序,应该在一个单独的主机上(才是分布式)
没有多个服务器,我们可以在一个服务器上,运行多个 redis-server
进程
- 我们要保证
redis-server
的端口是不同的 - 默认端口为:
6379
,此时就不能让新启动的redis-server
再继续使用6379
了
如何去指定 redis-server
的端口呢?
- 可以在启动程序的时候,通过命令行来指定端口号。
-port
选项 - 也可以直接在配置文件中,来设定端口
通过配置文件来指定端口
此处我们准备搞一个主节点,两个从节点
slave1
是从节点 1,配置文件设置的6380
slave2
是从节点 2,配置文件设置的6381
redis
是主节点,端口为6379
从节点的配置文件都是复制的主节点的,只是把端口号改了。还需要把守护模式设为yes
(daemonize yes
)
- 此时就可以看到启动了三个服务器(一主两从)
- 但此时这几个节点还未构成主从结构,而是各自为政。要想成为主从结构,还需要进一步的进行配置
配置主从
要想配置成主从结构,就需要使用 slaveof
- 在配置文件中加入
slaveof {masterHost} {masterPort}
随Redis
启动生效 - 在
redis-server
启动命令时加入--slaveof {masterHost} {masterPort}
生效 - 直接使用
Redis
命令:slaveof {masterHost} {masterPort}
生效
一般是使用配置文件更多,修改配置文件是一直持久生效的,重启后也能用
直接加上相关信息:
Redis
服务器的配置文件改完之后,要重启服务器
主从结构配置好之后,我们看一下网络状态
- 主节点随时修改,从节点能立即感知到
- 但是从节点不能改,只能读
查看集群结构
使用:
info replication
offset
- 主节点上会收到源源不断的“修改数据”请求,从节点就需要从主节点这里同步这些修改请求
- 从节点和主节点之间的数据同步,不是瞬间完成的
offset
就相当于是从节点和主节点之间,同步数据的进度
lag
- 表示延迟,单位为复制日志的条目数。
connected slaves
- 从节点下面还可以接从节点
断开复制
直接使用 slaveof no one
这个命令,来断开现有的主从复制关系
- 从节点断开主从关系,它就不再从属于其他节点了,里面已经有的数据,是不会抛弃的
- 但后续主节点再针对数据进行修改,从节点就无法再自动同步数据了
但是重启服务器之后,还是会回到之前一主两从的结构,因为配置文件里面是这样设置的
特点
安全性
对于数据比较重要的节点,主节点会通过设置 requirepass
参数进⾏密码验证,这时所有的客⼾端访问必须使⽤ auth
命令实⾏校验。
从节点与主节点的复制连接是通过⼀个特殊标识的客⼾端来完成,因此需要配置从节点的 masterauth
参数与主节点密码保持⼀致,这样从节点才可以正确地连接到主节点并发起复制流程。
只读
默认情况下,从节点使⽤ slave-read-only=yes
配置为只读模式。
由于复制只能从主节点到从节点,对于从节点的任何修改主节点都⽆法感知,修改从节点会造成主从数据不⼀致。所以建议线上不要修改从节点的只读模式。
传输延迟
主节点和从节点之间通过网络(TCP
)来传输。TCP
内部支持了 nagle
算法(默认开启)
- 开启了,就会增加
TCP
的传输延迟,节省了网络带宽 - 关闭了,就会减少
TCP
的传输延迟,增加了网络带宽 - 目的和
TCP
的捎带应答是一样的,针对小的TCP
数据报,进行合并,从而减少包的个数(等待合并的时候就会耗时)
repl-disable-tcp-nodelay
参数就可以用于在主从通信过程中,关闭 TCP
的 nagle
算法,从而减少传输延迟,不过会增加网络带宽
- 从节点更快的和主节点进行同步
- 一般游戏开发,有其是及时性要求很高的(
fps
、moba
…)都要关闭nagle
算法
相关文章:
【redis】主从复制:单点问题、配置详解、特点详解
文章目录 单点问题什么是主从复制主从模式能解决的问题并发量有限可用性问题 配置建立复制通过配置文件来指定端口配置主从查看集群结构 断开复制 特点安全性只读传输延迟 单点问题 分布式系统中,涉及到一个非常关键的问题:单点问题 某个服务器程序&…...
VSCode创建VUE项目(四)增加用户Session管理
将用户信息存储或者更新到Session sessionStorage.setItem("userID",loginform.value.username); sessionStorage.setItem(loginTime, Date.now()); 获取Session信息 const storedUserInfo sessionStorage.getItem(userID); const loginTime sessionStorage.get…...
Spring Boot(十六):拦截器Interceptor
拦截器的简介 拦截器(Interceptor)是Spring框架中的概念,它同样适用于Spring Boot,因为Spring Boot是基于Spring框架的。拦截器是一种AOP(面向切面编程)的轻量级实现方式,它允许我…...
考研复习之队列
循环队列 队列为满的条件 队列为满的条件需要特殊处理,因为当队列满时,队尾指针的下一个位置应该是队头指针。但是,我们不能直接比较 rear 1 和 front 是否相等,因为 rear 1 可能会超出数组索引的范围。因此,我们需…...
sql-labs
p1 sql注入的目的是为了破坏sql语句结构,有三种参数类型,字符型(就是一个字符1或者a之类的),字符串(“hellow之类的”)型,数值型,前两个有闭合,注释符号有# …...
Java 集合框架:从数据结构到性能优化,全面解析集合类
Java 集合框架(Java Collections Framework,JCF)是 Java 语言中用于存储、操作和管理数据的标准库。它提供了一组通用的接口、类和方法,使开发者能够高效地操作不同类型的数据集合。 本文将结合 Java 集合框架类图,介…...
vulkanscenegraph显示倾斜模型(5.4)-相机操纵器
前言 在VSG(Vulkan Scene Graph)中,系统支持用户通过鼠标或触摸输入与三维场景进行交互,从而动态控制相机的位置和姿态,实现与三维场景的交互。VSG提供了多种相机操纵器,其中Trackball是一种常见的相机操作…...
两个还算好用的ppt转word和PDF转word的python脚本
PPT转word: import re from pptx import Presentation from docx import Document from docx.shared import Inches from io import BytesIO from PIL import Imagedef clean_text(text):# 使用正则表达式删除控制字符和NULL字节return re.sub(r[\x00-\x1F\x7F], ,…...
用PostgreSQL玩转俄罗斯方块:当SQL成为游戏引擎
当DBA开始摸鱼2025年某深夜,一位不愿透露姓名的DBA为了在监控大屏上隐藏游戏行为,竟用SQL实现了俄罗斯方块!从此,SELECT成了方向键,UPDATE成了旋转指令,DELETE成了消除大招。本文将揭秘这个疯狂项目的技术内…...
基于WebAssembly的浏览器密码套件
目录 一、前言二、WebAssembly与浏览器密码套件2.1 WebAssembly技术概述2.2 浏览器密码套件的需求三、系统设计思路与架构3.1 核心模块3.2 系统整体架构图四、核心数学公式与算法证明4.1 AES-GCM加解密公式4.2 SHA-256哈希函数五、异步任务调度与GPU加速设计5.1 异步任务调度5.…...
手撕算法之`vector` 扩容、`string` 分割、链表翻转
手写常见操作:vector 扩容、string 分割、链表翻转 (一)vector扩容 在 C++ 中,vector 的扩容机制是动态数组实现的核心特性,直接关系到性能和内存使用效率。以下是深入剖析: 1. 扩容触发条件 vector<int> v; v.push_back(1); // 当 size() == capacity() 时触发…...
tauri2程序单例模式实现,二次点击桌面图标显示之前最小化的程序并聚焦
官方有这个单例的插件可以直接使用:单例 | Tauri,使用单实例插件确保 Tauri 应用程序在同一时间只运行单个实例。插件已经安装并初始化,应该可以立即正常运行。尽管如此,我们也可以使用 init() 方法来增强它的功能。插件的 init()…...
【AI学习笔记】Coze平台实现将Excel文档批量导入数据库全过程
背景前摇&原视频教程: 最近看到很多同学都在用Coze平台操作数据,我也想了解一下工作流的搭建和数据处理过程,但是一下子又看不懂太复杂的逻辑,于是上B站搜索相关的基础教程。 Coze官方教程: 之前有看过Coze平台…...
c++之迭代器
一.迭代器的基本概念 1.什么是迭代器 迭代器是一种对象,它提供了一种访问容器中各个元素的方法,同时隐藏了容器内部的实现细节。简单来说,迭代器就像是一个指针,它可以指向容器中的某个元素,并且能够通过一些操作&am…...
Elasticsearch 索引
一、简介 在 Elasticsearch 中,索引(Index)是存储相关文档的地方,类似于关系数据库中的数据库。索引是 Elasticsearch 中最重要的概念之一,用于组织和存储数据。 二、索引的基本概念 索引(Index…...
Java EE(16)——网络原理——TCP协议解析二
4.滑动窗口(效率机制) 上篇博客讲到的确认应答/超时重传/连接管理都是安全机制,但也会降低传输效率。滑动窗口就是在保证可靠传输的基础上,尽可能地提高传输效率。 根据确认应答机制,客户端每发送一个请求都需要收到服务器的确认应答报文后才…...
解决address already in use报错:如何查看占用某个端口的程序并杀死
文章目录 问题背景解决策略概述端口占用诊断步骤 1:确认占用端口的进程步骤 2:确认进程的详细信息 解决端口占用问题方案 1:安全终止进程方案 2:修改应用配置 最佳实践与预防措施端口使用规范开发环境配置 进阶技巧批量处理端口占…...
linux 设置tomcat开机自启动
tomcat自启动配置 1.添加tomcat.service文件 vim /etc/systemd/system/tomcat.service 2.编辑文件内容,路径修改为自己的 [Unit] DescriptionTomcat8 Aftersyslog.target network.target remote-fs.target nss-lookup.target[Service] Typeoneshot ExecStart/us…...
如何配置本地git
配置本地 Git 主要包含设置用户信息、配置 SSH 密钥、设置 Git 仓库等步骤,以下是详细的配置过程: 1. 安装 Git 在开始配置之前,你需要先安装 Git。不同操作系统的安装方式有所不同: Windows:访问 Git 官方下载页面&a…...
VSCode 生成HTML 基本骨架
在VSCode 新建html文件中敲一个英文感叹号 ! <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…...
蓝桥杯备考:DFS暴搜之健康的荷斯坦奶牛
这道题数据量很小很小,我们可以用dfs暴搜来搜索 这是我们的决策树 #include <iostream> using namespace std; int n, m; const int N 45; int rq[N]; int g[N][N]; int cnt; int path; int ret 45; int st; bool check() {for (int i 1; i < n; i){in…...
android adjust 卸载与重装监测
想要洞察应用内用户的留存率,可以通过Adjust 的卸载与重装进行监测 名词解释: 卸载:集成完成后,卸载应用,安装状态为:卸载 重装:如果应用已经卸载,但一段时间后又进行安装,则会被视为重装。 📢📢📢:adjust 文件中说到24 小时后,可以再 adjust 控制台看安装…...
WPF Reactive 数据绑定
文章目录 Combox 绑定List-通过枚举绑定方法一:方法二:Button 绑定TextBlock绑定NumericUpDown绑定Expander绑定checkbox绑定NumericUpDownCombox 绑定List-通过枚举绑定 方法一: ViewControl using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; usin…...
2.创建Collection、添加索引、加载内存、预览和搜索数据
milvus官方文档 milvus2.3.1的官方文档地址: https://milvus.io/docs/v2.3.x 使用attu创建collection collection必须要有一个主键字段、向量字段 确保字段类型与索引类型兼容 字符串类型(VARCHAR)通常需要使用 Trie 索引,而不是 AutoInd…...
yaffs
YAFFS(Yet Another Flash File System)是专为NAND闪存设计的日志结构文件系统,其核心原理围绕NAND闪存的特性优化数据管理。以下是其关键原理的详细说明: 1. NAND闪存适配 写入限制:NAND闪存需按页写入(通…...
CMake-环境变量介绍
文章目录 作用域获取环境变量初始化查看特殊的环境变量 环境变量类似普通变量,但也有些不同,如下: 作用域 在一个CMake进程中环境变量具有全局作用域 获取环境变量 使用ENV操作符获取环境变量,例如$ENV{<name>}ÿ…...
wordpress表单插件CF7调用方式
Contact Form 7(CF7)是WordPress中非常流行的表单插件,以下是其常见的调用方式: 通过短代码调用 在页面或文章编辑器中添加:完成表单设置后,复制表单对应的短代码,然后在需要显示表单的页面或文章的编辑器中直接粘贴…...
小程序开发中的用户反馈收集与分析
我们在开发小程序的过程中根据开发过程中的代码及业务场景,以下是针对需求管理系统的用户反馈收集与分析方案设计: 需求管理系统用户反馈收集与分析方案 一、反馈数据模型设计 // 新增Feedback模型(app/admin/model/Feedback.php) namespace app\admin\model; use think\…...
【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解
【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解 (图1-1) 一、鸿蒙中App、HAP、HAR、HSP是什么? (1)App Pack(Application Package) 是应用发布的形态,上架应用市场是以App Pa…...
Linux:一些命令记录
netstat -antp|grep -i 27017 | awk {print $5}| cut -d: -f1 | sort | uniq -c | sort -n 查看磁盘大小 du -sh /usr/local/* 查看剩余内存: free -m linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|gr…...
Microsoft Edge浏览器的取证分析(基于Chromium)
概述 早在2019年,微软就用Chromium替换了EdgeHTML浏览器引擎,这是微软支持谷歌Chrome浏览器的一个开源项目。通过切换到Chromium,Edge与Chrome浏览器共享一个共同的架构,这意味着用于Chrome浏览器调查的取证技术也适用于Edge。 …...
Java面试黄金宝典6
1. 什么是 CAS 原理: CAS (Compare-And-Swap)是一种硬件级别的原子操作指令,在 Java 并发编程中常被用于实现无锁算法。其核心逻辑是:在进行数据更新时,会先将内存位置 V 的值与预期原值 A 进行比较&#x…...
【计算机网络】网络编程
文章目录 1. 客户端/服务器2. TCP/UDP协议3. 网络编程套接字-socket3.1 API的使用3.1 DatagramScoket类3.1 DatagramScoket类 4. 通过UDP实现回显服务器程序4.1 服务器代码4.2 客户端代码4.3 代码执行过程4.4 通过UDP实现翻译客户端 5. 通过TCP实现回显服务器5.1 服务器代码5.2…...
算法刷题整理合集(七)·【算法赛】
本篇博客旨在记录自已的算法刷题练习成长,里面注有详细的代码注释以及和个人的思路想法,希望可以给同道之人些许帮助。本人也是算法小白,水平有限,如果文章中有什么错误或遗漏之处,望各位可以在评论区指正出来…...
【开源宝藏】30天学会CSS - DAY6 第六课 流光文字动画
第 0 步:项目结构 lighting-text/├─ index.html└─ style.cssindex.html:包含列表 <ul>,其中每个 <li> 放一个字母或符号。style.css:设置背景、文字样式,以及关键帧动画(lighting…...
C#与西门子PLC的六大通信库
C#与西门子PLC的六大通信库: 一、S7.NET S7.NET是一款开源的S7协议通信库,支持西门子S7通信。 二、Sharp7 Sharp7与S7.NET一样,是一款.NET版本的S7通信库。 三、Snap7 Snap7是一个开源的C通信库,支持西门子S7通信。 四、Prodave P…...
VScode
由于centos停止了维护 ,后面使用ubuntu 在Ubuntu中用vscode 充当记事本的作用 替代了centos中vim的作用 后面使用vscode编辑 vscode中继续使用makefile , xshell中的cgdb进行debug (半图形写 ,半命令行debug&&运行) 官网下载地址:https://code.visuals…...
Linux文件系统与磁盘管理
文件系统和磁盘管理是Linux系统管理的核心组成部分,直接影响系统的性能、数据安全性和存储效率。本文将从Linux文件系统的基本概念出发,深入探讨其架构、类型、管理工具以及实际操作技巧,帮助读者全面理解并掌握这一关键领域。 第一章&#x…...
【云馨AI-大模型】大模型的开发和应用中,Python、PyTorch和vLLM关系概括
说明 1. Python 定位:基础编程语言。作用:Python 是大模型生态系统的核心语言,几乎所有深度学习框架(如 PyTorch、TensorFlow)和工具链(如 vLLM)都通过 Python 接口提供服务。特点:…...
AWS SAP学习笔记-概念
1、什么是ETL应用程序,举个例子说明? ETL(Extract, Transform, Load)应用程序是一种用于数据处理和迁移的工具或程序,它主要负责从多个数据源提取数据,对数据进行转换和清洗,然后将处理后的数据…...
kotlin知识体系(三) : Android Kotlin 中的函数式编程实践指南
前言 Kotlin以函数式编程革新了Android开发,通过高阶函数、扩展函数等特性,帮助开发者构建高可维护性代码。接下来我们来看一下Kotlin 中的函数式编程的各个特性。 1. 高阶函数与 Lambda 表达式:函数作为参数或返回值 在 Kotlin 中&#x…...
SpringBoot3+Vue3实战(Vue3快速开发登录注册页面并对接后端接口、表单项自定义校验规则、Hutool工具类)(4)
目录 一、SpringBoot3Vue3实现基本增删改查。前后端通信交互、配置后端跨域请求。数据批量删除。(博客链接) 二、SpringBoot3Vue3快速开发登录、注册页面并实现对接。 (1)操作数据表employee(员工信息表)。 <1>修改employee表的字段组成。 <2&g…...
OpenCV图像拼接项目指南
引言 图像拼接是计算机视觉领域中的一个重要应用,它可以将多张有重叠区域的图像拼接成一张全景图。这项技术广泛应用于虚拟现实、医学影像、卫星图像处理等领域。OpenCV作为一个强大的开源计算机视觉库,提供了丰富的工具和函数来实现图像拼接。本文将详…...
机器学习--DBSCAN聚类算法详解
目录 引言 1. 什么是DBSCAN聚类? 2. DBSCAN聚类算法的原理 3. DBSCAN算法的核心概念 3.1 邻域(Neighborhood) 3.2 核心点(Core Point) 3.3 直接密度可达(Directly Density-Reachable) 3…...
使用 Docker 构建 LangChain 开发环镜及 ChatOllama 示例
文章目录 Github官网简介Dockerfilerequirements.txt构建 LangChain 镜像ChatOllama 示例Ollama 示例模拟 tools Github https://github.com/langchain-ai/langchain 官网 https://python.langchain.com/docs/introduction/ 简介 LangChain 是一个用于构建 LLM 驱动的应用…...
持续集成与持续交付:这里有从开发到部署的全流程优化
阅读原文 在上一篇中,我们深入探讨了安全测试的核心内容,强调了它在发现安全漏洞和提升系统安全性中的重要作用。接下来,我们将聚焦于持续集成(CI)与持续交付(CD),这是现代软件开发…...
CH32V208蓝牙内部带运放32位RISC-V工业级微控制器CH32V208CBU6、CH32V208GBU6开发板原理图和PCB
开发板 CH32V208CBU6立创格式的开发板上述链接可下载,官方文件进行了转换,使用前请仔细核对。 CH32V208CBU6原理图,上述图片为芯片部分。已进行DRC。 CH32V208CBU6 PCB三维图,上述图片为芯片部分。已进行DRC。 CH32V208GBU6开发…...
机器臂运动控制算法工程师面试
大厂的经验总结: 一、基础概念理解 请解释机器臂运动学正解和逆解的概念,并分别说明其用途。 正解:已知机器臂各关节的角度(或位移),通过运动学模型计算出机器臂末端执行器在笛卡尔空间中的位置和姿态。用途在于可以根据给定的关节驱动值,预测末端的实际位置,用于运动…...
【一起来学kubernetes】21、Secret使用详解
Secret 的详细介绍 Secret 是 Kubernetes 中用于存储和管理敏感信息(如密码、令牌、密钥等)的资源对象。Secret的设计目的是为了安全地存储和传输敏感信息,如密码、API密钥、证书等。这些信息通常不应该直接硬编码在配置文件或镜像中&#x…...
Java架构师成长之路
概述 本教程主要从6个方面,全面讲解Java技术栈的知识。 1.性能调优 深入理解MySQL底层原理、索引逻辑,数据结构与算法。使用Explain进行优化分析MVCC原理剖析日志机制解析 2.框架源码 掌握Spring底层原理带你手写一个Spring解析IOC、AOP源码、以及事…...