当前位置: 首页 > news >正文

(Redis)主从哨兵模式与集群模式

Redis 是一款高性能的内存数据库,广泛应用于缓存、消息队列和计数场景。为了保证 Redis 在高并发和大数据量下的可用性,官方提供了两套主要机制:主从 + 哨兵机制集群模式。本文将详细讲解它们的原理、特点及区别。


一、Redis 主从节点 + 哨兵机制(Sentinel)

1️⃣ 主从节点概念

  • Master(主节点)

    • 提供写操作,也可提供读操作。

    • 负责向从节点同步数据。

  • Slave(从节点)

    • 复制主节点的数据。

    • 一般用于读操作或备份,提高可用性和性能。


2️⃣ 哨兵机制概念

Redis Sentinel 是 Redis 官方提供的高可用解决方案,主要功能:

  1. 监控(Monitoring)

    • 哨兵周期性检查主从节点是否正常。

  2. 通知(Notification)

    • 当节点故障时,通知管理员或客户端。

  3. 自动故障转移(Automatic failover)

    • 主节点宕机时,自动将从节点升级为主节点,并让其他从节点指向新主节点。

  4. 配置提供者(Configuration provider)

    • 客户端可通过哨兵获取当前主节点信息,避免连接失效。


3️⃣ 哨兵工作流程

  1. 监控

    • 哨兵定期向主从节点发送 PING 命令。

    • 超时未响应 → 标记为 SDOWN(主观下线)

    • 多数哨兵认为不可用 → ODOWN(客观下线)

  2. 选举

    • 主节点 ODOWN 后,多哨兵投票选出 Leader。

    • Leader 负责选择从节点升级为新主节点。

    • 其他从节点指向新主节点。

  3. 通知

    • 节点状态变化或故障转移完成 → 哨兵通过事件或 API 通知客户端。

    • 客户端通过 SENTINEL get-master-addr-by-name <name> 获取新主节点地址。


4️⃣ 注意事项

  • 哨兵节点至少 3 个以上,避免单点故障。

  • 客户端必须支持哨兵模式。

  • 只适用于单主多从架构,不支持数据分片。


二、Redis 集群模式(Cluster)

1️⃣ 集群概念

Redis Cluster 用于水平扩展 + 高可用,特点:

  • 多个 master 节点,每个负责一部分数据。

  • 每个 master 可有从节点备份。

  • 自动故障转移,不依赖哨兵。

  • 数据分片:16384 个 hash slot 分布到各个 master 节点。


2️⃣ 数据分片机制

  1. 计算 slot

    slot = CRC16(key) % 16384
    

  2. 分配 slot

    • 每个 master 节点负责一部分 slot。

    • 例如:

      
      master1: slot 0-5460 master2: slot 5461-10922 master3: slot 10923-16383
  3. 客户端访问

    • 根据 key 的 slot 找到对应 master 节点。

    • 如果访问错误节点 → 返回 MOVED 错误 → 客户端重定向。


3️⃣ 集群高可用

  • Master 宕机 → 从节点通过投票升级为新 master。

  • 集群继续提供服务,保证高可用。

  • 多 master + 多从节点 → 支持读写分离和水平扩展。


4️⃣ 注意事项

  • 客户端必须支持 Cluster 协议(如 Jedis Cluster、Lettuce)。

  • 跨槽操作有限,涉及多个 key 的命令必须在同一 hash slot。

  • 数据迁移需要注意性能影响。


三、哨兵 vs 集群对比

特性哨兵模式集群模式
数据分片❌ 不分片✅ 分片(hash slot)
主节点数量1多个
从节点
自动故障转移
水平扩展
客户端要求普通客户端支持 Cluster 协议

总结

  • 哨兵 + 主从:适合单主多从场景,保证主节点故障时快速切换。

  • 集群模式:适合数据量大、高并发场景,支持水平扩展和自动容错。

  • 两者是独立方案,一般不会同时使用。

http://www.dtcms.com/a/348659.html

相关文章:

  • 【机器学习】7 Linear regression
  • VScode设置鼠标滚轮调节代码
  • 嵌入式第三十六天(网络编程(TCP))
  • springboot项目搭建步骤
  • 【Flink】部署模式
  • Maven项目中settings.xml终极优化指南
  • Excel 表格 - 乘法与除法处理(保留两位小数四舍五入实现、保留两位小数截断实现、添加百分号)
  • 单片机外设(七)RTC时间获取
  • 深入解析Java NIO多路复用原理与性能优化实践指南
  • 重置MySQL数据库的密码指南(Windows/Linux全适配)
  • 基于springboot的理商管理平台设计与实现、java/vue/mvc
  • 得物25年春招-安卓部分笔试题1
  • Linux camera 驱动流程介绍(rgb: ov02k10)(chatgpt version)
  • AlmaLinux 上 Python 3.6 切换到 Python 3.11
  • EP02:【DA】数据分析的价值创造与应用流程
  • 基于SpringBoot的新能源汽车租赁管理系统【2026最新】
  • 【Linux文件系统】Linux文件系统与设备驱动
  • MySQL数据库精研之旅第十一期:打造高效联合查询的实战宝典(二)
  • python中的filter函数
  • 学习做动画1.简易行走
  • 人工智能之数学基础:离散型随机变量
  • 源滚滚React消息通知框架v1.0.2使用教程
  • 管道符在渗透测试与网络安全中的全面应用指南
  • sim2real!so-arm100 机械臂 Mujoco 仿真与实机控制
  • HbuilderX下载与安装
  • python多线程操作,threading库详解(附实例演示)
  • No static resource报错
  • Linux 系统管理核心概念与常用命令速查
  • Baumer高防护相机如何通过Tiny-YOLO单类模型实现人体跌倒检测与跟踪(C#代码UI界面版)
  • [Windows] PDF-XChange Editor Plus官方便携版