搭建MHA高可用的前提:
注:相关脚本已经上传到服务器上
①已经搭建好1主2从的主从复制关系
②MySQL数据库版本是v5.6之后,支持GTID并已经开启
3.1、安装mha node:
注意:在此之前,记得先删除所有节点的relay-log日志清除命令
#临时关闭
set global relay_log_purge=0;
#永久关闭
vi /etc/my.cnf
relay_log_purge=0 //很重要!!
依赖包perl-DBD-MySQL ,并在三个节点都安装node软件 yum -y install perl-DBD-MySQL rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
3.2、主库中创建mha管理用户 (由于是主从关系,主库创建好了,从库也会自动创建) grant all privileges on *.* to mha@'192.168.137.%' identified by 'mha';
3.3、配置软连接 ln -s /application/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog ln -s /application/mysql/bin/mysql /usr/bin/mysql
3.4、部署manger节点(建议在从节点db03) wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
3.5、安装 manager软件
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
3.6、创建Manager必须目录与配置文件
mkdir -p /etc/mha
mkdir -p /var/log/mha/app1 ----》可以管理多套主从复制
创建配置文件 (不需要的配置不要留着,注释没用,切换后会重写)
vim /etc/mha/app1.cnf -----》serverdefault可以独立
[server default]
manager_log=/var/log/mha/app1/manager
manager_workdir=/var/log/mha/app1
master_binlog_dir=/data/binlog
user=mha
password=mha
ping_interval=2
repl_password=123
repl_user=repl
ssh_user=root
[server1] hostname=192.168.137.142 port=3306
[server2] hostname=192.168.137.143 port=3306
[server3] hostname=192.168.137.144 port=3306
3.7、配置互信(所有节点)
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1
ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.137.142 ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.137.143 ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.137.144
3.8、检测互信(manager结点上)
masterha_check_ssh --conf=/etc/mha/app1.cnf
3.9、检测主从 masterha_check_repl --conf=/etc/mha/app1.cnf
3.10、启动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 & 3.11、使用MHA自带脚本实现IP FailOver(vip 漂移,应用透明) 配置步骤 上传准备好的/usr/local/bin/master_ip_failover //脚本必须上传到改目录下,切记!! chmod +x master_ip_failover dos2unix /usr/local/bin/master_ip_failover //可以把文件内容中中文符号去掉
vim /etc/mha/app1.cnf master_ip_failover_script=/usr/local/bin/master_ip_failover //添加此内容
重启mha masterha_stop --conf=/etc/mha/app1.cnf 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 &
手工在主库上绑定vip,注意一定要和配置文件中的ethN一致,我的是ens33:1(1是key指定的值) 注意:这一步是手动在主库上添加,切记!! ifconfig ens33:1 192.168.137.145/24
切换测试: 停主库,看vip是否漂移
故障演练:
1、宕掉db01主库 2、tail -f /var/log/mha/app1/manager 观察日志变化 3、恢复主库运行,重新将db01加入到主从复制关系中(该命令在上面的manager日志中看到的) [root@db01 /]# /etc/init.d/mysqld start CHANGE MASTER TO MASTER_HOST='192.168.137.143', MASTER_PORT=3306, MASTER_AUTO_POSITION=1, MASTER_USER='repl', MASTER_PASSWORD='123'; #恢复后,故障的结点需要启动slave主从 start slave; show slave status\G;
4、将配置文件中加入修改的故障节点 cd /etc/mha vim app1.cnf [server1] hostname=192.168.137.142 port=3306
5、启动MHA了manager程序
masterha_check_ssh --conf=/etc/mha/app1.cnf
masterha_check_repl --conf=/etc/mha/app1.cnf
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 &