MST

星途 面试题库

面试题:MySQL 组复制中的故障检测与恢复机制

详细说明 MySQL 组复制在节点发生故障时,是如何进行故障检测以及恢复整个复制组正常运行的。
24.7万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

故障检测

  1. 心跳检测
    • MySQL 组复制使用组通信协议(如 Paxos 相关协议的变体)来实现节点间的心跳检测。每个节点定期向组内其他节点发送心跳消息。
    • 例如,节点 A 定时向节点 B、C 等发送心跳,这些心跳消息包含节点自身的状态等信息。
  2. 成员关系监测
    • 组内节点维护着一个成员关系视图,记录组内所有节点的状态。当一个节点没有按时收到某个节点的心跳时,它会将该节点标记为疑似故障节点。
    • 比如,节点 B 未在规定时间内收到节点 D 的心跳,B 就会在本地视图中将 D 标记为疑似故障。
  3. 共识机制判定
    • 当有节点标记某个节点疑似故障后,组内会通过共识算法(如 Raft 类似机制)来确定该节点是否真的故障。
    • 各个节点会交换关于疑似故障节点的信息,经过投票等过程,如果多数节点都认为该节点故障,那么就判定该节点为故障节点,并将其从成员关系视图中移除。

恢复复制组正常运行

  1. 重新选举主节点(如果必要)
    • 如果故障节点是主节点,组内会触发主节点选举流程。
    • 剩余节点根据一定的选举规则(如节点优先级、日志同步进度等)进行选举。例如,节点 E 和 F 竞争主节点,E 的优先级高且日志同步更完整,那么 E 会被选举为新的主节点。
  2. 数据同步
    • 故障节点恢复后(如果恢复),新的主节点会协调将其状态同步到与组内其他节点一致。
    • 这可能涉及从主节点拉取缺失的二进制日志并应用,使故障恢复节点的数据与组内其他节点保持一致。例如,故障恢复的节点 G 从新主节点 E 拉取在其故障期间产生的日志并回放,以达到数据同步。
  3. 重新加入组
    • 故障恢复节点在完成数据同步后,会尝试重新加入复制组。
    • 它向组内节点发送加入请求,组内节点通过共识机制决定是否允许其加入。如果通过,该节点就重新成为复制组的一员,复制组恢复到正常运行状态。