散列插槽#
多个master平分哈希槽
3.1 Moved 重定向#
客户端给一个Redis实例发送数据读写操作时,如果计算出来的槽不是在该节点上,这时候它会返回MOVED重定向错误,MOVED重定向错误中,会将哈希槽所在的新实例的IP和port端口带回去。这就是Redis Cluster的MOVED重定向机制。
3.2 ASK 重定向#
Ask重定向一般发生于集群伸缩的时候。集群伸缩会导致槽迁移,当我们去源节点访问时,此时数据已经可能已经迁移到了目标节点
Gossip协议#
- meet消息:通知新节点加入。消息发送者通知接收者加入到当前集群,meet消息通信正常完成后,接收节点会加入到集群中并进行周期性的ping、pong消息交换。
- ping消息:节点每秒会向集群中其他节点发送 ping 消息,消息中带有自己已知的两个节点的地址、槽、状态信息、最后一次通信时间等
- pong消息:当接收到ping、meet消息时,作为响应消息回复给发送方确认消息正常通信。消息中同样带有自己已知的两个节点信息。
- fail消息:当节点判定集群内另一个节点下线时,会向集群内广播一个fail消息,其他节点接收到fail消息之后把对应节点更新为下线状态。
故障转移#
Redis 分片集群(Redis Cluster)的故障转移(failover)机制,核心目标是在主节点(master)失效时,自动将对应的从节点(slave / replica)提升为新的主节点,从而保证集群可用性。 主观下线 客观下线
故障恢复
- 资格检查:检查从节点是否具备替换故障主节点的条件。
- 准备选举时间:资格检查通过后,更新触发故障选举时间。
- 发起选举:到了故障选举时间,进行选举。
- 选举投票:只有持有槽的主节点才有票,从节点收集到足够的选票(大于一半),触发替换主节点操
总结 是什么: Redis 集群将整个 key 空间分为 16384 个哈希槽(编号从 0 到 16383)。每个键根据其哈希值被映射到其中一个哈希槽中。Redis 使用 CRC16 算法计算键的哈希值,然后对 16384 取模,得到对应的哈希槽编号。
数据怎么分布: 集群中的每个节点负责管理一定范围的哈希槽。例如,节点 A 可能负责管理哈希槽 0 到 5460,节点 B 负责管理哈希槽 5461 到 10922,节点 C 负责管理哈希槽 10923 到 16383。这样,键被分配到不同的节点上,从而实现数据的分布式存储。
请求怎么处理: 当客户端请求访问一个键时,Redis 会计算该键的哈希槽编号,并将请求转发到负责该哈希槽的节点。如果客户端直接连接到错误的节点,该节点会返回 MOVED 响应,告知客户端应将请求重定向到正确的节点。
增减节点如何处理: 在集群扩容或缩容的过程中,Redis 允许将哈希槽从一个节点迁移到另一个节点,以重新平衡数据。这种操作通常在后台执行,以减少对正常操作的影响。
Reply by Email