1. 简介
MHA(Master High Availability)是一个高效的开源MySQL高可用性解决方案。由日本开发者yoshinorim(前DeNA员工,现在Facebook)创建,MHA支持MySQL的主从复制架构,自动化主节点故障转移。当主节点发生故障,MHA能迅速将最新数据的从节点升级为新主节点。这个过程中,MHA从其他从节点获取额外信息,确保数据一致性。MHA还能在线切换主节点,按需调整主从节点关系。它已被证明是一个成熟的MySQL高可用方案,能在30秒内完成故障切换,并最大限度地保证数据一致性。值得一提的是,淘宝也在开发一个类似的产品TMHA,目前支持一主一从架构。
2. MHA服务
MHA服务包括两种角色:MHA Manager(管理节点)和MHA Node(数据节点)。
- MHA Manager:通常部署在一台独立的机器上,管理多个master/slave集群,每个集群称为一个application。它负责整个集群的管理和协调。
- MHA Node:安装在每台MySQL服务器(无论是master、slave还是manager)上。它负责监控、解析日志和加快故障恢复的过程。
工具与功能
MHA提供了一系列工具,分布在Manager节点和Node节点上:
- Manager节点工具:
masterha_check_ssh
:检测SSH环境。masterha_check_repl
:检测MySQL复制环境。masterha_manager
:MHA的主服务程序。masterha_check_status
:探测MHA运行状态。masterha_master_monitor
:监测MySQL主节点可用性。masterha_master_switch
:切换主节点的工具。masterha_conf_host
:添加或删除配置节点。masterha_stop
:关闭MHA服务的工具。
- Node节点工具:(这些通常由Manager的脚本触发,无需手动操作)
save_binary_logs
:保存并复制主节点的二进制日志。apply_diff_relay_logs
:识别并应用差异中继日志事件。purge_relay_logs
:清除中继日志。
- 自定义扩展:
secondary_check_script
:通过多网络路由检测主节点可用性。master_ip_failover_script
:更新应用程序使用的master IP。report_script
:发送报告。init_conf_load_script
:加载初始配置参数。master_ip_online_change_script
:更新主节点IP地址。
工作原理
MHA的工作原理可以概括为以下几个步骤:
- 从故障的master节点保存二进制日志事件(binlog events)。
- 识别拥有最新更新的slave节点。
- 将差异的中继日志(relay log)应用到其他slave节点。
- 应用从master节点保存的二进制日志事件。
- 提升一个slave节点为新master。
- 使其他slave节点开始复制新master的数据。
3.MySQL Replication 环境的实验配置
3.1 准备实验 MySQL Replication 环境
3.1.1 相关配置
在本实验中,我们将设置一个包含四个节点的 MySQL Replication 环境,运行于 CentOS 7.3 系统。MHA (Master High Availability) 对 MySQL 复制环境有特定的配置需求,例如:
- 所有节点必须开启二进制日志(bin-log)和中继日志(relay-log)。
- 从节点(Slave)需设置为只读模式(read-only)。
- 关闭中继日志自动清理功能(relay_log_purge)。
节点配置如下:
- Manager (192.168.37.111): 作为控制器,负责监控和管理。
- Master (192.168.37.122): 数据库主服务器。配置了 bin-log 和 relay-log,关闭了 relay_log_purge。
- Slave1 和 Slave2 (192.168.37.133 和 192.168.37.144): 数据库从服务器。与 Master 相同的日志配置。
为方便操作,我们在所有节点的 /etc/hosts
文件中添加了对应的域名解析配置。
3.1.2 主节点(Master)的初始配置
对于主节点 Master 的数据库配置,我们进行以下设置:
- 设置
server-id
为 1,以保证集群中节点 ID 的唯一性。 - 开启二进制日志(log-bin)和中继日志(relay-log)。
- 关闭名称解析(skip_name_resolve,非必须)。
完成配置后,重启 MariaDB 服务以应用更改。
3.1.3 从节点(Slave)的配置
对于两个从节点 Slave,我们进行以下操作:
- 设置唯一的
server-id
(2 和 3)。 - 开启中继日志(relay-log)和二进制日志(log-bin)。
- 启用只读模式(read_only)和日志更新(log_slave_updates)。
- 根据需要设置中继日志清理(relay_log_purge)。
- 可选关闭名称解析(skip_name_resolve)。
每次配置更改后,重启 MariaDB 服务以应用设置。
3.1.4 配置一主多从复制架构
在 Master 节点上,我们配置了权限以允许 Slave 连接和复制。具体命令包括授予复制权限和显示 Master 状态。
在每个 Slave 节点上,我们设置了连接到 Master 的参数,启动了复制服务,并检查了复制状态。
以上步骤完成了 MySQL Replication 环境的基本配置。
3.2 安装配置MHA
3.2.1 在Master节点进行授权
- 目标:在所有MySQL节点中授权一个具有管理权限的用户,以便在本地网络中远程访问其他节点。
- 操作:在Master节点运行SQL语句授权。
- 示例命令:
grant all on *.* to 'mhaadmin'@'192.168.%.%' identified by 'mhapass';
- 示例命令:
3.2.2 准备SSH互通环境
- 目的:在MHA集群中,各节点需要通过SSH互信通信来实现远程控制和数据管理。
- 步骤:
- 在Manager节点生成密钥对。
- 设置Manager节点可以远程连接本地主机。
- 将私钥文件和
authorized_keys
文件复制给所有其他节点。 - 在所有节点上进行上述操作。
- 验证所有节点的SSH无密码互通。
3.2.3 安装MHA包
- 操作:在Manager节点和其他节点上安装MHA包。
- 包:
- 所有节点:
mha4mysql-node-0.56-0.el6.norch.rpm
- Manager节点额外安装:
mha4mysql-manager-0.56-0.el6.noarch.rpm
- 所有节点:
- 安装方法:使用
rz
命令上传包,然后使用yum
进行安装。
- 包:
3.2.4 初始化MHA,进行配置
- 配置文件:Manager节点为每个监控的master/slave集群提供专用配置文件。
- 文件位置:全局配置文件位于
/etc/masterha_default.cnf
,或者通过application的配置提供。
3.2.5 定义MHA管理配置文件
- 步骤:在MySQL主节点上为MHA创建管理用户,以便于后续使用。
- 配置:创建
/etc/mha_master
目录并编写mha.cnf
文件,配置包括管理用户、密码、工作目录等。
3.2.6 对四个节点进行检测
- SSH互信通信检测:在Manager机器上运行命令检测SSH连接。
- MySQL复制集群连接配置检测:
- 使用
masterha_check_repl
命令检查。 - 如有错误,可能需在master节点上创建从节点账号。
- 再次运行检测命令以验证配置。
- 使用
总结
此文档详细介绍了MHA的安装配置过程,包括授权、SSH互通设置、MHA包安装、配置文件定义和系统检测。这些步骤确保了MHA集群的正确安装和高效运行。
3.3 启动 MHA
在 manager 节点上执行以下命令来启动 MHA:
nohup masterha_manager -conf=/etc/mha_master/mha.cnf &> /etc/mha_master/manager.log &
启动成功后,检查 master 节点的状态:
masterha_check_status -conf=/etc/mha_master/mha.cnf
如果服务正常运行,将显示 mha (pid:7598) is running(0:PING_OK)
。要停止 MHA,使用:
masterha_stop -conf=/etc/mha_master/mha.cnf
3.4 测试 MHA 故障转移
- 模拟主节点崩溃:在 master 节点关闭 mariadb 服务。
killall -9 mysqld mysqld_safe rm -rf /var/lib/mysql/*
- 查看 manager 节点日志:
日志显示 manager 检测到节点故障,并自动将 192.168.37.133 提升为主节点。tail -200 /etc/mha_master/manager.log
3.5 修复复制集群
- 准备新的 MySQL 节点:基于 master 节点的备份恢复数据,配置为新的 master 的从节点。
- 备份和数据恢复:在新的 master 节点进行备份,将数据恢复到新节点。
- 配置主从关系:设置新的主节点和从节点,检查主从状态。
3.6 再次检查操作
- 使用
masterha_check_repl
检查复制状态。 - 如果无误,重新启动 manager 并查看状态:
masterha_manager -conf=/etc/mha_master/mha.cnf > /etc/mha_master/manager.log 2>&1 & masterha_check_status -conf=/etc/mha_master/mha.cnf
3.7 故障转换恢复注意事项
- 备份和手动提升:在从节点上做备份,并将主节点手动提升为从节点。
- 配置文件修改:自动转换后,可能需要手动修复主节点并修改配置文件。
- 重新运行检测命令:手动修复后,再次运行检测命令以确保恢复成功。
以上步骤详细介绍了如何启动和管理 MHA,以及在出现问题时的故障排查和修复流程。