MHA的工作原理

MHA(Master HA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了自动故障转移功能。MHA在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点,而且MHA还提供了master节点的在线切换功能,即按需切换master/slave节点。
MHA服务有两种角色:管理节点MHA Manager和数据节点MHA Node。管理节点MHA Manager可以单独部署在一台独立的机器上,管理多个master-slave集群;也可以部署在一台slave节点上。MHA Manager会定时探测集群中的master节点,当master出现故障时,Manager会自动将具有最新数据的slave提升为新的master,然后将其它的slave重新指向新的master,整个故障转移过程对应用程序完全透明。数据节点MHA Node运行在主从集群的每一台MySQL服务器上,用来接收管理节点MHA Manager发出的指令。
MySQL+MHA高可用集群的搭建
集群环境准备
1、使用三台MySQL8.0搭建一主二从主从复制集群,并增加一台CentOS7服务器作为MHA Manager。配置如下:
- MHA:MHA管理节点,IP地址为192.168.238.60。
- Master:主服务器,IP地址为192.168.238.61。
- Slave1:从服务器,IP地址为192.168.238.62。
- Slave2:从服务器,IP地址为192.168.238.63。
2、因为任何一台从服务器都有可能成为Master主服务器,所以需要在Slave1和Slave2上创建用于日志复制的账号。
2.1、创建用于日志复制的用户。

2.2、给创建的用户赋予日志复制权限。

2.3、使用flush命令刷新用户权限。

3、在Master主服务器上创建供MHA监控MySQL状态使用的账号,从服务器会自动同步创建此账号。
3.1、创建用于状态监控的用户。

3.2、给创建的用户赋予所有权限。

3.3、使用flush命令刷新用户权限。

4、在包括MHA管理节点在内的所有服务器上安装mha4mysql-node。
4.1、安装epel源。

4.2、安装依赖包。

4.3、解压压缩包。

4.4、进入解压目录,进行编译与安装。

4.5、安装完毕,查看/usr/local/bin下生成的命令。

5、在MHA管理节点上安装mha4mysql-manager。
5.1、解压压缩包。

5.2、进入解压目录,进行编译与安装。

5.3、安装完毕,查看/usr/local/bin下生成的命令。

6、修改MHA管理节点故障自动切换脚本。
6.1、将脚本master_ip_failover拷入/usr/local/bin。

6.2、修改脚本文件master_ip_failover,增加图中红框内的内容,配置项含义如下:
- $vip:集群的虚拟IP。
- $brdc:虚拟IP的广播地址。
- $ifdev:虚拟IP绑定的网卡。
- $ifdev:虚拟IP绑定的网卡。
- $key:虚拟网卡的序号。
- $ssh_start_vip:开启虚拟网卡的命令。
- $ssh_stop_vip:关闭虚拟网卡的命令。

7、配置MHA管理节点。
7.1、创建目录/etc/mha并将压缩包中示例项目的配置文件拷入其中。

7.2、修改配置文件,主要配置项如下:
- user/password:监控主从集群状态的账号。
- repl_user/repl_password:主从复制账号。
- secondary_check_script:二次检查的脚本命令。
- [server1]/[server2]/[server3]:主从复制集群的节点定义。

8、在所有节点上配置SSH无密码登录。
8.1、在所有节点上生成SSH密钥用于远程登录。

8.2、在MHA管理节点上配置到其它节点的免密登录。

8.3、在master主节点上配置到slave1、slave2从节点的免密登录。

8.4、在slave1从节点上配置到master主节点和slave2从节点的免密登录。

8.5、在slave2从节点上配置到master主节点和slave1从节点的免密登录。

9、在主从复制集群的Master主节点上开启虚拟IP。
9.1、创建虚拟IP。

9.2、查看虚拟IP。

10、在MHA管理节点上测试集群。
10.1、测试SSH的连通性,若测试结果最后为“All SSH connection tests passed successfully.”即表示连接成功。

10.2、测试主从复制集群,若测试结果最后为“MySQL Replication Health is OK.”即表示集群状态良好。

11、在MHA管理节点上启动MHA。

集群的测试
1、通过虚拟IP登录MySQL。

2、关闭Master节点并查看日志,日志显示Master节点已切换。

3、再次通过虚拟IP登录MySQL,主从集群仍能正常使用。查看新的Master节点IP可见虚拟IP已漂移至新Master节点。
