MySQL MHA 部署说明

本文说明 mha.yml 的支持边界和基础使用方式。

1. 支持边界

  • 当前仅按 CentOS 7 / Red Hat 7 环境维护
  • 目标架构:一主多从 + MHA Manager
  • 适用版本:MySQL 5.7

mha.yml 属于传统高可用方案。对于新建集群,优先建议使用 MGR 或 InnoDB Cluster。

192.168.161.* 是 dbbot 默认三节点回归网段,不等同于传统 MHA 专项环境。若要验证 mha.yml,请单独准备 CentOS 7Red Hat 7,并使用 MySQL 5.7

2. inventory 与角色

mha.yml 仍然使用 [dbbot_mysql] 主机组,实际角色通过变量区分:

[dbbot_mysql]
192.0.2.131 ansible_user=root ansible_ssh_pass="'密码'"
192.0.2.132 ansible_user=root ansible_ssh_pass="'密码'"
192.0.2.133 ansible_user=root ansible_ssh_pass="'密码'"

3. 关键变量

编辑 mysql_ansible/playbooks/common_config.yml

mysql_version: "5.7.44"
mysql_port: 3306
fcs_allow_dbbot_default_passwd: true

说明:

  • mha.yml 只支持 MySQL 5.7,不能沿用默认的 MySQL 9.7.x 配置。
  • fcs_allow_dbbot_default_passwd: true 仅适合临时实验环境。如果继续使用 dbbot 公开默认密码,必须显式开启;生产环境应改成自定义密码并保持该开关为 false

编辑 mysql_ansible/playbooks/vars/var_mha.yml

master_ip: 192.0.2.131
slave_ips:
  - 192.0.2.132
  - 192.0.2.133
manager_ip: 192.0.2.133
vip: 192.0.2.130
vip_netmask: "32"
net_work_interface: ens33
mha_secondary_check_script: ""

说明:

  • manager_ip 不能与 master_ip 相同
  • manager_ip 应放在从库节点上
  • vipvip_netmasknet_work_interface 需要与实际网络环境一致
  • ens33 只是示例网卡名。执行 VIP 相关剧本前请先用 ip route get <网关地址>ip -o -4 addr show 确认真实网卡;CentOS 7 KVM 测试环境中常见网卡名也可能是 eth0
  • mha_secondary_check_script 默认为空,表示使用传统 MHA 默认行为。生产环境建议按网络拓扑配置多路径探测命令,降低 manager 单路径误判风险。

4. 执行入口

cd /usr/local/dbbot/mysql_ansible/playbooks
ansible-playbook mha.yml

执行过程中按提示输入 confirm 后继续。

非交互执行请显式追加确认变量:

python3 /usr/local/dbbot/portable-ansible/ansible-playbook mha.yml -e dbbot_confirmation_input=confirm

如果命令行同时临时覆盖布尔变量,请使用 JSON extra-vars,避免 key=true 被解析为字符串:

python3 /usr/local/dbbot/portable-ansible/ansible-playbook mha.yml \
  -e dbbot_confirmation_input=confirm \
  -e '{"fcs_allow_dbbot_default_passwd": true}'

5. 卸载

mha_unsafe_uninstall.yml 会先停止传统 MHA manager、删除配置的 VIP 和 MHA 运行文件,再按当前 mysql_port 清理 MySQL 实例数据、日志和运行目录:

cd /usr/local/dbbot/mysql_ansible/playbooks
ansible-playbook mha_unsafe_uninstall.yml

执行过程中按提示输入 confirm。如需在非交互场景执行,请追加 -e dbbot_confirmation_input=confirm

默认不会删除 MHA RPM 包。如确需删除 mha4mysql-manager / mha4mysql-node RPM,可追加 -e '{"mha_uninstall_remove_packages": true}'

6. 注意事项

  • mha.yml 当前文档只覆盖 CentOS 7Red Hat 7 使用前提。
  • 不满足 CentOS 7 / Red Hat 7 与 MySQL 5.7 条件的三节点回归环境会被 mha.yml 前置校验拦截,属于预期行为。
  • 如果你在其他发行版上使用,需要先自行验证 Perl 依赖和 MHA RPM 兼容性。
  • 默认不配置 secondary_check_script。生产环境应结合网络拓扑补充 MHA 二次探测配置。
  • 失败后如需重跑,建议先确认 MHA Manager 配置、VIP 状态和 MySQL 实例状态,再决定是否清理残留文件。