目录
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,自动路由到正确节点。
读写流程
- 客户端发送请求 → Redis 客户端库计算 slot → 发送到对应主节点。
- 如果请求发错了节点,返回
MOVED
或ASK
重定向。 - 从节点可以设置为 只读(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 后,进行如下步骤:
- 选择一个从节点为新的主节点。
- 其他从节点重新指向新的主节点。
- 通知所有客户端更新配置。
通知机制
- 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 的客户端) | 普通客户端即可 |