Mysql高可用之MHA
Slave:server1,server2
Master:server3
Monitor:server4
(1)安装数据库
在srevre1.server2.server3上安装数据库并开启,修改密码
安装perl-DBD-MySQL,mha4mysql-nod,以server1为例,其他两个一样
[root@server1 ~]# /etc/init.d/mysqld start
[root@server1 ~]# yum install perl-DBD-MySQL -y
[root@server1 ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
[root@server1 ~]# grep password /var/log/mysqld.log
[root@server1 ~]# mysql -p
mysql> alter user root@localhost identified by 'Redhat+123';
(2)配置数据库
更改配置文件并重启,三个主机的文件必须配置一致,只有id号不同,以server1为例
[root@server1 ~]# vim /etc/my.cnf
[root@server1 ~]# /etc/init.d/mysqld restart
在master上的配置
[root@server3 ~]# mysqldump -pRedhat+123 --master-data=2 --single-transaction -R --triggers -A > all.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
接下来就是配置monitor主机
安装软件包
[root@server4 ~]# yum install perl-DBD-MySQL -y
[root@server4 ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
[root@server4 ~]# yum install -y perl-*
[root@server4 ~]# yum install -y mha4mysql-manager-0.56-0.el6.noarch.rpm
Master数据库上的配置
# 创建复制用户
[root@server3 ~]# mysql -p
mysql> grant replication slave on *.* to 'server'@'172.25.25.%' identified by 'Redhat+123';
mysql> flush privileges;
mysql> show master status;
# 查看
[root@server3 ~]# head -n 30 all.sql | grep 'CHANGE MASTER TO'
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
# 把备份复制到两个slave主机
[root@server3 ~]# scp all.sql server1:/data
[root@server3 ~]# scp all.sql server2:/data
在slave上的配置
server1和server2的配置相同,以server1为例,server2做同样配置
建立目录并把数据库导到文件
[root@server1 ~]# mkdir /data
[root@server1 ~]# mysql -pRedhat+123 < /data/all.sql
server2上:
slave上搭建复制环境,两个slave都做
[root@server1 ~]# mysql -p
mysql> CHANGE MASTER TO MASTER_HOST='172.25.25.3',MASTER_USER='server', MASTER_PASSWORD='Redhat+123',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=601;
mysql> start slave;
mysql> show slave status\G;
# 设置为只读模式
mysql> set global read_only=1;
在Master上创建监控用户并授权
[root@server3 ~]# mysql -p
mysql> grant all privileges on *.* to 'root'@'172.25.25.%' identified by 'Redhat+123';
Monitor上配置
[root@server4 ~]# mkdir -p /etc/masterha
[root@server4 ~]# vim /etc/masterha/appl.cnf
文件内容:
Slave的配置,两个slave都做
设置定期清理relay脚本
[root@server1 ~]# vim purge_relay_log.sh
脚本内容:
# 定期执行脚本
[root@server1 ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@server1 ~]# crontab -l
0 4 * * * /bin/bash /root/purge_relay_log.sh
两个Slave数据库配置
mysql> set global relay_log_purge=0;
设置ssh免密登录
Monitor上
[root@server4 ~]# ssh-keygen -t rsa
[root@server4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.25.1
[root@server4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.25.2
[root@server4 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.25.3
# 在三个数据库主机上把密钥也相互传给对方
server1上
[root@server1 ~]# ssh-keygen -t rsa
[root@server1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.25.2
[root@server1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.25.3
Server2
[root@server2 ~]# ssh-keygen -t rsa
[root@server2 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.25.1
[root@server2 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.25.3
Server3
[root@server3 ~]# ssh-keygen -t rsa
[root@server3 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.25.1
[root@server3 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.25.2
在Monitor上(server4)
# 检查ssh配置
[root@server4 ~]# masterha_check_ssh --conf=/etc/masterha/appl.cnf
# 检查复制环境
[root@server4 ~]# masterha_check_repl --conf=/etc/masterha/appl.cnf
全部为OK则配置正确
# 检查mha manager状态
appl (pid[root@server4 ~]# masterha_check_status --conf=/etc/masterha/appl.cnf
appl is stopped(2:NOT_RUNNING). #没有运行
[root@server4 ~]# mkdir -p /var/log/masterha/appl/
[root@server4 ~]# nohup masterha_manager --conf=/etc/masterha/appl.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/appl/manager.log 2>&1 &
[1] 1075
[root@server4 ~]# masterha_check_status --conf=/etc/masterha/appl.cnf
Aqql
appl (pid:1075) is_running(0:PING_OK), master:172.25.25.3
# 查看启动日志
[root@server4 ~]# tail -n20 /var/log/masterha/appl/manager.log
在线进行切换
[root@server4 ~]# chmod +x /usr/local/bin/master_ip_online_change
[root@server4 ~]# masterha_master_switch --conf=/etc/masterha/appl.cnf --master_state=alive --new_master_host=172.25.25.2 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000
查看:master变为server2
切换成功!