- 集群是Redis提供的分布式数据库方案。
- 集群通过分片来进行数据共享,并提供复制和故障转移功能
1. 节点
一个节点可以视作一个端口号,多个节点组成集群
2. 槽指派
- 集群通过分片方式来保存数据库中的键值对:集群的整个数据库被分为16384(2^14)个槽,每个键都属于其中的一个。
- 当所有槽都有节点在处理时,集群才处于上线状态
3. 集群中执行命令
- 计算键属于哪个槽(&16383)
- 判断是否由当前节点处理
4. 重新分片
- 将任意已指派给某个节点的槽改派给另一个节点
- 可在线进行,集群不需要下线
5. 复制与故障转移
- 集群中的节点分为主节点和从节点
- 主节点用于处理槽,从节点用于复制某个主节点
- 主节点下线时,从节点替代
5.1故障检测
每个节点定期向其他节点发送PING消息,检测对方是否在线。
5.2 故障转移
- 已下线主节点的从节点里选一个节点作为新主节点
- 新主节点撤销旧主节点的所有槽指派,并将其都派给自己
- 广播PONG消息,通知其他主节点
5.3 新主节点选举
与选举领头Sentinel类似,都是基于Raft算法实现