四十三、搭建MHA高可用

实验环境

三台服务器
10.154.0.111 主 node
10.154.0.112 从1 node
10.154.0.113 从2 manager

搭建MySQL MHA

1、下载MHA软件
这里使用郭老师提供的MHA-2019-6.28.zip软件包,点我下载
0.58版本下载
0.56版本下载
xshell6绿色版下载

2、上传解压安装

#三台服务器都做
$ yum install perl-DBD-MySQL -y
$ unzip MHA-2019-6.28.zip
$ rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

这里我上传使用的xftp6上传的
MHA是由perl语言编写的,需要安装perl连接mysql的驱动依赖包

3、在主库创建MHA账号

mysql> grant all privileges on *.* to mha@'10.154.0.%' identified by 'mha';
mysql> select user,host from mysql.user;

需要在主库从库都验证一下是否同步了mha用户

4、Manager软件安装

#在manager节点上执行,我这里的manager节点是10.154.0.113
$ yum install -y 
perl-Config-Tiny 
epel-release 
perl-Log-Dispatch 
perl-Parallel-ForkManager 
perl-Time-HiRes

$ rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

5、编辑manager节点配置文件

#创建配置文件目录
$ mkdir -p /etc/mha

#创建日志目录
$ mkdir -p /var/log/mha/app1

#编辑mha配置文件
cat > /etc/mha/app1.cnf <<EOF
[server default]
manager_log=/var/log/mha/app1/manager        
manager_workdir=/var/log/mha/app1            
master_binlog_dir=/data/binlog     #主库binlog日志路径 
user=mha                                   
password=mha                               
ping_interval=2  #每隔2s检测master是否存活,默认检测4次
repl_password=123
repl_user=repl
ssh_user=root                            
[server1]                                   
hostname=10.154.0.111
port=3306                                  
[server2]            
hostname=10.154.0.112
port=3306
[server3]
hostname=10.154.0.113
port=3306
EOF

MHA可以同时管理多套主从复制,每套主从可以通过配置文件区分,我这里写的app1,如果是生产环境,可以根据项目来命名,如/etc/mha/taobao.cnf,注意改了配置文件名相应目录名也要更改。

6、状态检查

#在mannager上做检测ssh跟主从是否正常
$ masterha_check_ssh  --conf=/etc/mha/app1.cnf 
$ masterha_check_repl  --conf=/etc/mha/app1.cnf 

这里检查主从状态出错,错误如下
四十三、搭建MHA高可用
这个故障耗了不少时间,结果发现是开启防火墙导致的,关闭三台主机的防火墙跟selinux即可。

其他错误可参考:错误汇总

7、开启MHA,在manager上做

$ nohup masterha_manager 
--conf=/etc/mha/app1.cnf 
--remove_dead_master_conf 
--ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

8、查看MHA状态

$ masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:22974) is running(0:PING_OK), master:10.154.0.111

其他配置

这个实验我没有配置软链接跟ssh免密登录,因为这三台主机是我克隆的,所以SSH密钥对是一致的。
不过在这里还是写下ssh免密登录配置,跟软链接配置吧,以后可能会用上。

1、设置软链接
这里给出两种方案,建议使用第二种,安全系数较高

# 第一种方案
ln -s /usr/local/mysql/bin/mysql /usr/bin/ 
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/ 

# 第二种方案
ln -s /usr/local/mysql/bin/mysql /usr/sbin/ 
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/ 

下面说说这两个目录的用处
/bin:普通用户可以使用的命令文件,以及后期安装的一些软件的运行脚本。
/sbin:超级用户使用的命令文件。

设置软链接是因为mysql程序跟mysqlbinlog程序需要被MHA脚本调用,而MHA脚本默认安装在/usr/bin中,所以我倾向于使用第一种方案。
为什么我不用设置软链接也能成功?因为我把mysql写入了全局变量中了。

参考资料:
MHA高可用搭建
B站课程MHA高可用搭建 P144

2、配置SSH免密登录

#在10.154.0.111上执行
$ ssh-keygen
$ cd /root/.ssh
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.154.0.112 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.154.0.113

#验证,成功执行date命令显示系统时间表示配置成功
$ ssh 10.154.0.111 date
Sat Apr 17 14:14:16 CST 2021
$ ssh 10.154.0.112 date
Sat Apr 17 14:14:16 CST 2021
$ ssh 10.154.0.113 date
Sat Apr 17 14:14:16 CST 2021

学习来自:B站课程:搭建MHA高可用 P144,《MySQL入门与提高实践》第18章