跳至主要內容

MySQL MHA 高可用方案

Hirsuntech大约 11 分钟

MySQL MHA 高可用方案

今天来学习 MySQL 中非常经典的 MHA 高可用方案,简明扼要地讲解 MHA 是如何实现高可用及故障转移的。

MHA(Master High Availability)是由一位日本程序员开发的 MySQL 高可用方案。

  • yoshinorim开发的 MySQL 高可用方案,采用 Perl 语言开发。
  • MHA 是 MySQL 领域中使用最广泛、最成熟的高可用架构方案之一。

MHA 架构图解

下图展示了一个完整的 MHA 架构方案:

1734966534182.png
1734966534182.png

架构讲解

  1. 主从同步:MySQL 主服务器在处理数据后生成 binlog(日志),并将其发送给从属服务器。
    • 从属服务器通过 binlog 重放来保持数据同步。
  2. 高可用问题单纯的主从架构不具备高可用性和故障迁移能力。
    • 如果主服务器挂掉,需要人工干预进行主从切换,导致业务中断。

MySQL 主从同步基础

MySQL 主从同步是基于 binlog 实现的:

  1. 主服务器:生成 binlog 记录操作。
  2. 从服务器:接受并重放 binlog。
  3. 问题:主从架构本身不具备高可用性,主服务器挂掉后无法自动切换。

MHA 角色与组件

MHA 在原有的主从架构上增加了以下角色和组件:

  1. VIP(虚拟IP):在应用和主服务器之间增加一个虚拟 IP,MHA 可以根据需要漂移 VIP。
  2. MHA Manager:管理者,负责指挥调度。
  3. MHA Node:每个节点上运行的组件,负责接收命令并执行自动化任务。
  4. Binlog Server:同步主服务器的 binlog,不对外提供数据服务。

工具与脚本:MHA 包含多个工具包和脚本,大部分由 MHA 自动执行:

  • MHA Manager:包含管理者的工具和脚本。
  • MHA Node:每个节点上部署的工具和脚本。

MHA 故障检测与转移过程

1734966708827.png

故障检测

  1. 前置检查:启动时检查配置文件和 GTID。
  2. 主节点检测:每三秒向主节点发送一个 SELECT 1 查询,连续三次失败则认为主节点有问题。
  3. 从节点验证:通知所有从属服务器尝试连接主服务器,若两个从属服务器都无法连接,则确认主服务器挂掉。

故障转移过程

1734966877087.png
1734966877087.png
  1. 保存现场:断开虚拟 IP 和主服务器的连接,停止主从同步。
  2. 抽取 binlog:从 Binlog Server 抽取最新的 binlog。
  3. 数据比对与同步
    • 从属服务器比对:确定最新的从属服务器,并将差异数据同步到其他从属服务器。
    • 与主服务器比对:从 Binlog Server 获取的 binlog 与从属服务器的数据进行比对,确保数据完整一致。
  4. 提升新的主服务器
    • 指定主服务器:可以手动指定新的主服务器。
    • 最新日志:选择日志最新的从属服务器。
    • 实例列表顺序:按照实例列表顺序选择。
  5. 切换 VIP:将 VIP 指向新的主服务器,确保应用可以通过 VIP 访问新的主服务器。

恢复旧的主服务器

旧的主服务器恢复后会自动降级为从属节点,与新的主服务器同步数据。

MHA 的优缺点

优点

  • 良好的兼容性,支持主流的 MySQL 版本。
  • 自动化程度高,减少人工干预。

缺点

  1. VIP 方案:没有自带 VIP 实现方案,需要额外的脚本或工具。
  2. 从属节点监控:只关注主节点,从属节点的可用性不在监控范围内。
  3. 安全性问题:基于 SSH 进行远程登录,存在安全隐患。
  4. 负载均衡:不提供从属服务器的负载均衡功能。

总结

MHA 是目前传统企业应用及金融领域使用的主要高可用方案,尽管存在一些缺点,但其良好的兼容性和高效的自动化机制使其在 MySQL 高可用解决方案中占据重要地位。