什么是 Redis Cluster?
Redis Cluster 是 Redis 官方提供的分布式集群方案,具备以下核心能力:
特性 | 说明 |
✅ 数据自动分片 | 使用 16384 个哈希槽(hash slots)分布数据 |
✅ 高可用 | 主节点宕机,从节点自动提升为主 |
✅ 去中心化 | 节点间通过 Gossip 协议通信,无中心节点 |
✅ 水平扩展 | 支持在线添加/删除节点(需 rehash) |
✅ 客户端直连 | 客户端可连接任意节点,自动重定向 |
Redis Cluster 核心原理
1️⃣ 数据分片:哈希槽(Hash Slot)
Redis Cluster 将整个键空间划分为 16384 个哈希槽(0 ~ 16383)。
- 每个 key 通过
CRC16(key) % 16384
计算出所属槽 - 每个主节点负责一部分槽(如 0-5500, 5501-11000, 11001-16383)
- 客户端根据 key 找到对应节点进行操作
# 示例:key = "user:1001"
CRC16("user:1001") % 16384 = 1234 → 由负责槽 1234 的主节点处理
2️⃣ 高可用:主从复制 + 故障转移
- 每个主节点(master)可配置一个或多个从节点(replica)
- 当主节点宕机,其从节点通过 Gossip 协议检测并发起选举
- 多数主节点投票通过后,从节点晋升为新主
- 客户端收到
-MOVED
重定向,自动连接新主节点
📌 无需哨兵(Sentinel):故障转移由集群内部自动完成!
3️⃣ 节点通信:Gossip 协议
- 所有节点之间通过 Gossip 协议交换状态信息(ping/pong)
- 每秒随机选择几个节点发送心跳
- 用于:故障检测、配置更新、节点发现
- 端口规则:客户端端口 + 10000(如 6379 → 集群通信端口 16379)
实战:部署三主三从 Redis Cluster
1. 准备 6 个 Redis 实例(端口 7000~7005)
创建配置文件 redis-7000.conf
(其他类似):
port 7000
daemonize yes
pidfile /var/run/redis_7000.pid
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
启动所有实例:
redis-server redis-7000.conf
redis-server redis-7001.conf
# ... 7002 ~ 7005
2. 创建集群(使用 redis-cli --cluster
)
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-replicas 1
表示每个主节点配 1 个从节点,自动分配角色。
3. 验证集群状态
redis-cli -p 7000 cluster info
redis-cli -p 7000 cluster nodes
输出应显示:
- 3 个 master 节点,3 个 replica 节点
- 所有槽已分配(
cluster_state:ok
)
Redis Cluster 是构建大规模、高可用 Redis 系统的终极方案。它通过去中心化的架构、自动分片与故障转移,解决了单机与主从模式的扩展性瓶颈。无论是架构师还是后端开发者,掌握 Redis Cluster 都是构建现代分布式系统的必备技能。