MySQL Master High Availability (MHA) 是一个开源的高可用性解决方案,专为MySQL数据库设计,用于在主库故障时自动进行故障切换和数据恢复,以确保数据库服务的连续性和数据一致性。MHA由两部分构成:MHA Manager(管理节点)和MHA Node(数据库节点)。
1. 架构与组件
MHA架构:
-
MHA Manager:管理节点,负责监控主库状态、执行故障切换操作、管理从库的同步以及维护相关配置信息。通常部署在独立的服务器上。
-
MHA Node:数据库节点,包括主库和从库。每个节点上都需要安装MHA Node组件,以便与MHA Manager通信并执行相关指令。
关键组件:
-
Watchdog(可选):一个守护进程,用于监测主库的健康状况,当主库宕机时立即通知MHA Manager。
-
SSH:MHA Manager通过SSH无密码登录所有数据库节点,以执行远程命令和数据迁移。
-
Perl脚本:MHA的主要逻辑由一系列Perl脚本实现,包括监控、故障切换、数据恢复等核心功能。
2. 工作原理
正常运行:
-
监控:MHA Manager周期性地通过SSH连接到主库,检查其心跳信息或执行SQL查询以确认其健康状态。
-
日志复制监控:MHA Manager还监控从库与主库之间的复制延迟,确保数据同步的及时性。
故障检测:
-
主动检测:通过Watchdog或MHA Manager的定期检查,一旦发现主库无法响应或复制延迟超过阈值,即认为主库故障。
-
被动通知:数据库管理员或其他监控系统也可通过发送信号至MHA Manager,触发故障切换流程。
故障切换:
-
确定新主库:MHA Manager根据预定义的策略(如选择数据最同步的从库、指定优先级等)选择一个从库作为新的主库。
-
执行切换:
- 停止原主库的写入:通过更改VIP(虚拟IP)指向、通知应用改写连接等方式阻止对原主库的进一步写入。
- 提升新主库:在选定的从库上执行
FLUSH TABLES WITH READ LOCK;
锁定数据,然后执行STOP SLAVE;
停止复制,接着通过RESET MASTER;
清理复制信息,最后提升为新的主库。 - 数据同步:对于其他从库,通过
CHANGE MASTER TO
命令将复制源指向新主库,并启动复制以同步数据。 - 解锁新主库:解除新主库的数据锁定,使其可接受新的写入。
数据恢复(可选):
- 原主库恢复:原主库故障恢复后,可选择将其作为新主库的从库,通过
START SLAVE;
命令重新开始复制,以追赶上新主库的数据。
3. 特性与优势
-
自动故障检测与切换:MHA能够自动检测主库故障并执行切换操作,显著减少人工干预和恢复时间。
-
数据一致性保障:在切换过程中,MHA通过锁表、清理复制信息等手段确保新主库数据的一致性。
-
灵活的切换策略:用户可以根据实际需求配置切换策略,如选择最优从库、考虑地理位置等因素。
-
滚动升级与维护:支持在不停止服务的情况下进行主库的滚动升级或维护操作。
-
日志备份与点-in-time recovery:MHA Manager可以定期备份主库的二进制日志,并支持基于这些日志进行点-in-time恢复。
4. 部署与配置
-
安装MHA软件包:在MHA Manager节点和所有数据库节点上安装MHA及相关依赖。
-
配置SSH免密登录:设置MHA Manager能够无密码SSH访问所有数据库节点。
-
配置MHA Manager:编写
mhaanager.cnf
配置文件,包括主库信息、从库列表、切换策略等。 -
启动MHA Manager:启动MHA Manager服务,开始监控和管理MySQL集群。
5. 监控与管理
-
日志监控:查看MHA Manager和数据库节点的日志,了解系统运行状态和故障切换过程。
-
命令行管理:通过MHA Manager提供的命令行工具,执行手动切换、查看状态、测试切换等操作。
-
Web UI(可选):可选用MHA Monitor提供图形化界面,方便直观地监控和管理MHA集群。
总结一下吧:MySQL MHA通过MHA Manager和MHA Node的配合,利用SSH、Perl脚本及一系列监控机制,实现了对MySQL主从集群的自动故障检测、切换与数据恢复。它提供了灵活的切换策略、数据一致性保障以及易于管理和监控的特点,为MySQL数据库的高可用性提供了有力支持。