MHA集群的理论和搭建不在这里说明,详见http://blog.csdn.net/sj349781478/article/details/78829711
这里说的是MHA集群中主(master)数据库故障的恢复。
背景介绍:
MHA集群共计四台服务器
master(主):192.168.66.141
backup(备):192.168.66.142
slave(从):192.168.66.143
manager(管理):192.168.66.144
MHA-VIP(数据库对外提供的IP):192.168.66.149
环境搭建:
1、备份数据,将数据传输至管理节点,数据约5G。
完整备份并打包压缩:
#scp /data/xtrabackup/2018-03-09.tar.gz [email protected]:/backup/
2、将备份在管理节点上的数据,同时推送至三台数据库。
#yum install salt-ssh -y
#vi /etc/salt/abcdb (注意空格)
141:
host: 192.168.66.141
user: root
passwd: PASSWD
port: 22
#salt-ssh --roster-file='abcdb' '*' -r 'scp [email protected]:/backup/2018-03-09.tar.gz /data/backup/2018-03-09.tar.gz' (把文件从远程主机copy到当前系统)
3、三台数据库同时还原备份数据。
#salt-ssh --roster-file='/etc/salt/abcdb' '*' -r 'service mysql stop'(停三台库)
# salt-ssh --roster-file='/etc/salt/abcdb' '*' -r 'cd /data/mysql/ && rm -rf *' (清空目录内容)
# salt-ssh --roster-file='/etc/salt/abcdb' '*' -r 'cd /data/backup/ && tar -izxvf 2018-03-09.tar.gz ' (解压备份)
#salt-ssh --roster-file='/etc/salt/abcdb' '*' -r ‘innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --port=3306 --apply-log /data/backup/’ (应用日志文件)
#salt-ssh --roster-file='/etc/salt/abcdb' '*' -r ‘innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --port=3306 --copy-back /data/backup/’ (数据恢复)
#salt-ssh --roster-file='/etc/salt/abcdb' '*' -r 'chown mysql:mysql -R /data/mysql' (修改权限)
#salt-ssh --roster-file='/etc/salt/abcdb' '*' -r 'service mysql start' (启动mysql)
4、三台库建立主从关系。
master(主):192.168.66.141
mysql> show master status;
backup(备):192.168.66.142
slave(从):192.168.66.143
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.66.141',
MASTER_USER='repl',
MASTER_PASSWORD='PASSWD',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=120,
MASTER_CONNECT_RETRY=20;
mysql> start slave;
状态双Yes
5、建立MHA集群。
manager(管理):192.168.66.144
# masterha_check_ssh -conf=/etc/masterha/app1.cnf (ssh互信检测)
#masterha_check_repl -conf=/etc/masterha/app1.cnf (复制检测)
#nohup masterha_manager --conf=/etc/masterha/app1.cnf &> /var/log/masterha/app1.log/manager.log & (启动MHA)
#masterha_check_status -conf=/etc/masterha/app1.cnf (检查MHA启动状态是否为running)
6、为主数据库添加VIP
# /sbin/ifconfig eth0:1 192.168.66.149 netmask 255.255.255.0 up
7、模拟主库故障,备库提升为主。
1)service mysql stop (关闭主库)
2)备库自动提升为主,IP地址同时漂移至备机
3)从库自动同步备库
8、修复原主库,将角色变为备,连接至现主库。
假设在01点为全量备份点,02为故障点,03为新增数据后的点。
理想情况下,启动原主库,change master至02点位即可。
但是现实很骨感,没法精确到02的Position位,那么我就从01位恢复。
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.66.142',
MASTER_USER='repl',
MASTER_PASSWORD='PASSWD',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=120,
MASTER_CONNECT_RETRY=20;
mysql> start slave;
9、重建MHA集群。
三台主从又恢复了正常,重新建立MHA
1)原主库开启read-only
mysql> show variables like '%read_only%'; mysql>set global read_only=on;
2)管理节点需要在/var/log/masterha/app1.log 目录下清除app1.failover.complete 这个文件
3)使用第5步检查启动
【完】