【Redis】Cluster集群
目录
- 1、背景
- 2、核心特性
- 【1】数据分片
- 【2】高可用
- 【3】去中心化
- 【4】客户端重定向
- 3、集群架构
- 【1】最小规模
- 【2】节点角色
- 【3】通信协议
- 4、数据分片与路由
- 【1】哈希槽分配
- 【2】客户端路由逻辑
- 5、故障恢复
- 6、适用场景
1、背景
Redis Cluster是Redis官方提供的分布式解决方案,用于实现数据分片和高可用性。
2、核心特性
【1】数据分片
采用哈希槽(Hash Slot)机制,将数据划分为16384个槽,每个节点负责一部分槽。数据通过CRC16算法计算出一个16位的值,再对16384取模计算所属槽位,实现均匀分布。
【2】高可用
每个主节点可以配置多个从节点,主节点故障时,从节点通过选举晋升为新主节点(基于Raft协议)
【3】去中心化
节点通过Gossip协议通信,无需依赖外部协调服务
【4】客户端重定向
客户端直接与任意及节点通信,若请求的键不属于当前节点,会返回MOVED或ASK错误,引导客户端重定向到正确节点
3、集群架构
【1】最小规模
1、至少需要3个主节点和3个从节点
【2】节点角色
1、主节点:处理读写请求,管理分配的哈希槽
2、从节点:复制主节点数据,故障时替换主节点
【3】通信协议
1、Gossip协议:节点间交换状态信息(如槽分配、节点存活)
2、PING/PONG消息:用于检测节点健康状态
4、数据分片与路由
【1】哈希槽分配
1、集群启动时,管理员需手动或通过工具(如redis-cli --cluster create)分配槽位
【2】客户端路由逻辑
1、若键所属槽位在当前节点,直接执行命令
2、若不在,且该槽的迁移未在进行中时,返回MOVED [slot] [target-node:port]错误,客户端需缓存槽与节点的映射关系
3、当集群正在执行数据迁移,且请求的键已被迁移到目标节点,但槽的归属尚未完全转移时,反会ASK [slot] [target-node:port]错误
5、故障恢复
1、主节点故障检测:其它节点通过心跳检测超时标记节点为PFAIL,超过半数主节点确认后标记为FAIL
2、从节点晋升:从节点发起选举,获取多数主节点投票后晋升为新主节点
3、网络分区处理:若分区导致少数派节点无法联系多数派,集群会停止写入(通过cluster-require-full-coverage配置控制)
6、适用场景
1、需要水平扩展读写性能的场景
2、对高可用性要求较高的服务
3、数据量超出单机内存容量时