MySQL MHA 高可用方案
大约 11 分钟
MySQL MHA 高可用方案
今天来学习 MySQL 中非常经典的 MHA 高可用方案,简明扼要地讲解 MHA 是如何实现高可用及故障转移的。
MHA(Master High Availability)是由一位日本程序员开发的 MySQL 高可用方案。
- yoshinorim开发的 MySQL 高可用方案,采用 Perl 语言开发。
- MHA 是 MySQL 领域中使用最广泛、最成熟的高可用架构方案之一。
MHA 架构图解
下图展示了一个完整的 MHA 架构方案:
架构讲解
- 主从同步:MySQL 主服务器在处理数据后生成 binlog(日志),并将其发送给从属服务器。
- 从属服务器通过 binlog 重放来保持数据同步。
- 高可用问题:单纯的主从架构不具备高可用性和故障迁移能力。
- 如果主服务器挂掉,需要人工干预进行主从切换,导致业务中断。
MySQL 主从同步基础
MySQL 主从同步是基于 binlog 实现的:
- 主服务器:生成 binlog 记录操作。
- 从服务器:接受并重放 binlog。
- 问题:主从架构本身不具备高可用性,主服务器挂掉后无法自动切换。
MHA 角色与组件
MHA 在原有的主从架构上增加了以下角色和组件:
- VIP(虚拟IP):在应用和主服务器之间增加一个虚拟 IP,MHA 可以根据需要漂移 VIP。
- MHA Manager:管理者,负责指挥调度。
- MHA Node:每个节点上运行的组件,负责接收命令并执行自动化任务。
- Binlog Server:同步主服务器的 binlog,不对外提供数据服务。
工具与脚本:MHA 包含多个工具包和脚本,大部分由 MHA 自动执行:
- MHA Manager:包含管理者的工具和脚本。
- MHA Node:每个节点上部署的工具和脚本。
MHA 故障检测与转移过程
故障检测
- 前置检查:启动时检查配置文件和 GTID。
- 主节点检测:每三秒向主节点发送一个
SELECT 1
查询,连续三次失败则认为主节点有问题。 - 从节点验证:通知所有从属服务器尝试连接主服务器,若两个从属服务器都无法连接,则确认主服务器挂掉。
故障转移过程
- 保存现场:断开虚拟 IP 和主服务器的连接,停止主从同步。
- 抽取 binlog:从 Binlog Server 抽取最新的 binlog。
- 数据比对与同步:
- 从属服务器比对:确定最新的从属服务器,并将差异数据同步到其他从属服务器。
- 与主服务器比对:从 Binlog Server 获取的 binlog 与从属服务器的数据进行比对,确保数据完整一致。
- 提升新的主服务器:
- 指定主服务器:可以手动指定新的主服务器。
- 最新日志:选择日志最新的从属服务器。
- 实例列表顺序:按照实例列表顺序选择。
- 切换 VIP:将 VIP 指向新的主服务器,确保应用可以通过 VIP 访问新的主服务器。
恢复旧的主服务器
旧的主服务器恢复后会自动降级为从属节点,与新的主服务器同步数据。
MHA 的优缺点
优点
- 良好的兼容性,支持主流的 MySQL 版本。
- 自动化程度高,减少人工干预。
缺点
- VIP 方案:没有自带 VIP 实现方案,需要额外的脚本或工具。
- 从属节点监控:只关注主节点,从属节点的可用性不在监控范围内。
- 安全性问题:基于 SSH 进行远程登录,存在安全隐患。
- 负载均衡:不提供从属服务器的负载均衡功能。
总结
MHA 是目前传统企业应用及金融领域使用的主要高可用方案,尽管存在一些缺点,但其良好的兼容性和高效的自动化机制使其在 MySQL 高可用解决方案中占据重要地位。