一、介绍
MHA(Master High Availability)是MySQL高可用解决方案,用perl语言开发的管理工具,轮询探测MySQL主结点可用性,发现故障,自动转移故障,选一从结点提升为新的主结点,接替旧的主结继续对外提供服务,此过程对应用来说是透明的。在MHA中,MySQL主从高可用本质不变,仍是利用binlog发送到从结点,再relaylog重放实现数据同步,它是MySQL主从外挂,在故障情况下,主从手工切换工作自动化。
MHA支持MySQL一主多从,但MySQL结点至少3个,也只支持一次故障转移,在故障转移后MHA管理进程退出,如要重新将旧主结点纳入MySQL集群,只能手工操作,不能自动完成。
注意:MHA上次更新在2018年3月,距今时间很长了。
二、架构

MHA分为管理结点和数据结点两部分,MHA管理结点到MySQL结点,网络要连通,可以与MySQL主机共用,也可以分开,可能是一个也可以是多个,MHA数据结点必须与MySQL共用主机。
三、搭建前置准备
3.1 环境准备
OS: CentOS 7.9
DB: MySQL 8.0.23
MHA: v0.58
3.2 主机规划
主机 | IP | 数据库身份 | MHA类型 |
node1 | 172.17.0.2 | 主 | 数据结点 |
node2 | 172.17.0.3 | 从1 | 数据结点 |
node3 | 172.17.0.4 | 从2 | 管理结点 |
四、搭建
实现MHA管理mysql一主多从,先搭建一主多从,再搭建MHA;
4.1 主从搭建
4.1.1 主my.cnf配置
在my.cnf中[mysqld]下方新增配置
server_id=1
log_bin=master-binlog
relay-log = relay-log4.1.2 从1 my.cnf配置
在my.cnf中[mysqld]下方新增配置
server_id=2
log-bin = master-log
log-slave-updates=1
relay-log = relay-log4.1.3 从2 my.cnf配置
在my.cnf中[mysqld]下方新增配置
server_id=3
log_bin=master-binlog
log-slave-updates=1
relay-log = relay-log4.1.4 启动数据库
systemctl start mysqld4.1.5 MHA管理账号创建
CREATE USER 'mha'@'%' IDENTIFIED BY 'Node-2022';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'%';4.1.6 主从复制账号创建
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Node-123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';4.1.7 建立一主两从复制
主
show master status;从1、从2
根据在主结点查询出来的值,调整MASTER_LOG_FILE='master-binlog.00002'和MASTER_LOG_POS=196,再执行下方内容;
CHANGE MASTER TO MASTER_HOST='node1', MASTER_USER='repl', MASTER_PASSWORD='Node-123456', MASTER_LOG_FILE='master-binlog.00002', MASTER_LOG_POS=196;
start slave;
show slave status;4.2 主机免密互信
主、从1和从2
ssh-keygen
for i in node1 node2 node3; do ssh-copy-id -i /root/.ssh/id_rsa.pub %i;done4.3 MHA部署
4.3.1 部署数据结点
主1、从1和从2
yum install -y perl-DBD-MySQL
yum -y install https:///yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm4.3.2 部署管理结点
从2
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes epel-release
yum -y install https:///yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm4.3.3 编写配置文件
从2
创建/etc/mha/目录,再在文件mysql-mha.conf 写入如下内容
[server default]
user=mha
password=Node-2022
manager_workdir=/home/mha
manager_log=/home/mha/manager.log
remote_workdir=/home/mha
ssh_user=root
repl_user=repl
repl_password=Node-123456
ping_interval=1
master_binlog_dir=/var/lib/mysql
ssh_port=22
[server1]
hostname=node1
candidate_master=1
[server2]
hostname=node2
candidate_master=1
[server3]
hostname=node3
candidate_master=1
no_master=14.3.4 验证主机免密互信
从2
masterha_check_ssh --conf=/etc/mha/mysql-mha.conf4.3.5 验证MySQL复制
从2
masterha_check_repl --conf=/etc/mha/mysql-mha.conf4.3.6 启动MHA
从2
nohup masterha_manager --conf=/etc/mha/mysql-mha.conf &4.3.7 检查MHA状态
从2
masterha_check_status --conf=/etc/mha/mysql-mha.conf4.4 故障验证
4.4.1 终止主结点MySQL进程
主
pkill mysqld4.4.2 检查MHA日志
从2
less /home/mha/manager.log4.4.3 检查从1和从2结点复制状态
从1、从2
show slave status\G
















