面试题答案
一键面试Redis哨兵机制故障转移实现过程
- 监控:哨兵节点会定期向主节点和从节点发送PING命令,检查它们是否在线。
- 主观下线:如果某个哨兵节点在一定时间内(可配置)没有收到某个节点的有效回复,就会将该节点标记为“主观下线”,即认为该节点可能出现故障。
- 客观下线:当多数哨兵节点(超过配置的quorum数量)都认为主节点主观下线时,会将主节点标记为“客观下线”,确认主节点已发生故障。
故障转移过程中哨兵节点关键步骤
- 选举:当主节点被标记为客观下线后,哨兵节点之间会进行选举,选出一个哨兵节点来执行故障转移操作。选举过程使用Raft算法,通过投票选出领导者哨兵。
- 选择新主节点:领导者哨兵从当前的从节点中选择一个作为新的主节点。选择依据包括:从节点的优先级(可配置)、复制偏移量(复制越完整越优先)、运行ID(越小越优先)。
- 故障转移:领导者哨兵向新选的从节点发送
SLAVEOF NO ONE
命令,将其提升为新的主节点。然后向其他从节点发送SLAVEOF <new_master_ip> <new_master_port>
命令,让它们成为新主节点的从节点。同时,更新自己配置文件中关于主节点的信息,并通过发布/订阅机制通知其他哨兵节点更新配置。
确保新主节点正常工作且对业务影响最小化的方法
- 快速检测:通过合理配置哨兵节点的监控和下线判定时间,尽可能快速地发现主节点故障,减少业务无主节点可用的时间。
- 数据一致性:选择复制偏移量最大的从节点作为新主节点,保证新主节点的数据尽可能完整,减少数据丢失。
- 通知应用:在故障转移完成后,通过配置变更通知机制(如发布/订阅、动态配置更新等),尽快通知业务应用新主节点的地址和端口,让应用能够快速切换连接,减少业务中断时间。
- 配置持久化:确保哨兵节点和Redis节点的配置持久化,以便在重启后能快速恢复到故障转移后的状态,避免重复故障转移操作对业务造成额外影响。