简介
安装大意: MHA分为node和manager
- node安装在每个数据库实例机器上,不启动进程,只是包含如下几个脚本,failover时manager远程SSH调用的
save_binary_logs 保存和复制master的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs 清除中继日志(不会阻塞SQL线程)
- manager安装在另外机器上,也可以放在实例中其中一台数据库机器上,每个实例instance集群要启动一个进程,配置一个config文件的
主要负责远程monitor,远程failover
包含如下几个工具
masterha_check_ssh 检查MHA的SSH配置状况
masterha_check_repl 检查MySQL复制状况
masterha_manger 启动MHA
masterha_check_status 检测当前MHA运行状态
masterha_master_monitor 检测master是否宕机
masterha_master_switch 控制故障转移(自动或者手动)
masterha_conf_host 添加或删除配置的server信息
下载MHA包
分为两个,一个是node端的包,另一个是manager端
下载perl及其依赖
yum install perl-DBD-MySQL -y
yum install -b current perl-Module-Install 如果不安装这个包,在下面执行perl Makefile.PL时会报如下错误
安装node到所有数据库实例的机器
tar xvzf mha4mysql-node.tar.gz
cd mha4mysql-node
perl Makefile.PL
make && make install
如果出现make错误,执行下make clean, rm -f .* , 重新执行上面的两步
安装manager到manager机器
tar xvzf mha4mysql-manager.tar.gz
cd mha4mysql-manager
perl Makefile.PL
make && make install (dbconsole这台机器需要root才能执行,所以要sudo make sudo make install)
注: manager机器也要安装node包, make时会做检查
配置manager
创建MHA的工作目录,将下面文件复制到次路径,启动时需要指定此路径文件
mkdir /u01/masterha
cp mha4mysql-manager/samples/conf/app1.cnf /u01/zjk/mha4mysql-manager-master/workdir/conf
配置文件内容
[server default]
manager_workdir=/u01/zjk/mha4mysql-manager-master/workdir
manager_log=/u01/zjk/mha4mysql-manager-master/workdir/manager.log
master_binlog_dir=/u01/my3306/log
password=monitor
user=monitor
ping_interval=1
remote_workdir=/opt/TMHA2/mha4mysql-node-master
repl_password=slave
repl_user=slave
ssh_user=root
shutdown_script=""
log_level=debug
#master node
[server1]
hostname=11.136.105.70
port=3306
ssh_port=22
#slave node
[server2]
hostname=11.187.250.60
port=3306
ssh_port=22
#candidate_master=1
#slave node
[server3]
hostname=11.136.167.69
port=3306
ssh_port=22
测试manager
- 检查SSH:
- masterha_check_ssh –conf=/u01/zjk/mha4mysql-manager-master/workdir/conf/app1.cnf
- 检查复制环境
- masterha_check_repl –conf=/u01/zjk/mha4mysql-manager-master/workdir/conf/app1.cnf
- 检查MHA Manager的状态:
- masterha_check_status –conf=/u01/zjk/mha4mysql-manager-master/workdir/conf/app1.cnf
开启MHA Manager监控
nohup masterha_manager –conf=/u01/zjk/mha4mysql-manager-master/workdir/conf/app1.cnf –remove_dead_master_conf –ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
启动参数介绍: --remove_dead_master_conf 该参数代表当发生主从切换后,老的主库的ip将会从配置文件中移除。 --manger_log 日志存放位置 --ignore_last_failover 在缺省情况下,如果MHA检测到连续发生宕机,且两次宕机间隔不足8小时的话,则不会进行Failover,之所以这样限制是为了避免ping-pong效应。该参数代表忽略上次MHA触发切换产生的文件,默认情况下,MHA发生切换后会在日志目录,也就是上面我设置的/data产生app1.failover.complete文件,下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换,除非在第一次切换后收到删除该文件,为了方便,这里设置为--ignore_last_failover。
查看启动日志
- tail -n20 /u01/zjk/mha4mysql-manager-master/workdir/manager.log
- 关闭MHA Manage监控
- masterha_stop –conf=/u01/zjk/mha4mysql-manager-master/workdir/conf/app1.cnf
注意
MHA依赖relay log,需要把每个节点设置清楚方式为set global relay_log_purge=0
MHA在发生切换的过程中,从库的恢复过程中依赖于relay log的相关信息,所以这里要将relay log的自动清除设置为OFF,采用手动清除relay log的方式。在默认情况下,从服务器上的中继日志会在SQL线程执行完毕后被自动删除。但是在MHA环境中,这些中继日志在恢复其他从服务器时可能会被用到,因此需要禁用中继日志的自动删除功能。定期清除中继日志需要考虑到复制延时的问题。在ext3的文件系统下,删除大的文件需要一定的时间,会导致严重的复制延时。为了避免复制延时,需要暂时为中继日志创建硬链接,因为在linux系统中通过硬链接删除大文件速度会很快。(在mysql数据库中,删除大表时,通常也采用建立硬链接的方式)
MHA节点中包含了pure_relay_logs命令工具,它可以为中继日志创建硬链接,执行SET GLOBAL relay_log_purge=1,等待几秒钟以便SQL线程切换到新的中继日志,再执行SET GLOBAL relay_log_purge=0。
pure_relay_logs脚本参数如下所示:
--user mysql 用户名 --password mysql 密码 --port 端口号 --workdir 指定创建relay log的硬链接的位置,默认是/var/tmp,由于系统不同分区创建硬链接文件会失败,故需要执行硬链接具体位置,成功执行脚本后,硬链接的中继日志文件被删除 --disable_relay_log_purge 默认情况下,如果relay_log_purge=1,脚本会什么都不清理,自动退出,通过设定这个参数,当relay_log_purge=1的情况下会将relay_log_purge设置为0。清理relay log之后,最后将参数设置为OFF。
设置定期清理relay脚本(两台slave服务器) 添加到crontab定期执行
#!/bin/bash user=root passwd=123456 port=3306 log_dir='/data/masterha/log' work_dir='/data' purge='/usr/local/bin/purge_relay_logs' if [ ! -d $log_dir ] then mkdir $log_dir -p fi $purge --user=$user --password=$passwd --disable_relay_log_purge --port=$port --workdir=$work_dir >> $log_dir/purge_relay_logs.log 2>&1
MHA的核心功能是为了解决数据库集群的数据一致性,原则上不会去做其他故障切换的事情,其他额外功能(例如切换vip和改变主从结构什么的),是要通过第三方软件(例如keepalived)或者是脚本来实现的,要区分清楚,所以配置上是可以忽略警告来做的,因为不影响MHA核心功能,不是必须的.
- MHA每次故障切换完都会退出,原主库起来后还需要手动去补全数据和操作变成从库,然后从新开启MHA来使用