Redis 的集群

深入理解 Redis 的集群模式与高可用机制

Redis 是一款广泛应用于高性能缓存与存储系统的 NoSQL 数据库。随着业务的发展,如何提升 Redis 的高可用性和水平扩展能力成为架构设计的关键。本篇博客将系统讲解 Redis 的不同集群模式及其高可用策略,深入剖析其故障恢复机制与主从选举规则。


一、Redis 的四种主要部署模式

1. 单机模式(Standalone)

  • 所有数据集中存储在一个 Redis 实例中。

  • 简单、快速、适合测试或小型系统。

  • 缺点:没有容灾能力,单点故障严重。

2. 主从复制模式(Master-Slave)

  • 一个主节点(Master)提供读写,多个从节点(Slave)复制主节点的数据,仅提供读。

  • 支持读写分离,从节点可缓解主节点压力。

  • 缺点:主节点挂掉后需人工切换,没有自动恢复能力。

3. Sentinel 哨兵模式

  • 在主从复制基础上,增加 Sentinel 守护进程,负责监控主从状态并实现主从自动切换。

  • 自动故障转移,无需人工干预。

  • 高可用但不支持数据分片,适合中小型系统。

4. Redis Cluster 模式

  • Redis 官方提供的分布式架构,支持数据自动分片与高可用。

  • 每个主节点负责部分数据(slot),并配有一个或多个从节点。

  • 集群自动处理主从故障转移,具备真正的弹性扩展能力。


二、Sentinel 模式中的部署与容灾原理

1. Sentinel 是什么?

  • 是 Redis 提供的高可用组件,独立运行的进程,不是 Redis 实例本身。

  • 负责监控主从节点、判断故障、发起主从切换。

2. Sentinel 可以部署在哪?

  • 可以部署在任意能访问 Redis 的服务器上

  • 推荐部署在:

    • 与从节点同机(节省资源)

    • 独立服务器上(高可用性强)

  • 不推荐部署在主节点上:主节点宕机,Sentinel 也失效。

3. 最小部署建议

  • 至少 3 个 Sentinel 节点,确保有法定票数判断主节点状态。

  • 推荐架构:

    • 1 主 + 2 从 + 3 Sentinel(可与从节点共用机器)


三、Redis Cluster 模式的高可用机制

Redis Cluster 在设计上具备原生的分布式高可用能力,主要包括以下几个方面:

1. 主从架构

  • 每个主节点对应一个或多个从节点,用于备份数据、提升可用性。

2. 节点间 Gossip 协议

  • 所有节点定时互发心跳包(PING/PONG),检测对方存活状态。

  • 若某主节点被多数节点判断失联,则标记为 FAIL

3. 自动 Failover 机制

当主节点宕机时,其从节点会自动参与“竞选”成为新的主节点,流程如下:

晋升规则(从节点选主):
  1. 优先看 slave-priority 配置(默认值越小越优先;为 0 表示不参与选主)。

  2. 再比较复制偏移量 offset,越大说明同步越完整,优先级越高。

  3. 最后比较节点 ID,值较小的节点胜出(UUID)。

⚠️ 选主需要多数主节点存活,Redis Cluster 遵循 “超过半数” 原则防止脑裂。


四、如果主节点和它的所有从节点都宕机了怎么办?

情况说明:

  • 某个主节点及其所有从节点都挂了。

后果:

  • 对应的数据分片(slot)将不可访问。

  • Redis Cluster 不会将这些 slot 自动分配给其他主节点(为了数据一致性安全)。

  • 集群部分服务仍可用,但出现 cluster_slots_fail 状态。

解决方案:

  1. 启动一个新的 Redis 节点。

  2. 使用 redis-cli --cluster add-node 加入集群。

  3. 使用 setslotreshard 等命令重新分配 slot。

  4. 恢复备份数据(RDB/AOF)到新节点。

如何避免:

  • 为每个主节点配置 至少两个从节点

  • 部署在不同物理机或网络区域,增强容灾能力。


五、小结与最佳实践

模式是否高可用是否支持分片是否自动故障恢复适用场景
单机测试、开发
主从✅(部分)❌(需手动)小型项目
Sentinel中型项目,高可用需求
Cluster大型分布式系统,数据量大

🔚 写在最后

Redis 的集群模式提供了丰富的选择,每种模式适合的场景和复杂度不同。在生产环境中,推荐使用 Redis Cluster 结合多个从节点部署,保障数据分片与故障恢复能力,并通过合理设置 slave-priority 和监控系统提升系统弹性。

如果你正在设计 Redis 架构,不妨从自身系统的可用性要求、数据规模、读写压力等方面出发,选择合适的集群模式,并做好部署与监控体系的建设。


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

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

相关文章

基于Dify平台构建AI应用

2022年底openAI的chatgpt的出现,让人们看到生成式AI的能力如此强大,引燃了生成式AI的一波浪潮。2025年春节前,DeepSeek的横空出世让大模型这个领域变得人人都可以参与进来,生成式AI大模型不再有非常高的显卡的门槛,普通…

Python tikinter实现打开指定ip的电脑摄像头

以下是一个使用Python的tkinter和OpenCV库实现打开指定IP摄像头的应用程序。这个程序允许用户输入IP摄像头的URL,并实时显示摄像头画面,同时支持截图和录制功能。 登录后复制 import tkinter as tk from tkinter import ttk, messagebox, filedialog imp…

OpenCV插值方法详解:原理、应用与代码实践

一、引言 在数字图像处理中,插值是一种基本且重要的技术,它广泛应用于图像缩放、旋转、几何变换等场景。OpenCV作为最流行的计算机视觉库之一,提供了多种插值方法供开发者选择。本文将全面介绍OpenCV中的插值技术,包括各种方法的…

创客匠人解析:身心灵赛道创始人 IP 打造核心策略

在当代社会焦虑情绪蔓延的背景下,身心灵赛道正以万亿级市场规模成为知识变现的新蓝海。作为知识变现领域的重要参与者,创客匠人通过服务超 5W 知识博主的实践经验,揭示了该赛道中创始人 IP 打造的底层逻辑 ——IP 不仅是形象符号&#xff0c…

Rust 和C++工业机器人实践

Rust 调用Cursor案例 Cursor 的这些功能可以显著提升开发效率,减少重复劳动,适合个人开发者和团队协作使用。 读取文件内容并处理 使用Cursor读取文件内容并逐行处理: use std::io::{Cursor, BufRead};let data = "Line 1\nLine 2\nLine 3".as_bytes(); let c…

llama.cpp学习笔记:后端加载

单例 struct ggml_backend_registry {std::vector<ggml_backend_reg_entry> backends;std::vector<ggml_backend_dev_t> devices;// ... }struct ggml_backend_reg_entry {ggml_backend_reg_t reg;dl_handle_ptr handle; };typedef struct ggml_backend_reg * ggm…

Prompt工程标准化在多模型协同中的作用

&#x1f680; 在AI模型"群雄逐鹿"的时代&#xff0c;如何让这些"AI武林高手"协同作战&#xff1f;答案可能藏在一个看似平凡却至关重要的概念中&#xff1a;Prompt工程标准化。 &#x1f4da; 文章目录 引言&#xff1a;AI模型的"巴别塔"困境什…

Java面试宝典:基础五

104. 源文件命名规则 题目:主类名为 a1,保存它的源文件可以是? 选项: A. a1.java B. a1.class C. a1 D. 都对 答案:A 解析: Java 源文件必须与公共类名完全匹配(区分大小写),后缀为 .java。.class 是编译后的字节码文件,非源文件。105. Java类的本质 题目:Java类…

Pycaita二次开发基础代码解析:几何特征统计、跨零件复制与发布技术的工业级实现

本文将从工业实践角度深入剖析CATIA二次开发中的三项核心技术&#xff1a;几何特征量化分析、跨零件特征迁移和产品对象发布。全文严格基于提供的类方法代码展开解析&#xff0c;不做任何修改和补充。 一、几何图形集特征统计技术&#xff1a;设计复杂度的精确量化 方法功能解…

入门级STM32F103C8T6无人机(共两张)

入门级STM32F103C8T6无人机&#xff08;原理图其一&#xff09; 一、STM32F103C8T6 最小系统电路中各接口&#xff08;引脚&#xff09;的解释及作用 一&#xff09;电源相关引脚 引脚名称说明3.3V为芯片及部分外围电路提供 3.3V 工作电源&#xff0c;保障芯片正常运行所需的电…

Git安装全攻略:避坑指南与最佳实践

1、系统环境检查 确认操作系统版本&#xff08;Windows/macOS/Linux&#xff09;及位数&#xff08;32/64位&#xff09;检查是否已安装旧版Git&#xff0c;避免版本冲突确保系统环境变量配置权限 2、下载安装包注意事项 官方下载地址推荐&#xff08;避免第三方镜像源&…

AlpineLinux安装部署MariaDB

简单来说,MariaDB被视为MySQL的一个社区驱动的分支,它保留了MySQL的许多特性和功能,同时引入了一些新的特性和改进。许多用户和组织选择使用MariaDB,因为它提供了更多的自由度和对未来许可证变更的保护。而对于一些需要特定Oracle支持或特定MySQL功能的用例,依然使用MySQL…

SpringBoot医疗用品销售网站源码

概述 一个基于SpringBoot框架开发的医疗用品销售网站完整项目源码&#xff0c;包含用户管理、商品展示、订单处理等完整电商功能。该项目采用SpringBoot框架开发&#xff0c;代码规范、结构清晰&#xff0c;非常适合二次开发或学习参考&#xff0c;帮助开发者快速搭建医疗用品…

使用CSS创建带三角形指示器的气泡框

在网页设计中&#xff0c;气泡框&#xff08;或工具提示&#xff09;是一种常见的UI元素&#xff0c;用于突出显示信息或提供额外说明。本文将介绍如何使用纯CSS创建一个简单的气泡框&#xff0c;并添加一个三角形指示器。 HTML结构 首先&#xff0c;我们有一个简单的HTML结…

Java面试题031:一文深入了解MySQL(3)

Java面试题029&#xff1a;一文深入了解MySQL&#xff08;1&#xff09; Java面试题030&#xff1a;一文深入了解MySQL&#xff08;2&#xff09; 1、MySQL多表查询 &#xff08;1&#xff09;内连接 inner join 返回两个表中完全匹配的行&#xff0c;即只保留两个表连接字段值…

springboot小区物业管理系统

目 录 第一章 绪 论 1.1背景及意义 1 1.2国内外研究概况 2 1.3 研究的内容 2 第二章 关键技术的研究 2.1 相关技术 3 2.2 Java技术 3 2.3 MySQL数据库 4 2.4 Tomcat介绍 4 2.5 Spring Boot框架 5 第三章 系统分析 3.1 系统设计目标 6 3.2 系统可行性分析 6 3.3 系统功能分析…

微信小程序云开发--环境共享

1、创建配置文件 // utils/cloudConfig.js // 云开发环境配置// 当前小程序配置 const currentConfig {env: "cloudbase-6goxxxxxxd6c75e0", // 当前小程序环境 IDappid: "wxdexxxxx5dbcf04", // 当前小程序 AppID };// 共享云开发环境配置 const shared…

SpringBoot+ShardingSphere-分库分表教程(一)

日常使用数据库的时候&#xff0c;更多的时间是在关心业务功能的实现&#xff0c;为了尽快完成新版本的发布上线&#xff0c;通常在项目初期不太会去在意数据库的压力和性能问题。在服务上线一段时间之后&#xff0c;就会发现当初设计存在着很多的不足&#xff0c;这都是项目研…

INA226 电流计 功率计电路图转PCB制作

上次发布了TI的INA226电路图&#xff0c;今天抽了点时间&#xff0c;把电路图生成了PCB。 帖出来&#xff0c;不足之处&#xff0c;请兄弟们留言指正。 没什么问题就可以去嘉立创白嫖了。^_^

Vcpkg 经典模式完整迁移方案

&#x1f680; 从零开始&#xff1a;高效使用 Vcpkg 安装 Qt WebEngine&#xff08;经典模式 缓存优化 性能释放&#xff09; &#x1f9e9; 背景简介 在使用 Vcpkg 安装 Qt 系列库时&#xff0c;特别是庞大的 qtwebengine 模块&#xff0c;编译量极大&#xff0c;耗时可达…