3.3 模拟故障
在Mysql1上停止mysql服务,MHA 会自动修改 app1.cnf 文件内容,将宕机的 mysql1 节点删除。 mysql2 会自动接管 VIP,成为新的master
##(1)在 Master 节点 Mysql1 上停止mysql服务 systemctl stop mysqld 或 pkill -9 mysql ##(2)在 manager 节点上监控观察日志记录 tail -f /var/log/masterha/app1/manager.log Master 192.168.72.192(192.168.72.192:3306) is down! #监控到master宕机 Selected 192.168.72.60(192.168.72.60:3306) as a new master. #选举mysql2成功新的master ##(3)正常自动切换一次后,MHA 进程会退出。MHA 会自动修改 app1.cnf 文件内容,将宕机的 mysql1 节点删除。 vim /etc/masterha/app1.cnf #查看manager节点的配置文件 ##(4)查看 mysql2 是否接管 VIP ifconfig
故障切换备选主库的算法:
1.一般判断从库的是从(position/GTID)判断优劣,数据有差异,最接近于master的slave,成为备选主。
2.数据一致的情况下,按照配置文件顺序,选择备选主库。
3.设定有权重(candidate_master=1),按照权重强制指定备选主。
(1)默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效。
(2)如果 check_repl_delay=0 的话,即使落后很多日志,也强制选择其为备选主。
3.4 故障修复
3.4.1 修复mysql1(即修复原来的主节点)
systemctl restart mysqld
3.4.2 修复主从数据
#在新的主库服务器 Mysql2 中查看二进制日志文件和同步点 mysql> show master status; +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000001 | 1747 | | | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) #在原主库服务器 mysql1 执行同步操作,同步现在主库中的数据 change master to master_host='192.168.72.132',master_user='myslave',master_password='000000',master_log_file='master-bin.000001',master_log_pos=1747; start slave;
在新的主库服务器 Mysql2 查看二进制日志文件和同步点
在原主库服务器 mysql1 执行同步操作,同步现在主库中的数据
3.4.3 在 manager 节点上修改配置文件app1.cnf
[root@manager ~]# vim /etc/masterha/app1.cnf [server default] manager_log=/var/log/masterha/app1/manager.log manager_workdir=/var/log/masterha/app1 master_binlog_dir=/usr/local/mysql/data master_ip_failover_script=/usr/local/bin/master_ip_failover master_ip_online_change_script=/usr/local/bin/master_ip_online_change password=manager ping_interval=1 remote_workdir=/tmp repl_password=000000 repl_user=myslave secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.109.131 -s 192.168.109.133 shutdown_script="" ssh_user=root user=mha [server1] hostname=192.168.109.132 port=3306 [server2] candidate_master=1 check_repl_delay=0 hostname=192.168.109.131 port=3306 [server3] hostname=192.168.109.133 port=3306
3.4.4 在 manager 节点上启动 MHA
[root@manager ~]# 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 & [1] 3223
解决中英字不兼容报错的问题
dos2unix /usr/local/bin/master_ip_failover