一、集群搭建步骤
1. 环境准备
- 至少 6 个节点(3 主 + 3 从),建议分布式部署
- 所有节点安装 Redis 7(需支持集群模式)
- 开放节点间通信端口(默认
6379
+ 集群总线端口16379
)
2. 节点配置 每个节点的 redis.conf
配置:
conf
port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
3. 启动所有节点
bash
redis-server /path/to/redis.conf
4. 创建集群 使用 redis-cli
自动分配槽位:
bash
redis-cli --cluster create \
192.168.1.101:6379 \
192.168.1.102:6379 \
192.168.1.103:6379 \
192.168.1.104:6379 \
192.168.1.105:6379 \
192.168.1.106:6379 \
--cluster-replicas 1
参数说明:
--cluster-replicas 1
表示每个主节点配 1 个从节点
5. 验证集群状态
bash
redis-cli --cluster check 192.168.1.101:6379
输出应包含主从关系和槽位分配信息。
二、核心原理分析
1. 数据分片机制
- 将数据划分为 16384 个槽位(Slot)
- Key 通过哈希算法定位槽位
- 每个主节点负责部分槽位(如 Node1 负责 0-5500 槽)
2. 请求路由过程
graph LR
A[客户端] --> B{Key 计算 slot}
B -->|slot 属于当前节点| C[直接处理]
B -->|slot 不属于当前节点| D[返回 MOVED 重定向]
D --> E[客户端重连至正确节点]
3. 高可用实现
- 主从复制:每个主节点有 1-N 个从节点,数据异步复制
- 故障转移 :
- 节点间通过 Gossip 协议检测故障
- 从节点发起选举(Raft 算法)
- 新主节点接管槽位并广播更新
4. 集群总线
- 专用 TCP 端口(主端口 + 10000)用于:
- 节点间心跳检测
- 配置信息传播
- 故障转移协商
三、关键注意事项
-
槽位覆盖:必须保证所有 16384 个槽位被分配,否则集群不可用
-
跨槽操作 :不支持多 Key 跨槽事务(需用 Hash Tag 绑定相同 slot)
bash# 使用 {} 强制相同 slot SET user:{1000}.name "Alice" SET user:{1000}.age 30
-
扩容流程 :
- 添加新节点:
redis-cli --cluster add-node new_ip:port exist_ip:port
- 迁移槽位:
redis-cli --cluster reshard exist_ip:port
- 添加新节点:
性能建议:集群节点数不超过 1000,单个分片数据量控制在 20GB 以内
通过上述架构,Redis 集群实现了线性扩展(每增加节点提升约 100K QPS)和故障自动恢复能力,适用于高并发分布式场景。