Redis Cluster 与 Sentinel 笔记

发布于:2025-07-06 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

  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

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

总结

项目 Cluster Sentinel
高可用
自动切换
分布式扩展
实现机制 分片 + 主从 主从 + 哨兵
使用复杂度
客户端兼容性 特殊支持(支持 cluster 的客户端) 普通客户端即可

网站公告

今日签到

点亮在社区的每一天
去签到