面试题答案
一键面试1. 同步机制
- 主从复制:采用主从复制机制,主节点负责处理写操作并将数据同步给从节点。主节点在创建RDB文件时,从节点会通过复制机制获取主节点的RDB文件。这样可以保证各个节点的数据在一定程度上的一致性。在主节点执行
BGSAVE
命令生成RDB文件时,会fork一个子进程进行持久化操作,而主进程继续处理客户端请求,保证了高效性。从节点定期向主节点发送REPLCONF ACK
命令来确认复制的进度。 - 集群节点间数据同步:对于集群模式下节点间数据同步,使用Redis Cluster的Gossip协议。节点通过Gossip协议交换彼此的状态信息,包括节点是否正在进行RDB持久化等状态。当一个节点完成RDB文件创建后,可以通过Gossip协议通知其他节点,以便其他节点做出相应处理(如更新本地元数据等)。
2. 数据校验
- CRC16校验:RDB文件本身包含CRC16校验和。在从节点获取主节点的RDB文件后,会计算RDB文件的CRC16校验和,并与文件中自带的校验和进行对比。如果两者一致,则认为数据在传输过程中没有发生错误,保证了数据的完整性。
- 数据一致性校验:除了RDB文件本身的校验,还可以定期在各个节点上对部分数据进行一致性检查。例如,随机选择一些键值对,对比主节点和从节点上对应键值对的数据。可以采用哈希算法计算数据的哈希值进行对比,若哈希值相同则认为数据一致。
3. 处理节点故障
- 故障检测:使用Redis Cluster的Gossip协议来检测节点故障。每个节点会定期向其他节点发送ping消息,若一段时间内没有收到某个节点的pong回复,则标记该节点为疑似下线(PFAIL)。当半数以上的主节点都标记某个节点为PFAIL时,会将该节点标记为已下线(FAIL)。
- 故障恢复:对于从节点故障,主节点可以重新选择一个从节点来接替故障从节点的任务。对于主节点故障,Redis Cluster会从其从节点中选举出一个新的主节点。选举过程基于Raft算法的变体,从节点向其他主节点发送选举请求,获得半数以上主节点投票的从节点将成为新的主节点。新主节点会继续处理客户端请求,并将数据同步给其他从节点,保证集群的正常运行。同时,当故障节点恢复后,会自动加入集群并重新进行数据同步。