export LANG=en_US
环境:------------------------------------------
机器 VPN ip linux 账号/密码
manager1 172.28.20.130 10.1.1.10
mysql1-z(主) 172.28.20.132 10.1.1.12
mysql1-c(从) 172.28.20.134 10.1.1.14
mysql1-b(备) 172.28.20.136 10.1.1.16
================================================
>>>>1. 在 10.1.1.12 上, 杀掉主库mysql进程,模拟主库发生故障,进行自动failover操作。
[root@10.1.1.12 ~]# pkill -9 mysqld
查看MHA切换日志,了解整个切换过程,在10.1.1.10上查看日志:
[root@192.168.0.20 ~]# cat /var/log/masterha/app1/manager.log
>>>>2.在 10.1.1.14 上:从信息显示为空了。
[root@DB-mysql1-c ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:50:56:b7:2e:ce brd ff:ff:ff:ff:ff:ff
inet 10.1.1.14/24 brd 10.1.1.255 scope global eth0
inet 10.1.1.20/24 brd 10.1.1.255 scope global secondary eth0:1
mysql> show slave statusG
Empty set (0.00 sec)
在 10.1.1.16 上:从信息显示为
mysql> show slave statusG
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.1.1.14
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql_bin.000003
Read_Master_Log_Pos: 3549
Relay_Log_File: DB-mysql1-b-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql_bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
===============================================================================
>>>>3.cd /var/log/masterha/app1 目录下清除app1.failover.complete 这个文件
[root@DB-manger1 app1]# cd /var/log/masterha/app1
/var/log/masterha/app1
[root@DB-manger1 app1]# rm -rf app1.failover.complete
>>>>4.备主节点需要配置
mysql> show variables like '%read_only%';
mysql>set global read_only=on;
[root@DB-manger1 app1]# vi /etc/masterha/app1.cnf
会发现少一个,添加主1:
[server1]
hostname=10.1.1.12
candidate_master=1
port=3306
在 10.1.1.12 上:---------------
[root@DB-mysql1-z ~]# service mysqld start
[root@DB-mysql1-z ~]# service mysqld status
netstat -nutlp | grep 3306
ps -ef |grep mysql
mysql -uroot -proot
两台slave服务器设置read_only(从库对外提供读服务,只所以没有写进配置文件,是因为随时slave会提升为master)
在 10.1.1.14 上:---------------
mysql> show master statusG
*************************** 1. row ***************************
File: mysql_bin.000003
Position: 3549
Binlog_Do_DB:
Binlog_Ignore_DB: information_schema,performance_schema,mysql,mysql
Executed_Gtid_Set:
1 row in set (0.00 sec)
mysql> show variables like '%relay_log%';
mysql> set global read_only=1
mysql> show variables like '%read_only%';
在 10.1.1.12 上:---------------
四.修复宕机的Master
通常情况下自动切换以后,原master可能已经废弃掉,待原master主机修复后,如果数据完整的情况下,可能想把原来master重新作为新主库的slave,这时我们可以借助当时自动切换时刻的MHA日志来完成对原master的修复。下面是提取相关日志的命令:
然后再执行主从:
CHANGE MASTER TO
MASTER_HOST='10.1.1.12',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql_bin.000005',
MASTER_LOG_POS=1871;
CHANGE MASTER TO
MASTER_HOST='10.1.1.14',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql_bin.000004',
MASTER_LOG_POS=154,
MASTER_USER='repl',
MASTER_PASSWORD='123456';
开启slave(10.1.1.12)上的IO线程,追赶落后于master的binlog。
mysql> start salve; -----------期间丢失的数据就回来了。
mysql> show variables like '%relay_log%';
relay_log_purge | ON
此时10.1.1.12 ,设置定期清理relay脚本(slave服务器),请自行查看搭建手册txt
在 10.1.1.16 上:---------------
mysql> show variables like '%relay_log%';
mysql> set global relay_log_purge=1;
mysql> show variables like '%read_only%';
========================================================
>>>>5.检查SSH配置
检查MHA Manger到所有MHA Node的SSH连接状态:
[root@DB-manger1 app1]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
必须,看见各个节点ssh验证都是ok的~!!!
通过masterha_check_repl脚本查看整个集群的状态
# 开启slave(10.1.1.12)上的IO线程,追赶落后于master的binlog。
# mysql> start slave io_thread;
# mysql> reset slave all; --------------清楚主库的(从配置)
[root@DB-manger1 app1]# masterha_check_repl --conf=/etc/masterha/app1.cnf
通过master_check_status脚本查看Manager的状态:
[root@DB-manger1 app1]# masterha_check_status --conf=/etc/masterha/app1.cnf
开启MHA Manager监控(注意:是一行命令,全部复制,注意不要回车)!!
[root@DB-manger1 app1]# nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
关闭MHA Manage监控
[root@DB-manger1 app1]# masterha_stop --conf=/etc/masterha/app1.cnf
查看日志:
[root@DB-manger1 app1]# tail -f /var/log/messages
[root@DB-manger1 app1]# tail -n20 /var/log/masterha/app1/manager.log
查看VIP 切换脚本:
vi /usr/local/bin/master_ip_failover
-------------------------
测试:
在 10.1.1.14 上:---------------
mysql> create database bai2;
Query OK, 1 row affected (0.01 sec)
mysql> use bai2;
Database changed
mysql> create table t2(a int);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t2 values(1);
Query OK, 1 row affected (0.01 sec)
mysql> insert into t2 values(12);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t2 values(123);
Query OK, 1 row affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from t2;
+------+
| a |
+------+
| 1 |
| 12 |
| 123 |
+------+
3 rows in set (0.00 sec)
在 10.1.1.16 上:---------------
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bai2 |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
mysql> use bai2;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from t2;
+------+
| a |
+------+
| 1 |
| 12 |
| 123 |
+------+
3 rows in set (0.00 sec)
mysql>