MHA自动切换流程
MHA的全名叫做mysql-master-ha,配置后可以在10-30秒内完成master自动切换,切换过程如下:
1. 检测master的状态,方法是一秒一次“ SELECT 1 As Value”,发现没有响应后会重复3次检查,如果还没有响应,shutdown并再重复一次SELECT 1 As Value确认master关闭
2. 确认SSH到master所在的机器是否可达
3. 给出消息:Connecting to a master server failed,并开始读取配置文件masterha_default.conf和app1.conf
4. 确认复制切换模式: [info] GTID failover mode = 1
5. 报告整个架构中的机器存活情况
Fri Jul 1 13:35:33 2016 - [info] Dead Servers:
Fri Jul 1 13:35:33 2016 - [info] 192.168.118.63(192.168.118.63:3306)
Fri Jul 1 13:35:33 2016 - [info] Alive Servers:
Fri Jul 1 13:35:33 2016 - [info] 192.168.118.62(192.168.118.62:3306)
Fri Jul 1 13:35:33 2016 - [info] 192.168.118.64(192.168.118.64:3306)
6. 检查存活的实例版本、GTID开启情况、是否开启read_only以及复制过滤情况
Fri Jul 1 13:35:33 2016 - [info] Alive Slaves:
Fri Jul 1 13:35:33 2016 - [info] 192.168.118.62(192.168.118.62:3306) Version=5.6.28-log (oldest major version between slaves) log-bin:enabled
Fri Jul 1 13:35:33 2016 - [info] GTID ON
Fri Jul 1 13:35:33 2016 - [info] Replicating from 192.168.118.63(192.168.118.63:3306)
Fri Jul 1 13:35:33 2016 - [info] Primary candidate for the new Master (candidate_master is set)
Fri Jul 1 13:35:33 2016 - [info] 192.168.118.64(192.168.118.64:3306) Version=5.6.28-log (oldest major version between slaves) log-bin:enabled
Fri Jul 1 13:35:33 2016 - [info] GTID ON
Fri Jul 1 13:35:33 2016 - [info] Replicating from 192.168.118.63(192.168.118.63:3306)
Fri Jul 1 13:35:33 2016 - [info] Primary candidate for the new Master (candidate_master is set)
Fri Jul 1 13:35:33 2016 - [info] Checking slave configurations..
Fri Jul 1 13:35:33 2016 - [info] read_only=1 is not set on slave 192.168.118.62(192.168.118.62:3306).
Fri Jul 1 13:35:33 2016 - [info] read_only=1 is not set on slave 192.168.118.64(192.168.118.64:3306).
Fri Jul 1 13:35:33 2016 - [info] Checking replication filtering settings..
Fri Jul 1 13:35:33 2016 - [info] Replication filtering check ok.
7. 接下来就是在GTID复制基础上的切换过程
(1) 配置检查阶段,具体检查如下
[info] ** Phase 1: Configuration Check Phase completed.
检查项目如下:
Query SELECT @@global.server_id As Value
Query SELECT VERSION() AS Value #如果是GTID模式,版本不得小于5.6,如果是普通模式,版本不得小于5.0.45
Query SELECT @@global.gtid_mode As Value #MHA0.56版本开始支持GTID,之前的版本不支持
7 Query SHOW GLOBAL VARIABLES LIKE 'log_bin' #binlog必须开启
Query SHOW MASTER STATUS
Query SELECT @@global.datadir AS Value
Query SELECT @@global.slave_parallel_workers AS Value #确定slave是不是多线程并行复制,这个参数的影响还没整明白,再研究下
Query SHOW SLAVE STATUS
Query SELECT @@global.read_only As Value #确定read_only的设置,如果要转为新的master,这个值要设为0
Query SELECT @@global.relay_log_purge As Value #确定relay_log是否可自动删除,默认是可以
Query SELECT @@global.relay_log_info_repository AS Value #确定relay_log是以file还是table格式存放的,默认是file
Query SELECT @@global.datadir AS Value #确定数据存放位置
7 Query SELECT @@global.relay_log_info_file AS Value #确定relay_log的文件名,为后面slave之间的relay_log应用做准备
备注:(1)默认情况下,从服务器上的中继日志在SQL线程执行完后会被自动删除的。但是这些中继日志在恢复其他从服务器时候可能会被用到,因此需要禁用中继日志的自动清除和定期清除旧的中继日志
(2)binlog-do-db和replicate-ignore-db设置必须相同。MHA在启动时候会检测过滤规则,如果过滤规则不同,MHA不启动监控和故障转移
(3)master.info和relay.info必须是file,不能是table
(2)彻底关闭master连接的阶段,避免master未关闭导致的脑裂
[info] * Phase 2: Dead Master Shutdown Phase..
具体关闭命令是:
/etc/masterha/master_ip_failover --orig_master_host=192.168.118.3 --orig_master_ip=192.168.118.3 --orig_master_port= --command=stopssh --ssh_user=root
关闭完成后给出报告
[info] * Phase : Dead Master Shutdown Phase completed.
(3)master恢复阶段:
[info] * Phase : Master Recovery Phase..
›1 确认relay log最新的slave实例
›2 确定新的master
如果在配置文件中设置了候选master,会直接确定预设机器实例为master;如果没有预设,会选择含有最新的relay log的那个slave
›3 确认新的master后,会先设置sql_log_bin=0以阻塞master日志写入使其他slave赶上复制
会选取含有最新relay log 的slave,在该slave上设置sql_log_bin=0并在其余slaves上应用该最新relay log,最终获得这个层次的数据一致性,之后再set sql_log_bin=1使恢复日志写入。可以通过半同步复制来解决无法ssh到master所在机器所造成的事务丢失问题
待全部数据一致后,通过show master status确定新master的日志位置并在其他slave上执行change master语句创建新的主从连接:
Fri Jul 1 13:35:33 2016 - [info] Getting new master's binlog name and position..
Fri Jul 1 13:35:33 2016 - [info] mysql-bin.000004:191
Fri Jul 1 13:35:33 2016 - [info] All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='192.168.118.2', MASTER_PORT=3306, MAST
ER_AUTO_POSITION=1, MASTER_USER='repl', MASTER_PASSWORD='xxx';
执行该切换的具体语句是
/etc/masterha/master_ip_failover --command=start --ssh_user=root --orig_master_host=192.168.118.3 --orig_master_ip=192.168.118.3 --orig_master_port= --new_master_host=192.168.118.2 --new_master_ip=192.168.118.2 --new_master_port= --new_master_user='user' --new_master_password='password'
该阶段成果后给出报告:
Fri Jul :: - [info] ** Finished master recovery successfully.
Fri Jul :: - [info] * Phase : Master Recovery Phase completed.
(4)slaves恢复阶段:
[info] * Phase : Slaves Recovery Phase..
先停止IO线程,等待SQL线程执行完成后,stop slave,清除原slave信息,重新change master指向新的master,start slave ,over
Query SHOW SLAVE STATUS
Query STOP SLAVE IO_THREAD
Query SHOW SLAVE STATUS
Query SHOW SLAVE STATUS
Query STOP SLAVE
Query SHOW SLAVE STATUS
Query RESET SLAVE
Query CHANGE MASTER TO MASTER_HOST = '192.168.118.62' MASTER_USER = 'repl' MASTER_PASSWORD = <secret> MASTER_PORT =
Query START SLAVE
Connect Out repl@192.168.118.62:
Query SHOW SLAVE STATUS
(5)清除新选出的master上的slave信息
[info] * Phase : New master cleanup phase..
reset slave all;
Query STOP SLAVE
Query SHOW SLAVE STATUS
Query RESET SLAVE /*!50516 ALL */
Query SHOW SLAVE STATUS
至此,整个切换过程完成,最后给出切换报告,over
----- Failover Report ----- app1: MySQL Master failover 192.168.118.(192.168.118.:) to 192.168.118.(192.168.118.:) succeeded Master 192.168.118.(192.168.118.:) is down! Check MHA Manager logs at localhost.localdomain:/var/log/masterha/app1/app1.log for details. Started automated(non-interactive) failover.
Invalidated master IP address on 192.168.118.(192.168.118.:)
Selected 192.168.118.(192.168.118.:) as a new master.
192.168.118.(192.168.118.:): OK: Applying all logs succeeded.
192.168.118.(192.168.118.:): OK: Activated master IP address.
192.168.118.(192.168.118.:): OK: Slave started, replicating from 192.168.118.(192.168.118.:)
192.168.118.(192.168.118.:): Resetting slave info succeeded.
Master failover to 192.168.118.(192.168.118.:) completed successfully.
MHA自动切换流程的更多相关文章
- mysql mha 主从自动切换 高可用
mha(Master High Availability)目前在MySQL多服务器(超过二台),高可用方面是一个相对成熟的解决方案. 一,什么是mha,有什么特性 1. 主服务器的自动监控和故障转移 ...
- MHA在线切换过程
MHA 在线切换是MHA除了自动监控切换换提供的另外一种方式,多用于诸如硬件升级,MySQL数据库迁移等等.该方式提供快速切换和优雅的阻塞写入,无关关闭原有服务器,整个切换过程在0.5-2s 的时间左 ...
- MHA自动Failover过程解析(updated) 转
允许转载, 转载时请以超链接形式标明文章原始出处和网站信息 http://www.mysqlsystems.com/2012/03/figure-out-process-of-autofailover ...
- MHA手动切换 原创1(主故障)
MHA提供了3种方式用于实现故障转移,分别自动故障转移,需要启用MHA监控: 在无监控的情况下的手动故障转移以及基于在线手动切换. 三种方式可以应对MySQL主从故障的任意场景.本文主要描述在无监控的 ...
- MySQL高可用方案MHA自动Failover与手动Failover的实践及原理
集群信息 角色 IP地址 ServerID 类型 Master ...
- SpringBoot入门教程(三)通过properties实现多个数据库环境自动切换配置
前面的文章已经介绍了CentOS部署SpringBoot项目从0到1的详细过程,包括Linux安装ftp.Tomcat以及Java jdk的全部过程.这篇文章主要介绍关于springboot如何通过多 ...
- 协程:gevent模块,遇到i/o自动切换任务 038
协程 : gevent模块,遇到io自动切换任务 from gevent import monkey;monkey.patch_all() # 写在最上面 这样后面的所有阻塞就全部能够识别了 impo ...
- Cocos Creator 资源加载流程剖析【六】——场景切换流程
这里讨论场景切换的完整流程,从我们调用了loadScene开始切换场景,到场景切换完成背后发生的事情.整个流程可以分为场景加载和场景切换两部分,另外还简单讨论了场景的预加载. 加载场景的流程 load ...
- SWATS算法剖析(自动切换adam与sgd)
SWATS算法剖析(自动切换adam与sgd) 战歌指挥官 搬砖.码砖.代查水表.... 27 人赞同了该文章 SWATS是ICLR在2018的高分论文,提出的一种自动由Adam切换为SGD而实现更好 ...
随机推荐
- IOS总结_无需自己定义UITabbar也可改变UITabbarController的背景和点击和的颜色
在application: application didFinishLaunchingWithOptions: launchOptions 增加以下代码就能够实现对tabbar的颜色的改动 //设定 ...
- 修改tomcat访问路径
<Context path="/pc" docBase="/data/www/8084/kabao-pc-consume/" reloadable=&qu ...
- 《JavaScript 闯关记》之单体内置对象
ECMA-262 对内置对象的定义是「由 JavaScript 实现提供的.不依赖于宿主环境的对象,这些对象在 JavaScript 程序执行之前就已经存在了」.意思就是说,开发人员不必显式地实例化内 ...
- Eclipse配置不同JDK版本遇到的一些问题与总结
配置多个JDk版本有时候是工作需求,也更方便自己平时的学习过程,有时候你工作上需求的开发环境是JDK比较老的版本,而为了学习JDK新版本的特性时,此时配置多个JDK版本是必须的,下面是配置多版本JDK ...
- UISwitch 监听响应
UISwitch *swh = [[UISwitch alloc]initWithFrame:CGRectMake(100,100, 50, 30)]; swh.on = YES; ...
- calc()函数的使用
calc()函数算是css中的一个另类了,一般来说css都是直接确定的样式,而calc()函数却是可以动态计算,这和css静态的概念有些区别,但这并不妨碍其优秀的性能. 什么是calc()? calc ...
- POJ 2135 Farm Tour (最小费用最大流模板)
题目大意: 给你一个n个农场,有m条道路,起点是1号农场,终点是n号农场,现在要求从1走到n,再从n走到1,要求不走重复路径,求最短路径长度. 算法讨论: 最小费用最大流.我们可以这样建模:既然要求不 ...
- 写一个Windows上的守护进程(4)日志其余
写一个Windows上的守护进程(4)日志其余 这次把和日志相关的其他东西一并说了. 一.vaformat C++日志接口通常有两种形式:流输入形式,printf形式. 我采用printf形式,因为流 ...
- 磁盘管理三-raid
前言:何为raid raid是利用多个磁盘组成一个可提升效能.可包含冗余的磁盘阵列组.常用于数据吞吐量大(视频),冗余要求高的场景 当前raid包含了raid0-7,以及组合方式raid10,raid ...
- TabHost刷新activity的方法
在android中,使用tabHost的时候,如果tab被点击,该tab所对应的activity被加载了,从别的tab切换回来的时候,activity不会再次被创建了(onCreate),所以要想每次 ...