Table of Contents
1. MHA介绍
MHA目前在MySQL高可用方面是一个相对成熟的解决方案,是MySQL高可用环境下故障切换和主从提升的高可用软件。它能够在短时间内完成故障切换,并最大程度的保证数据的一致性来达到真正的高可用。
1.1 MHA软件组成
MHA包含两个部分:MHA Manager(管理节点)和MHA Node(数据节点)
- MHA Manager可以单独部署在一台独立的机器上来管理多个master-slave集群,也可以部署在一台slave节点上
- MHA Node运行在每台MySQL服务器上
- MHA Manager会定时探测集群中master节点,当检测到master节点出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave节点重新指向新的master
- MHA配合半同步复制使用可以最大限度的保证数据安全性
1.2 MHA工作原理
1.3 MHA工具
Manager工具:
masterha_check_ssh # 检查MHA的SSH配置状况,MHA强烈依赖ssh秘钥验证
masterha_check_repl # 检查MySQL复制状况
masterha_manager # MHA主程序
masterha_check_status # 检测当前MHA运行状态
masterha_master_monitor # 检测master是否宕机
masterha_master_switch # 手动控制故障转移
masterha_conf_host # 添加或删除配置的server信息
masterha_stop # MHA关闭工具
Node工具:
save_binary_logs # 保存和复制master的二进制日志
apply_diff_relay_logs # 识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog # 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs # 清除中继日志(不会阻塞SQL线程)
2. MySQL + MHA高可用
2.1 实验环境
node1:192.168.1.11 node节点
node2:192.168.1.12 node节点
node3:192.168.1.13 node节点
node4:192.168.1.14 manager节点
2.2 配置主从复制
一定要注意保证实验环境纯净~
2.2.1 修改配置文件
node1:
node2:
node3:
由于我们所有的节点都可能切换成master节点,因此配置文件中我们添加log_slave_updates工具。方便MHA完成主从切换,在主节点出现故障时,从节点升级为主节点。
2.2.2 安全初始化
node1:
- 查看临时密码
cat /var/log/mysqld.log | grep password
- 更改密码,创建复制用户并授权
alter user root@localhost identified by 'Du@961028'; # 更改密码
grant replication slave on *.* to dsd@'192.168.1.%' identified by 'Du@961028'; # 创建复制用户并授权
node2:
- 查看临时密码,并更改密码
- 在从节点更改主节点信息
- 开启主从复制,并查看主从复制状态
node3与node2操作一致,这里就不做赘余。
2.3 测试
- 主节点创建数据库
CREATE DATABASE test;
- node2和node3从节点查看数据库
没有问题。到这里, 我们的主从复制就已经配置完成了~
2.4 配置MHA
下载地址:
https://github.com/yoshinorim/mha4mysql-manager/releases
https://github.com/yoshinorim/mha4mysql-node/releases
https://centos.pkgs.org/
下载文件:(mysql MHA CentOS7相关依赖包和manager、node管理工具)
2.4.1 安装mha-node(所有节点)
2.4.2 安装mha-manager(管理节点)
2.4.3 管理节点配置免密登陆
- 生成密钥
- 配置免密
注:这里是所有节点之间都要互相免密
2.4.4 配置mha
node4管理节点:
- 建立mha工作目录并编辑配置文件
mkdir /etc/masterha
cd /etc/masterha/
vim mastermha.cnf
- 检测ssh的连通性
masterha_check_ssh --conf=/etc/masterha/masterha.cnf
- 检测权限
masterha_check_repl --conf=/etc/masterha/masterha.cnf
可以看到,错误提示告知我们没有权限去访问,那么我们就要对其进行授权
- node1授权
grant all on *.* to root@'192.168.1.%' identified by 'Du@961028';
- 再次检测权限
- 查看当前mha状态
masterha_check_status --conf=/etc/masterha/masterha.cnf
2.5 测试
2.5.1 手动切换
- 关闭node1的mysqld,在node4操作
masterha_master_switch --master_state=dead --conf=/etc/masterha/masterha.cnf --dead_master_host=node1 --dead_master_port=3306 --new_master_host=node2 --new_master_port=3306
提示node1已经dead,询问是否切换
询问是否将主节点从node1切换为node2
切换成功
- 在node3查看当前主节点
主节点已经切换成node2~实验成功
- 开启node1的mysqld,并设置为node2的从节点
2.5.2 自动切换
- node4后台监控
nohup masterha_manager --conf=/etc/masterha/masterha.cnf &>/dev/null &
- 删除手动切换生成的文件
rm -rf masterha.failover.complete
- 手动停止node2,并在node4进程查看
- 在node3查看切换状态
- 查看node1状态,很明显已经成功切换为主节点