面试题答案
一键面试- 故障检测
- 心跳检测机制:使用心跳检测工具,如MySQL的内置心跳机制或第三方工具(如MHA的心跳检测脚本),定时向每个分片节点发送心跳包。如果在一定时间内(如30秒)未收到响应,则判定该节点可能发生故障。
- 查询验证:定期执行简单的SQL查询(如
SELECT 1
),若查询超时或返回错误,则进一步确认节点故障。
- 数据一致性保障
- 主从复制:在高可用集群中,采用主从复制架构。正常情况下,主节点负责写操作,从节点复制主节点的数据。当主分片节点故障时,选择一个从节点提升为主节点。由于MySQL的主从复制基于二进制日志(binlog),从节点通过重放binlog来保持与主节点的数据一致性。
- 半同步复制:启用半同步复制,确保至少有一个从节点接收到并写入主节点的事务日志后,主节点才向客户端返回成功响应。这样在主节点故障时,提升的从节点数据与原主节点的一致性更高,减少数据丢失风险。
- 故障转移实现
- MHA(Master High Availability):
- 自动检测:MHA管理器持续监控所有节点的状态,当检测到某个分片主节点故障时,它会迅速做出反应。
- 选主策略:根据配置和节点状态,MHA会优先选择数据最新的从节点提升为主节点。例如,通过比较从节点的复制延迟和日志位点(relay log position)来确定最佳候选者。
- 切换操作:MHA通过调用SSH等工具,在新主节点上执行相关命令(如停止从复制线程、设置为主节点等),并通知其他从节点将复制源切换到新主节点。
- Orchestrator:
- 拓扑管理:Orchestrator维护整个集群的拓扑结构信息。当检测到故障节点时,它能根据预定义的规则和当前集群状态进行故障转移。
- 自动修复:Orchestrator可以自动执行故障节点的替换操作,包括将从节点提升为主节点,重新配置其他从节点的复制关系等。
- MHA(Master High Availability):
- 应用端感知
- 配置中心:应用程序通过配置中心获取数据库连接信息。在故障转移后,配置中心更新相应分片的连接地址(将原主节点地址更新为新主节点地址)。应用程序定期从配置中心拉取最新配置,这样可以在不重启应用的情况下,透明地使用新的数据库连接,对业务系统的影响降至最低。
- 负载均衡器:在应用与数据库之间使用负载均衡器(如HAProxy、Nginx等)。负载均衡器持续监控数据库节点的健康状态,当某个分片节点故障时,负载均衡器自动将流量从故障节点转移到其他正常节点。同时,在故障转移完成后,负载均衡器将新主节点纳入负载均衡池,确保应用端请求能够正确路由到新的数据库主节点,而应用无需感知数据库节点的变化。