一、介绍

MHA(Master High Availability)是MySQL高可用解决方案,用perl语言开发的管理工具,轮询探测MySQL主结点可用性,发现故障,自动转移故障,选一从结点提升为新的主结点,接替旧的主结继续对外提供服务,此过程对应用来说是透明的。在MHA中,MySQL主从高可用本质不变,仍是利用binlog发送到从结点,再relaylog重放实现数据同步,它是MySQL主从外挂,在故障情况下,主从手工切换工作自动化。

MHA支持MySQL一主多从,但MySQL结点至少3个,也只支持一次故障转移,在故障转移后MHA管理进程退出,如要重新将旧主结点纳入MySQL集群,只能手工操作,不能自动完成。

注意:MHA上次更新在2018年3月,距今时间很长了。

二、架构

MySQL8可以用到几个核 mysql8 mha_MySQL

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-log

4.1.2 从1 my.cnf配置

在my.cnf中[mysqld]下方新增配置

server_id=2
log-bin = master-log
log-slave-updates=1
relay-log = relay-log

4.1.3 从2 my.cnf配置

在my.cnf中[mysqld]下方新增配置

server_id=3
log_bin=master-binlog 
log-slave-updates=1 
relay-log = relay-log

4.1.4 启动数据库

systemctl start mysqld

4.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;done

4.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.rpm

4.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.rpm

4.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=1

4.3.4 验证主机免密互信

从2

masterha_check_ssh --conf=/etc/mha/mysql-mha.conf

4.3.5 验证MySQL复制

从2

masterha_check_repl --conf=/etc/mha/mysql-mha.conf

4.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.conf

4.4 故障验证

4.4.1 终止主结点MySQL进程

pkill mysqld

4.4.2 检查MHA日志

从2

less /home/mha/manager.log

4.4.3 检查从1和从2结点复制状态

从1、从2

show slave status\G