④ 数据库高可用:MHA 故障转移

对应第 125 ~ 127 讲 · Manager/Node 架构 · VIP 漂移 · 搭建与演练全流程

主库宕机 写服务中断 MHA Manager 探测 ping_interval=1 秒级 VIP 漂移 master_ip_failover 脚本 最优从库升主 candidate_master=1 其余从库改挂新主 全程对应用透明 MHA 是什么(125 讲) 故障场景决策(125 讲) 搭建 MHA(126 ~ 127 讲) MHA:Master High Availability Manager perl 脚本编写的 MySQL 高可用管理工具 两种节点 Manager:单独一台机器 · 探测整个集群状态 Node:每台 MySQL 机器都装 · 解析日志执行切换 典型部署:1 主 2 从 + 1 台 Manager = 4 台机器 从库宕机 影响不大 → 读流量全部切回主库 挂掉一台从库不至于引发事故 主库宕机 无法写入 → 必须自动把从库提升为主库 前提:主从数据一致(推荐半同步复制打底) 环境准备 4 台机器:1 主 2 从 + 1 台 Manager 所有机器互相 ssh 免密(perl 脚本要用) 安装 每台 MySQL 机器装 mha4mysql-node(perl-DBD-MySQL) Manager 机装 mha4mysql-manager + 一堆 perl 依赖包 配置 /etc/mha/mha.conf [server default]:账号密码 · 工作目录 · ping_interval=1 master_ip_failover / online_change 脚本(VIP 漂移) [serverN]:hostname · port · binlog 目录 candidate_master=1 指定可升主的从库 启动前自检 masterha_check_ssh --conf=/etc/mha/mha.conf masterha_check_repl --conf=/etc/mha/mha.conf 两个检查全部 OK 才算就绪 给主库加 VIP ip addr add xx.xx.xx.xx dev eth0 应用连 VIP —— 切换时 IP 跟着主库走,应用无感 启动与演练 nohup masterha_manager --conf=... & masterha_check_status 验证 · 停主库演练:从库自动拿 VIP 升主 图例 MHA 机制 搭建步骤 VIP 网络 验证 / 正常态 故障场景

MHA 核心概念

  • • 专门监控主库状态的高可用工具(perl)
  • • Manager 节点:独立部署,探测集群
  • • Node 节点:每台 MySQL 上,解析日志做切换
  • • 主库故障 → 提升最优从库 → 其他从库改挂新主

VIP 漂移:应用无感切换

  • • 应用永远连接 VIP,而不是主库真实 IP
  • • 故障时 master_ip_failover 脚本把 VIP 挂到新主
  • • master_ip_online_change 用于在线变更
  • • 原主库恢复后配置为从库指向新主

搭建检查清单

  • • 4 台机器(1 主 2 从 1 Manager)+ ssh 免密
  • • mha.conf:账号、目录、ping_interval、脚本路径
  • • masterha_check_ssh / check_repl 全 OK
  • • 主库配 VIP → 启动 manager → 停主库演练