再谈Redis三种集群模式:主从模式、哨兵模式和Cluster模式

news2024/9/24 9:28:37

总结经验
redis主从:可实现高并发(读),典型部署方案:一主二从
redis哨兵:可实现高可用,典型部署方案:一主二从三哨兵
redis集群:可同时支持高可用(读与写)、高并发,典型部署方案:三主三从

一、概述

Redis 支持三种集群模式,分别为主从模式、哨兵模式和Cluster模式。

最初,Redis采用主从模式构建集群。在这种模式下,如果主节点(master)出现故障,需要手动将从节点(slave)转换为主节点。然而,这种模式在故障恢复方面效率不高。

为了提高系统的可用性,Redis引入了哨兵模式。在哨兵模式中,一个哨兵集群负责监控主节点和从节点。如果检测到主节点故障,系统可以自动将从节点晋升为新的主节点。这提高了故障恢复的自动化程度。

尽管如此,哨兵模式仍然面临内存容量和写入性能的限制,因为这种模式的写入能力仍然局限于单个节点。为了解决这一问题,Redis在3.x版本之后推出了Cluster集群模式。Cluster模式通过数据分片和节点的水平扩展,实现了更高效的内存利用和写入性能。

特性/配置 Redis 主从复制 Redis 哨兵 Redis 集群
主要目的 数据备份与读写分离 高可用性和故障自动切换 高并发和数据分散处理
架构 一个主节点和多个从节点 监控主从结构并自动切换 多个主节点,数据分片
数据复制 主节点到从节点 监控并管理主从复制 每个主节点管理自己的数据集
故障转移机制 手动或哨兵自动切换 自动故障转移 自动处理节点故障
可伸缩性 有限,依赖主节点 为主从结构增加高可用性 高,因为数据分布式处理
使用场景 数据备份和读扩展 关键应用的高可用性 大规模应用的高性能需求
设置复杂度 相对简单 中等,需配置哨兵 复杂,需规划数据分区

二、Redis 主从模式架构介绍

2.1 概要

在Redis的主从复制架构中,系统通过定义主库(master)和从库(slave)的角色,实现数据的高效同步和备份。这一架构具体包含以下特点:

  • master的读写能力:master是系统中的数据中心,它不仅承担全部的写操作,还能处理读请求。当在master上执行任何改变数据的操作时,这些更改会自动且实时地同步到所有slave。
  • 单向数据流:数据同步流是单向的,意味着数据只从master流向slave,确保了数据同步的一致性和可靠性。
  • slave的只读特性:slave通常被配置为只读模式,它们接收并存储从master传来的数据。这样设计主要是为了分散读取压力,从而提高系统的整体读取性能。
  • 主slave的对应关系:一个master可以对应多个slave,形成一对多的关系。这种结构利于数据的冗余备份和读取负载的分散。相反,一个slave只能对应一个master,以保持数据同步的一致性。
  • slave的容错性:如果某个slave出现故障,它对系统其他部分的影响是最小的。即便在slave宕机的情况下,其它slave仍能继续提供读服务,master也能保持正常的读写操作。当故障的slave恢复后,它会自动从master同步缺失的数据。
  • master故障的影响:master的故障会导致Redis暂时无法处理新的写请求,但已连接的slave可以继续提供读服务。一旦master恢复,Redis会重新提供完整的读写服务。
  • master故障的应对机制:在当前的master发生故障时,系统不会自动在slave中选择一个新的master。这需要通过额外的高可用性解决方案来实现,例如使用Redis Sentinel或Redis Cluster来管理master的选举和故障转移。

在Redis主从复制架构,Redis能够有效地提供高可用性、数据冗余以及读写分离,从而在维持高性能的同时确保数据的安全和一致性。

2.2 Redis主从复制原理

在本文档中,我们将重点介绍Redis版本2.8及其后续版本的主从复制机制。

无是哪种场景,Redis 的主从复制机制均采用异步复制,也称为乐观复制,因此不能完全保证主从数据的一致性。

不论在什么场景下,Redis的主从复制机制都采用了所谓的“异步复制”或“乐观复制”。这种复制方式意味着不能完全保证主库和从库数据的实时一致性。

Redis的主从复制机制可以根据不同的运行场景和条件采取不同的实现方式。以下是一些主要场景及其对应的复制实现和说明:

  • 第一次启动:在从库第一次连接到主库时,将采用psync复制方式进行全量复制。这意味着从库会从头开始复制主库中的全部数据。
  • 正常运行期间:在正常运行状态下,从库通过读取主库的缓冲区来进行增量复制。这个过程涉及复制主库上发生的新的数据变更。
  • 从库第二次启动(主库缓冲区未溢出):当从库重新启动且主库的缓冲区未溢出时,将通过读取主库的缓冲区进行部分复制。这种方式能够快速同步中断期间发生的数据变更,而不会对主库造成重大影响。
  • Redis 2.8及以上版本的从库第二次启动(针对主库):当从库第二次启动且系统版本为Redis 2.8或以上时,将采用psync复制进行全量复制。这种情况通常发生在主库的缓冲区数据无法满足从库需要同步的数据量时。

通过上述不同的复制策略,Redis能够在保证数据备份和减少系统负载的同时,灵活应对各种运行场景。尽管异步复制机制可能导致主从数据存在短暂的不一致,但这种设计在绝大多数应用场景中已被证明是既高效又可靠的。

PS:异步复制是Redis的复制方式,而psync是实现这种复制方式的具体命令。乐观复制或乐观并发控制则是另一种与Redis的异步复制机制不同的数据库事务处理概念。不少博客或说明介绍异步复制和乐观复制是同一个概念。

2.3 PSYNC 工作原理

Redis主从复制原理图解

PSYNC 命令是Redis中用于从节点与主节点之间数据同步的关键命令。它的工作原理包括以下几个步骤:

  1. 启动或重连判断
    • 当从节点(Slave)启动或与主节点(Master)的连接断开后重连时,从节点需要确定是否曾经同步过。
    • 如果从节点没有保存任何主节点的运行ID(runid),它将视为第一次连接到主节点。
  2. 第一次同步处理
    • 在第一次同步的情况下,从节点会发送 PSYNC -1 命令给主节点,请求进行全量数据同步。
    • 全量同步是指主节点将其所有数据完整地复制一份给从节点。
  3. 断线重连处理
    • 对于之前已经同步过的从节点,它会发送 PSYNC runid offset 命令,其中runid是主节点的唯一标识符,offset是从节点上次同步数据的偏移量。
  4. 主节点的响应
    • 主节点接收到PSYNC命令后,会检查runid是否匹配,以及offset是否在复制积压缓冲区的范围内。
    • 如果匹配且offset有效,主节点将回复CONTINUE,并发送自从节点上次断开连接以来的所有写命令。
  5. 全量同步触发条件
    • 如果runid不匹配,或offset超出了积压缓冲区的范围,主节点将通知从节点执行全量同步,回复FULLRESYNC runid offset
  6. 复制积压缓冲区的作用
    • 主节点会在处理写命令的同时,将这些命令存入复制积压队列,同时记录队列中存放命令的全局offset
    • 当从节点断线重连,且条件允许时,它可以通过offset从积压队列中进行增量复制,而不是全量复制。
  7. 数据一致性保障
    • PSYNC机制允许从节点在网络不稳定或其他意外断开连接的情况下,能够以增量方式重新同步数据,保持主从节点数据的一致性。

PS:判断是否进行全量同步,需要考虑两个关键因素:首先,确认这是否是第一次进行数据同步;其次,检查缓存区是否已经达到或超过其容量上限。只有在是第一次同步,或者缓存区已溢出的情况下,才会执行全量同步。

2.4 Redis 主从模式环境搭建

在Redis的主从架构中,主节点的数据更新会自动被复制到从节点,确保数据的一致性。这种设置既是一种数据备份策略——从节点存储了主节点的数据备份,也提高了数据安全性。此外,通过主从架构实现读写分离,主节点负责处理写请求,而读请求可以分散到一个或多个从节点,这样既提高

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

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

相关文章

Java并发基础:CountDownLatch全面解析!

内容概要 CountDownLatch的优点在于能够简洁高效地协调多个线程的执行顺序,确保一组线程都完成后才触发其他线程的执行,适用于资源加载、任务初始化等场景。它提供了清晰的等待/通知机制,易于理解和使用,是提升多线程程序性能和可…

ChatGPT prompt概述

ChatGPT prompt概述 2022年11月30日,由人工智能实验室Open AI发布的对话式大型语言模型ChatGPT一夜爆火。凭借其强大的文字处理和人机交互能力迅速成为炙手可热的新一代人工智能产品。ChatGPT号称史上最强大的人工智能,它通过学习和理解人类语言与我们对…

玩具取名

看到长度是\(200\),想到区间DP 但在这里说一下,设\(f[i][j]\)表示前\(i\)个字符,转换后以\(j\)结尾的最短长度是推不走的,因为原来的字符串的第\(i\)个字符合并之后产生的新字符有可能继续合并,这是有问题的

【成品论文57页】2024美赛F题成品论文57页+每一小问配套代码数据

基于数据预测下的减少非法野生动物贸易研究 近年来,非法野生动物贸易每年涉及的金额高达 265 亿美元,被认为是全球第四大 非法贸易。本文基于收集的数据, 对非法野生动物贸易进行研究。 问题一,为了确定五年项目的研究对象我们利用…

PXIe-5842第三代PXI矢量信号收发器简介

内容 简介​PXIe-5842 VST的主要特性PXI VST软件工具PXI VST应用结论下一步 简介 NI于2012年引入了矢量信号收发器(VST)的概念。VST将RF信号发生器、RF信号分析仪和功能强大的FPGA集成在单个PXI模块上。PXIe-5842 VST是首款提供30 MHz到26.5 GHz连续频率覆盖范围的VST。PXIe…

百分点科技:《数据科学技术: 文本分析和知识图谱》

科技进步带来的便利已经渗透到工作生活的方方面面,ChatGPT的出现更是掀起了新一波的智能化浪潮,推动更多智能应用的涌现。这背后离不开一个朴素的逻辑,即对数据的收集、治理、建模、分析和应用,这便是数据科学所重点研究的对象——…

Blender 与 3ds Max | 面对面的直接较量(2024)

Blender和3ds Max,哪个动画软件更好?作为一个从事动画领域十年的专业人士,Mark McPherson提供了八条最新建议,帮助你了解哪个软件更适合满足你的3D动画需求。 1.建模 获胜者:3ds Max。3ds Max的建模机制已经被证明是…

Leetcode刷题笔记题解(C++):36. 有效的数独

思路一:暴力破解,两个二维数组记录行、列对应的数字出现的次数,比如rows[i][index]表示的数字index在i行出现的次数,三维数组记录每个块中对应数字出现的次数,比如boxes[i/3][j/3][index]表示的数字index在[i/3][j/3]个…

031 递归

何为递归 示例 public static void main(String[] args) {System.out.println(fn(5)); }static int fn(int a){return a 1 ? 1 : a * fn(a - 1); }

conda虚拟环境基础

【一文搞定最新版Anaconda】Win11 安装 Anaconda(2023.9)详解(不删除旧版情况下下载、安装、注册、登录、设置环境变量、迁移旧环境、配置修改换源等)连接Pycharm_win11安装anaconda-CSDN博客 conda命令大全(create/in…

基于大数据的淘宝电子产品数据分析的设计与实现

(1)本次针对开发设计系统并设置了相关的实施方案,利用完整的软件开发流程进行分析,完成了设置不同用户的操作权限和相关功能模块的开发,最后对系统进行测试。 (2)框架可以帮助程序开发者快速构建…

【Java程序设计】【C00195】基于SSM的影视创作论坛管理系统(论文+PPT)

基于SSM的影视创作论坛管理系统(论文PPT) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的影视创作论坛 本系统分为前台系统、后台管理员和后台会员3个功能模块。 前台系统:当游客打开系统的网址后,首先看…

2024美赛B题Searching for Submersibles原创论文完整版

Searching for Submersibles搜索潜水器 2024美赛B题Searching for Submersibles原创论文(共38页)部分内容,其余见文末: 整体框架: 1.1 问题背景与问题重述 海上游轮迷你潜水艇公司(MCMS)&…

前端学习笔记 | HTML5+CSS3静态网页制作的技巧(持续更新)

注:本文的css样式均使用less写法 1、字体居中 (1)先text-align:center;行内元素水平居中 (2)再line-heigh:(盒子高度);行内元素垂直居中 text-align: center;line-height: ( 30 / vw ); 2、盒子居中 情景1&#…

Vue引入Axios

1.命令安装axios和vue-axios npm install axios --save npm install vue-axios --save 2.package.json查看版本 3.在main.js中引用 import axios from axios; import VueAxios from vue-axios; Vue.use(VueAxios,axios) 4.如何使用 (初始化方法) 将下列代…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第6章 逻辑斯谛回归与最大熵模型(1)6.1 逻辑斯谛回归模型

文章目录 第6章 逻辑斯谛回归与最大熵模型6.1 逻辑斯谛回归模型6.1.1 逻辑斯谛分布6.1.2 二项逻辑斯谛回归模型6.1.3 模型参数估计6.1.4 多项逻辑斯谛回归 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第3章 k邻近邻法 《统计学习…

Spring 事务原理总结三

今天这篇文章,我想梳理一下Spring事务用到的几个核心组件。这些核心组件是我们理解Spring事务原理的基础。通过它们我们可以体会学习一下Spring设计者设计Spring事务时的基本思路。这些组件是:TransactionInfo、TransactionStatus、TransactionManager、…

【Chrono Engine学习总结】2-可视化

由于Chrono的官方教程在一些细节方面解释的并不清楚,自己做了一些尝试,做学习总结。 0、基本概念 类型说明: Chrono的可视化包括两块:实时可视化,以及离线/后处理可视化。 其中,实时可视化,又…

字节测试岗3面都过了,最后因为这个被刷。。。

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 说在前面 面试时最好不要虚报工资。本来字节跳动是很想去的,几轮面试也通过了&…

【Crypto | CTF】BUUCTF 大帝的密码武器1

天命:这题真的是来刷经验的,有点吐血 首先这题是贼简单,但我居然跪到了,所以特此写这一篇来惩戒自己心太大 拿到文件,文件写着zip,改成zip后缀名即可,也不算啥难的 打开里面的两份文件&#x…