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

Redis Cluster 与 Sentinel 笔记

目录

  1. Redis 集群(Cluster)概述

  2. Cluster 的工作原理

  3. Cluster 配置与部署

  4. Cluster 常见问题与限制

  5. Redis Sentinel(哨兵)机制概述

  6. Sentinel 的工作机制

  7. Sentinel 配置与部署

  8. Sentinel vs Cluster

  9. 总结


Redis 集群(Cluster)概述

Redis Cluster 是 Redis 提供的一种 分布式部署方案,用来在多个 Redis 实例之间分散数据,实现 高可用性横向扩展能力

核心特性

  • 数据自动分片(Sharding)
  • 无中心架构,所有节点互为平等
  • 内置故障转移机制
  • 支持主从复制

Cluster 的工作原理

节点结构

  • 主节点(Master):负责处理读写请求并保存部分数据槽。
  • 从节点(Slave):复制主节点数据,用于故障转移。
  • 一个集群至少需要 3 个主节点,推荐每个主节点配备一个从节点,即至少 6 个节点

分片机制(Slot)

  • Redis 集群总共定义了 16384 个槽(slots)
  • 每个主节点负责一部分 slot(例如 0-5460,5461-10922,10923-16383)。
  • 客户端根据 CRC16(key) mod 16384 计算键属于哪个 slot,自动路由到正确节点。

读写流程

  1. 客户端发送请求 → Redis 客户端库计算 slot → 发送到对应主节点。
  2. 如果请求发错了节点,返回 MOVEDASK 重定向。
  3. 从节点可以设置为 只读(readonly) 以分担主节点压力。

故障转移

  • 集群内部通过 Gossip 协议 相互探测。
  • 多个节点确认主节点不可用时,触发 failover。
  • 从节点被提升为主节点,重新分配 slots。

Cluster 配置与部署

示例配置(redis.conf)

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

创建集群命令

redis-cli --cluster create \127.0.0.1:7000 127.0.0.1:7001 \127.0.0.1:7002 127.0.0.1:7003 \127.0.0.1:7004 127.0.0.1:7005 \--cluster-replicas 1

Cluster 常见问题与限制

限制描述
不支持多 key 跨 slot 操作除非 key 属于相同 hash tag(例如 {user:1}.name
不支持事务(multi/exec)跨节点事务不被支持
部署复杂度较高运维和扩容需注意数据重分布

Redis Sentinel(哨兵机制)概述

Sentinel 是 Redis 的高可用解决方案,主要用于主从结构下的自动故障转移和系统监控。

Sentinel 提供以下功能:

  • 自动故障检测
  • 主从切换(Failover)
  • 通知机制(通过 API)
  • 动态配置更新

Sentinel 的工作机制

节点发现

  • 哨兵节点通过配置文件中指定的主节点地址,自动发现主从关系。
  • 多个 Sentinel 节点之间通过协议通信,形成分布式监控网络。

故障检测

  • 每个 Sentinel 定期向主从节点发送 PING

  • 判断标准:

    • 主观下线(sdown):单个 Sentinel 判断主节点不可达。
    • 客观下线(odown):多个 Sentinel 达成一致后认定故障。

主从切换(Failover)

  • 在主节点故障并确认 odown 后,进行如下步骤:

    1. 选择一个从节点为新的主节点。
    2. 其他从节点重新指向新的主节点。
    3. 通知所有客户端更新配置。

通知机制

  • Sentinel 支持发布订阅机制,可以通知外部系统故障或切换事件。
  • 也可以通过 Sentinel API 查询当前状态。

Sentinel 配置与部署

sentinel.conf 示例

port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

启动 Sentinel

redis-sentinel sentinel.conf

CLI 命令示例

redis-cli -p 26379 sentinel get-master-addr-by-name mymaster

Sentinel vs Cluster

特性SentinelCluster
数据分片❌ 不支持✅ 支持
主从架构✅ 支持✅ 支持
高可用✅ 自动故障转移✅ 自动故障转移
部署复杂度⭐ 简单⚠️ 较复杂
跨节点事务✅ 支持❌ 不支持
场景推荐小型部署,高可用大规模数据分布式

总结

项目ClusterSentinel
高可用
自动切换
分布式扩展
实现机制分片 + 主从主从 + 哨兵
使用复杂度
客户端兼容性特殊支持(支持 cluster 的客户端)普通客户端即可
http://www.dtcms.com/a/267118.html

相关文章:

  • 文本方式和二进制方式打开文件的不同
  • Flutter 使用http库获取网络数据的方法(一)
  • Excel 数据透视表不够用时,如何处理来自多个数据源的数据?
  • MAX3485在MCU芯片AS32S601-485通信外设中的应用
  • 线程的礼让和加入
  • 1004、最大连续1的个数 III
  • SpringBatch使用介绍
  • 任务调度器(Scheduler)实现逻辑
  • Java 创建对象过程 JVM 内存分配并发安全笔记
  • JVM与JMM
  • Mysql底层专题(四)索引优化实战一
  • DeepSeek与诡秘之主
  • 在SoC数据加解密验证中使用 Python 的 gmssl 库
  • 03_性能优化:让软件呼吸更顺畅
  • 计算机网络(网页显示过程,TCP三次握手,HTTP1.0,1.1,2.0,3.0,JWT cookie)
  • 【网络协议安全】任务12:二层物理和单臂路由及三层vlanif配置方法
  • HarmonyOS:创建ArkTS卡片
  • 从零开始开发纯血鸿蒙应用之探析仓颉语言与ArkTS的差异
  • Vuex身份认证
  • 《C++初阶之类和对象》【经典案例:日期类】
  • Java创建型模式---单例模式
  • WSL命令
  • C#每日学习日记
  • 3dmax烘焙插件3dmax法线贴图烘焙教程glb和gltf元宇宙灯光效果图烘焙烘焙光影贴图支持VR渲染器
  • AWS WebRTC:通过shell分析viewer端日志文件
  • 深入解析享元模式:通过共享技术高效支持大量细粒度对象
  • 【力扣 简单 C】70. 爬楼梯
  • 【鸿蒙】鸿蒙操作系统发展综述
  • 递归与循环
  • 深入理解Reactor调试模式:Hooks.onOperatorDebug() vs ReactorDebugAgent.init()