MySQL高可用架构:MHA

MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。 MHA 是由日本人 yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的 MySQL 高可用方案。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。目前淘宝也正在开发相似产品 TMHA, 目前已支持一主一从。

一、MHA的组成

(一)MHA中的角色

MHA 服务有两种角色, MHA Manager(管理节点)和 MHA Node(数据节点):

    Node 节点(执行层,含 Master/Slave)

Node 节点是 MySQL 数据存储与复制的载体,同时提供 MHA 切换所需的数据修复、binlog 管理工具,核心工具及功能如下:

  • MHA Manager:通常单独部署在一台独立机器上管理多个 master/slave 集群(组),每个master/slave 集群称作一个application,用来管理统筹整个集群。

  • MHA Node:运行在每台 MySQL 服务器上(master/slave/manager),它通过监控具备解析和清理 logs 功能的脚本来加快故障转移。主要是接收管理节点所发出指令的代理,代理需要运行在每一个 mysql 节点上。简单讲node就是用来收集从节点服务器上所生成的bin-log。对比打算提升为新的主节点之上的从节点的是否拥有并完成操作,如果没有发给新主节点在本地应用后提升为主节点。

    (二)MHA提供的工具

    MHA(Master High Availability)是 MySQL 高可用解决方案,通过 Manager 节点(管理节点)和 Node 节点(数据节点,含 Master、Slave)协同工作,实现 MySQL 主从集群的故障检测、自动切换与数据一致性保障,两者依赖不同工具完成核心任务,具体如下:

    Manager 节点(控制中心)

    Manager 节点是 MHA 的调度核心,负责监控集群、检测故障、触发切换,核心工具及功能如下:

  • masterha_manager:MHA 主进程,是 Manager 节点的 “心脏”。持续监控 Master/Slave 存活状态(通过 SSH 心跳 + MySQL 连接)、主从复制延迟,发现 Master 故障后自动触发切换流程,同时将监控日志输出到指定路径(如 /var/log/mha)。
  • masterha_check_ssh:部署前必执行工具,检查 Manager 与所有 Node 节点的 SSH 免密登录连通性。只有确保 Manager 能无密码访问所有 Node,后续切换时才能远程操作 Node 节点,避免 SSH 问题导致切换失败。
  • masterha_check_repl:检查 MySQL 主从复制健康状态,包括复制链路是否通畅、Slave 延迟是否过大、binlog 一致性等。可用于部署前验证复制正常性,也可在日常维护中排查复制异常(如 Slave 报错)。
  • masterha_master_switch:手动触发主从切换,支持 “故障切换”(Master 宕机后指定新 Master)和 “在线切换”(Master 正常时主动切换角色,如主节点升级)两种模式。
  • masterha_conf_host:动态修改 MHA 配置文件,支持在线添加 / 删除 Slave 节点、更新复制参数,无需停止 masterha_manager 进程,适配集群动态扩容 / 缩容场景。
  • masterha_stop:停止 Manager 节点的 masterha_manager 监控进程,多用于集群维护(如重启 MySQL)时临时停止监控,避免误触发切换。
  • save_binary_logs:Master 故障时,在 Master 节点(或其备份)上保存未传输的 binlog。若 Master 宕机前有 binlog 未同步到 Slave,此工具可通过 SSH 提取剩余 binlog,后续用于 Slave 数据补全,避免数据丢失。
  • apply_diff_relay_logs:在 Slave 节点修复数据差异。切换后需确保所有 Slave 数据一致,此工具会对比 Slave 中继日志与 Master 剩余 binlog,自动补全数据差异,保障新 Master 与 Slave 数据同步。
  • filter_mysqlbinlog:过滤 MySQL binlog 中的无效语句(如 CREATE DATABASEDROP TABLE 等)。在数据修复过程中排除无需同步的操作,避免 Slave 执行无效语句报错。
  • purge_relay_logs:清理 Slave 节点的中继日志(relay log)。按配置自动保留指定时间 / 大小的中继日志,兼顾数据安全性(避免误删有用日志)和磁盘利用率(防止日志占满磁盘)。

二、MHA的工作原理

  • 从宕机崩溃的master保存二进制日志事件(binlog events);

  • 识别含有最新更新的 slave ;

  • 应用差异的中继日志(relay log) 到其他 slave ;

  • 应用从 master 保存的二进制日志事件(binlog events);

  • 提升一个 slave 为新 master ;

  • 使用其他的 slave 连接新的 master 进行复制。

三、部署MHA

(一)准备实验环境

  • 三台主机:master、slave1、slave2

  • 操作系统:CentOS

  • 配置主机名(/etc/hosts)

  • 配置免密码登录

  • 每台主机安装MySQL     

(二)搭建主从环境

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值