一、主从复制 (Master-Slave Replication)

1. 基本概念

主从复制是Redis最简单的集群模式,由一个主节点(Master)和一个或多个从节点(Slave)组成。

2. 工作原理

  • 数据同步:从节点启动时会向主节点发送SYNC命令,主节点执行BGSAVE生成RDB文件并发送给从节点

  • 命令传播:主节点将写命令持续发送给从节点,保持数据同步

  • 全量/增量同步:初次连接为全量同步,断线重连后可能使用增量同步(PSYNC)

3. 优缺点

  • 优点

    • 读写分离,提高读性能

    • 数据冗余,提高数据安全性

    • 故障恢复相对简单

  • 缺点

    • 主节点故障需要手动切换

    • 写操作仍然集中在主节点

    • 全量同步时网络开销大

二、哨兵模式 (Sentinel)

1. 基本概念

哨兵是Redis的高可用解决方案,由一个或多个哨兵节点监控主从集群,实现自动故障转移。

2. 核心功能

  • 监控:持续检查主从节点是否正常运行

  • 通知:当被监控节点出现问题时,向管理员发送警报

  • 自动故障转移:主节点故障时,自动将一个从节点升级为主节点

  • 配置提供者:为客户端提供最新的主节点地址

3. 工作原理

3.1. 监控机制

每个哨兵节点会:

  • 每秒一次向所有主从节点和其他哨兵节点发送PING命令

  • 如果实例在配置的down-after-milliseconds时间内没有有效回复,该实例会被标记为"主观下线"(SDOWN)

  • 当足够数量的哨兵(通常需要quorum数量)都将主节点标记为"主观下线"时,主节点会被标记为"客观下线"(ODOWN)

3.2. 故障转移流程
  • 选举领头哨兵: 当主节点被判定为客观下线时,哨兵节点会通过Raft算法选举出一个领头哨兵(leader)来负责故障转移

  • 选择新主节点: 领头哨兵会根据以下规则从从节点中选择新的主节点:

    • 优先级高的(由slave-priority配置)

    • 复制偏移量大的

    • 运行ID小的

  • 提升新主节点: 将选中的从节点提升为主节点

  • 重新配置从节点: 让其他从节点改为复制新的主节点

  • 通知客户端: 通知客户端主节点已变更

  • 旧主节点处理: 如果旧主节点重新上线,会被配置为新主节点的从节点

4. 优缺点

  • 优点

    • 自动故障转移,提高可用性

    • 监控功能完善

    • 配置管理自动化

  • 缺点

    • 写操作仍然单点

    • 故障转移期间可能出现数据丢失

    • 集群规模较大时管理复杂

三、Cluster集群模式

1. 基本概念

Redis Cluster是Redis的分布式解决方案,通过数据分片(Sharding)实现水平扩展。

2. 核心特性

  • 数据分片:使用哈希槽(16384个slot)分配数据

  • 高可用:每个分片有主从复制

  • 去中心化:节点间通过Gossip协议通信

3. 工作原理

3.1. 哈希槽分配
  • 当集群启动时,所有哈希槽(0-16383)需要被分配到各个节点上。每个节点负责存储分配给它的哈希槽中的键值对。

  • 例如,一个包含6个节点的集群,可以将哈希槽分配如下:

    • 节点1:0-5460

    • 节点2:5461-10922

    • 节点3:10923-16383

    • 节点4、5、6作为从节点,分别复制节点1、2、3的数据。

3.2. 数据访问
  • 客户端在访问集群时,需要通过哈希槽来定位数据所在的节点。客户端会根据键的哈希值计算出对应的哈希槽,然后根据哈希槽的分配情况找到对应的节点。

  • 如果客户端访问的键所在的节点发生故障,客户端会自动重试,直到找到新的主节点。

3.2. 故障转移
  • Gossip协议

    • 节点间通过TCP端口(默认集群端口=客户端端口+10000)通信

    • 每秒随机选择几个节点进行PING/PONG消息交换

    • 包含的集群元数据:

      • 节点列表和角色

      • 槽位分配信息

      • 节点状态(正常/疑似下线/已下线)

  • 故障检测

    • 节点A标记节点B为"疑似下线"(PFAIL)

    • 通过Gossip协议传播状态

    • 当多数主节点确认B下线,标记为"已下线"(FAIL)

    • 触发故障转移

3.2. 数据迁移
  • 在集群运行过程中,如果需要对哈希槽进行重新分配(例如添加或移除节点),Redis集群支持在线迁移

  • 数据迁移过程是逐步进行的,不会阻塞集群的正常运行。迁移完成后,哈希槽的分配会更新,客户端会根据新的分配情况访问数据。

4. 优缺点 

  • 优点

    • 真正的分布式,支持水平扩展

    • 部分节点故障不影响整体服务

    • 自动故障转移

  • 缺点

    • 不支持多数据库(只能使用db0)

    • 批量操作受限(需所有key在同一slot)

    • 事务限制(所有key必须在同一节点)

    • 迁移大key可能影响性能

四、三种模式对比

特性主从复制哨兵模式Cluster集群
数据分布全量复制全量复制分片(16384 slots)
写扩展性单点写入单点写入多主节点写入
读扩展性支持支持支持
故障转移手动自动自动
客户端复杂度简单中等复杂
适用场景读多写少需要高可用大规模数据

五、选择建议

  1. 主从复制:适合读多写少,对可用性要求不高的场景

  2. 哨兵模式:需要高可用且数据量不大的场景

  3. Cluster集群:数据量大、需要水平扩展和高可用的场景

实际生产中,Redis Cluster是当前最推荐的集群方案,特别是对于大规模部署。

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

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

相关文章

如何使用 Airtest 对 Flutter 和 Unity 应用进行UI自动化测试

使用 Airtest 进行 Flutter/Unity UI 自动化测试终极指南 一、 核心原理:为什么 Airtest 能行? 要理解如何用,先要明白其原理。Airtest 采取了“两条腿走路”的策略,这正是它能通吃各种UI技术的关键。 第一条腿:基于…

河马剧场多部自制剧霸榜,短剧精品化战略持续推进

临近暑期,短剧市场热度逐渐攀升。近期,DataEye发布6月9日—6月15日微短剧热力榜显示河马剧场以8部作品占据TOP30近三分之一席位,前三名中更是占据2个席位,以题材多元化、用户覆盖广、数据爆发力强的特点引领行业风向。其中&#x…

幂级数 (0,R); R ;(R,+oo)

很好,我们现在来回答你问的这个问题: 🟠 幂级数在收敛半径 R R R 以外会发生什么? 我们考虑一个一般形式的幂级数: ∑ n 0 ∞ a n ( x − x 0 ) n \sum_{n0}^{\infty} a_n (x - x_0)^n n0∑∞​an​(x−x0​)n 它的…

C#学习13——正则表达式

一、正则表达式 是一种匹配输入文本的模式,是由特殊字符组成,用于匹配字符串中的字符组合。 二、正则表达式有哪些? 1.Regex 类(引入System.Text.RegularExpressions;) Regex 类用于表示一个正则表达式。 1&#…

【Redis】持久化机制:RDB / AOF 的应用与场景

文章目录 Redis 持久化一、RDB1.1 说明1.2 触发机制手动触发自动触发 1.3 流程说明1.4 文件处理1.5 优缺点 & 适用场景 二、AOF2.1 说明2.2 使用 AOF2.3 命令写入2.4 文件同步2.5 重写机制2.6 启动时数据恢复2.7 优缺点 & 适用场景 三、不使用 AOF / RDB 的情况3.1 场景…

Python 企业级开发与DevOps实践

https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 大型项目结构与设计模式 项目结构规范 text 复制 下载 enterprise_app/ ├── docs/ # 项目文档 ├── tests/ # 测试代码 │ ├── unit/ …

E结构体基础.go

前言:结构体是一种用户自定义的数据类型,它可以将多个不同类型的数据整合在一起,形成一个有机的整体。这就好比在现实生活中,我们有各种各样的物品,它们各自有不同的属性和用途,而结构体就像是一个收纳箱&a…

Spring @Autowired 依赖注入全解析

Autowired 是 Spring 框架中实现依赖注入的核心注解,其自动装配过程可分为以下步骤,结合了类型匹配、名称解析和容器协作机制: 1. 组件扫描与 Bean 定义注册 扫描阶段:Spring 容器启动时,通过 ComponentScan 或 XML 配…

将git的普通目录用idea初始化为maven项目

在 IntelliJ IDEA 中将一个已存在的 Git 目录初始化为 Maven 项目,可以通过以下步骤完成。这些步骤假设你已经有一个包含代码的 Git 仓库,并希望将其转换为 Maven 项目结构,以便更好地管理依赖和构建。 步骤 1:打开或导入 Git 仓库…

Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建

一、key 属性的核心作用 在 Vue 中,key是一个特殊的属性,主要用于协助 Vue 的虚拟 DOM(Virtual DOM)算法高效地更新实际 DOM。它的核心作用可以概括为: 唯一标识节点:为每个节点提供一个唯一的身份标识优化 Diff 算法:帮助 Vue 准确判断两个节点是否为同一节点(如for循…

【音视频】PJSIP库——示例简介、C++类说明

1、简介 pjsip库的源码中有很多示例,是入门pjsip的第一手资料,下面将各个示例所演示的功能列举出来,以便下一步学习; 最后总结下C++接口主要类及成员函数说明。 2、示例介绍 2.1 音视频处理 aectest 音频回声消除测试工具,用于演示音频处理模块中的回声消除(AEC)功能…

网站用CDN可以防DDoS和CC攻击吗?

现在市面上常见有两种CDN,加速CDN与高防CDN,这两种的区别还是很大的。 加速CDN: 加速CDN基本上都是共享、无防节点,主要做的是加速,所以价格也会相对较低,大陆地区的CDN都需要备案域名接入使用。 高防CD…

【图片识别改名】批量识别图片中的文字对图片进行改名,识别文字对图片重新命名的操作步骤和注意事项

一、应用场景 快递单号识别与管理:在快递业务中,每天会产生大量的快递面单图片。通过咕嘎OCR批量识别面单上的快递单号等关键信息,并以此对图片进行重命名,方便工作人员快速查询和管理快递包裹的物流信息,提高快递处理…

先理解软件工程,再谈AI辅助研发

摘要: 近期行业内对“AI赋能软件工程”的讨论,大多聚焦于代码生成等局部提效,这是一种危险的短视。本文旨在纠正将“软件开发”等同于“编码”的普遍误解,深入探讨软件工程的系统性本质。我们将论证,若缺乏坚实的工程体…

Android软件适配遥控器需求-案例经验分享

不分大屏产品需要有遥控器功能,这里分享部分实战经验 文章目录 前言一、案例部分效果图二、项目基础架构三、焦点基础知识适配遥控器基础-焦点问题焦点管理明确焦点状态布局实现硬编码实现引入第三方自定义组件实现 焦点顺序作用 初始焦点 requestFocus 按键处理获取…

《HTTP权威指南》 第3章 HTTP报文

报文是如何流动的 HTTP报文是在HTTP程序之间发送的数据块。数据块以一些文本形式的元信息开头。 报文方向有:流入、流出、上游、下游。 流入和流出描述事务处理的方向,流入和流出是基于服务器的描述。 流入:客户端发往服务器的请求报文 流…

Kafka 集群架构与高可用方案设计(二)

Kafka 集群架构与高可用方案的优化策略 合理配置参数 在 Kafka 集群的配置中,参数的合理设置对于系统的高可用性和性能表现起着关键作用。例如,min.insync.replicas参数定义了 ISR(In-Sync Replicas,同步副本)集合中…

47-Oracle ASH报告解读

上一期生成了ASH报告后,就需要解读报告关键信息。ASH的使用可以快速定位瞬时性能问题。生产环境的场景时间紧、任务重,但是必须要结合具体业务分析,同时借助其他工具做报告做趋势分析。 一、ASH 技术原理​ ​1. 核心机制​ ​采样原理​&a…

“本地化思维+模块化体验”:一款轻量数据中心监控系统的真实测评

“本地化思维模块化体验”:一款轻量数据中心监控系统的真实测评 在数据中心运维逐步精细化的今天,一款真正贴合本地用户习惯、设计有温度的系统并不多见。近期体验了一款功能全面、逻辑清晰的监控平台,给人留下了深刻印象。并不是广。今天就从…

词编码模型有哪些

词编码模型有哪些 词编码模型在高维向量空间的关系解析与实例说明 如Word2Vec、BERT、Qwen等 一、高维向量空间的基础概念 词编码模型(如Word2Vec、BERT、Qwen等)的核心是将自然语言符号映射为稠密的高维向量,使语义相近的词汇在向量空间中位置接近。以Qwen模型为例,其…