Home  >  Article  >  Database  >  MHA 自动切换步骤及过程剖析

MHA 自动切换步骤及过程剖析

WBOY
WBOYOriginal
2016-06-07 16:07:341300browse

MHA是众多使用MySQL数据库企业高可用的不二选择,它简单易用,功能强大,实现了基于MySQL replication架构的自动主从故障转移,本

MHA是众多使用MySQL数据库企业高可用的不二选择,它简单易用,功能强大,实现了基于MySQL replication架构的自动主从故障转移,本文主要描述了MHA自动切换的步骤,对切换过程做了演示以及进行了适当的分析,供大家参考和理解MHA以及MySQL的原理。

 

1、MHA自动切换的步骤
a、MHA manager启动时的校验阶段
  根据配置文件校验复制配置以及识别当前的master
  导致监控终止情形:复制配置异常,存在的异常slave,一些需要的脚本脚本异常
  MHA manager启动前可以通过masterha_check_ssh以及masterha_check_repl检测

 

b、监控master server阶段
  MHA manager启动成功后,输出日志[info] Ping(SELECT) succeeded, waiting until MySQL doesn't respond..
  MHA会定期ping master,,缺省的间隔为1秒,直到master死掉
  MHA manager不会监控slave的状态,任意的Stopping/Restarting/Adding/Removing slaves不影响当前MHA监控
  当添加或移除slave节点时,建议修改配置文件以及重启MHA manager


c、侦测到master server异常阶段
  3次连续ping master失败,参数secondary_check_script可用于double check

 

d、开启failover阶段
  MHA再次读取配置文件(防止主从配置已更改),校验master以及当前masetr的从库
  MHA也会校验诸如复制异常以及是否存在一些从库有不同的主
  启动failover(排除上次failover失败或者failover时间间隔太短)

 

e.隔离master server阶段(可选)

  如果配置文件定义了IP漂移脚本则此时会关闭master IP
  如果配置文件定义了关闭master脚本,则调用脚本关闭master以避免脑裂

 

f.恢复一个新的master
  从slave节点获取最新的end_log_pos (Read_Master_Log_Pos)位置
  从上一步获取的位置开始,读取及保存crashed master全部二进制日志文件(ssh可达)
  决定新的master(根据配置文件定义的优先级别)
  产生差量的binary/relay log events并且apply到新的master

 

g.激活一个新的master
  如果配置文件定义了IP漂移脚本则此时会将IP漂移到新master
 

i.恢复剩余的slave
  对所有从库并行地产生差量binary/relay log events
  并用apply差量binary/relay log events到各从库
  启动复制
 
j.通过切换结果(可选)
  邮件发送
  备份作业,管理工具调整等

 

2、MHA配置信息
[root@vdbsrv4 ~]$ more /etc/masterha/app1.cnf
[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log

user=mha
password=xxx
ssh_user=root
repl_user=repl 
repl_password=repl 
ping_interval=1
shutdown_script=""
master_ip_online_change_script=""
report_script=""
master_ip_failover_script=/tmp/master_ip_failover
 
[server1]
hostname=vdbsrv1
master_binlog_dir=/data/mysqldata

[server2]
hostname=vdbsrv2
master_binlog_dir=/data/mysqldata

[server3]
hostname=vdbsrv3
master_binlog_dir=/data/mysqldata/
#candidate_master=1

[root@vdbsrv1 ~]# more /etc/hosts
127.0.0.1    localhost.localdomain localhost
192.168.1.6  vdbsrv1  #master
192.168.1.7  vdbsrv2  #slave1
192.168.1.8  vdbsrv3  #slave2
192.168.1.12 vdbsrv4  #manager

mysql> show slave hosts;
+-----------+---------+------+-----------+--------------------------------------+
| Server_id | Host    | Port | Master_id | Slave_UUID                          |
+-----------+---------+------+-----------+--------------------------------------+
|      1001 | vdbsrv2 | 3306 |        1 | 75bef614-e342-11e4-921d-000c295fb2eb |
|      1002 | vdbsrv3 | 3306 |        1 | 091f79b8-e386-11e4-93d5-000c2943c830 |
+-----------+---------+------+-----------+--------------------------------------+
2 rows in set (0.00 sec)

 

3、演示切换
###开启主库VIP
[root@vdbsrv4 ~]# ssh vdbsrv1 "/sbin/ifconfig eth0:0 192.168.1.13 netmask 255.255.255.0 up"

 

###开启MHA manager
[root@vdbsrv4 ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf &

 

###使用sysbench产生事务
[root@vdbsrv1 ~]# sysbench --test=oltp          \
> --oltp-table-size=5000000      \
> --oltp-read-only=off          \
> --init-rng=on                  \
> --num-threads=16              \
> --max-requests=0              \
> --oltp-dist-type=uniform      \
> --max-time=180                \
> --mysql-user=root              \
> --mysql-socket=/tmp/mysql.sock \
> --mysql-password=''            \
> --db-driver=mysql              \
> --mysql-table-engine=innodb    \
> --oltp-test-mode=complex      \
> --mysql-db=replicatedb run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn