请阐述 Redis 集群的工作机制,包括数据分片、节点通信和故障转移等核心部分。
考察说明
考查对 Redis 集群整体架构和核心机制的理解。
回答思路
- 【回答框架 1】Redis 集群通过分片实现数据分布,采用哈希槽(hash slot)机制,整个键空间被划分为 16384 个槽,每个节点负责一部分槽。键通过 CRC16 计算后对 16384 取模,决定其归属的槽。
- 【回答框架 2】节点间通过 Gossip 协议进行通信,交换状态信息,包括节点列表、槽分配和故障信息。客户端可以连接到任意节点,当访问的键不在该节点时,会返回 MOVED 错误,客户端根据返回的地址重定向。
- 【回答框架 3】集群支持故障转移,当主节点不可达时,从节点会通过选举提升为主节点。故障检测基于节点间持续的 PING/PONG 消息,当多数节点认为某个主节点失效时,会触发从节点选举。
- 【回答框架 4】集群的高可用性依赖于副本机制,每个主节点可以有多个从节点。从节点负责复制主节点的数据,并在主节点故障时承担其职责。
- 【关键点 1】数据分片通过哈希槽实现,共 16384 个槽。
- 【关键点 2】节点通信使用 Gossip 协议,客户端通过 MOVED 重定向。
- 【关键点 3】故障转移由从节点选举产生新主节点。
- 【关键点 4】集群不保证强一致性,网络分区时可能丢失数据。
- 【关键点 5】集群支持在线扩容和缩容,通过槽迁移完成。
- 【易错点 1】误以为 Redis 集群是一致性哈希,实际是哈希槽。
- 【易错点 2】忽略客户端重定向机制,认为节点会转发请求。
- 【易错点 3】认为集群事务支持多键操作,实际上多键操作仅在槽相同且使用 hash tag 时可行。