MHA自动Failover过程解析

MYSQL MHA 高可用架构部署 本文介绍了如何在四台虚拟机上部署MySQL MHA高可用架构。首先,准备四台虚拟机,分别为主节点、两个从节点和管理节点,并关闭防火墙和SELinux。接着,修改主机名并配置IP地址映射,同时为每台服务器配置EPEL源和本地MHA依赖库的Yum源。随后,安装MHA所需依赖库并进行时间同步。在部署MySQL主从复制环境时,统一数据库安装路径和配置文件位置,并在主服务器上通过脚本安装MySQL 5.7.44,初始化并修改密码。最后,进行MySQL安全初始化。通过以上步骤,完成了MySQL MHA高可用架构的基础环 阅读详情

MHA是一位日本MySQL大牛用Perl写的一套MySQL故障切换方案,来保证数据库系统的高可用。近期,在田老师的推动下,开始一步步深入了解这个HA方案,并也计划在公司线上尝试部署。下面的东西是这段时间的学习笔记和个人理解,没有具体的实战经验,只是人为测试模拟故障的发生,通过日志来分析MHA背后的自动切换过程。

首先,介绍下它的一些特点,以及为什么用它,在哪种场合更适合用它。

1. 10-30s实现master failover(9-12s可以检测到主机故障,7-10s可以关闭主机避免SB,在用很短的时间应用差异日志)

2. 部署简单,无需对现有M-S结构做任何改动(至少3台,保证切换后仍保持M-S结构)

3. 支持手动在线切换(主机硬件维护),downtime几乎很短0.5-2s

4. 保证故障切换后多从库数据的一致性

5. 完全自动化的failover及快速复制架构恢复方案(一主多从)

6. 恢复过程包括:选择新主库、确认从库间relay log差异、新主库应用必要语句、其他从库同步差异语句、重新建立复制链接

上面是我对wiki里面信息的剪辑归纳。在实际测试中,手动切换与自动切换所需时间都能控制在他所描述的范围呢。在一主多从的情况下,当主库故障,需要提升一台从库作为新的主库,其余从库则需要重新指向新的主库建立复制,亲身过这个恢复过程的同志,应该记忆深刻,又费时又费事的(想想有3-4个从库在哪儿等着你0_0…)。可能你会说不是有这样的结构吗:M-m-S(n),大M掉了,可以马上指向小m,但是这个结构也存在致命的问题,如果是小m遇到点什么意外,后面拖家带口的S可就瞎眼了,这也是为什么大家都很渴望的一个特性(global transaction ID)出现的原因。MHA可以很好的帮我们解决从库数据的一致性问题,同时最大化挽回故障发生后的数据。

接下,我们了解下MHA方案里的两个角色。

node host:原有的MySQL复制结构中的主机,至少3台,即1主2从,当master failover后,还能保证主从结构;只需安装node包。

manager server:运行监控脚本,负责monitoring 和 auto-failover;需要安装node包和manager包。

MHA manager server可以是专门的一台机器,这样所有的业务线上的MHA都可以由其统一监控,配置文件也便于统一管理;或者为了节省机器,可以从现有复制架构中选一台“闲置”从库作为manager server,比如:某台从库不对外提供读的服务,只是作为候选主库,或是专门用于备份。

下面有价值的部分开始了,我将带着大家一步一步的分析整个failover的过程,使大家对MHA有个清晰了解,如果是我们自己的脚本又是如何去实现的呢。

背景介绍

主从结构:

10.0.1.48(master)

|

———- 10.0.1.37(slave1)

———- 10.0.1.38(slave2)

Sysbench主机:10.0.1.49:: master manager monitor

在sysbench压测机上持续对主库发起更新,通过关闭其中一个主库的IO_THREAD,造成个从库之间的跟新差异,最后暴力kill掉mysqld进程,引起自动master failover发生。

模拟故障

Step1: 10.0.1.49

# sysbench -mysql-host=10.0.1.48

Step2: 10.0.1.37 (1min later)

mysql> stop slave io_thead;

Step3: 10.0.1.37(around 10min later)

mysql> start slave io_thread;

Step4: 10.0.1.48

# killall -9 mysqld_safe mysqld

Failover过程分析

当master_manager监控到主库mysqld服务停止后,首先对主库进行SSH登录检查(save_binary_logs -command=test),然后对mysqld服务进行健康检查(PING(SELECT)每个3秒检查一次,持续3次),最后作出Master is down!的判断,master failover开始。

Phase 1: Configuration Check Phase..

确认主从主机状态,从库中最新的主机有哪些。

Phase 2: Dead Master Shutdown Phase..

前提是你需要指定相关的脚本,比如:master_ip_failover_script、shutdown_script,在安装包的samples/scriptes目录下。

Phase 3: Master Recovery Phase..
Phase 3.1: Getting Latest Slaves Phase..

根据从库同步主库的binlog的位置,分出latest slaves和oldest slaves。

Phase 3.2: Saving Dead Master’s Binlog Phase..

在主库上执行以下命令获得lastest slave与master间的binlog差异:

save_binary_logs -command=save -start_file=mysql-bin.000010  -start_pos=3716 -binlog_dir=/data/mha_48 -output_file=/var/log/masterha/saved_master_binlog_from_10.0.1.48_3306_20120326174946.binlog -handle_raw_binlog=1 -disable_log_bin=0 -manager_version=0.53

然后,通过scp将生成的差异binlog文件拷贝到monitor server上。

Phase 3.3: Determining New Master Phase..

执行如下命令,找出latest slave,并确认relay log是否全部应用,最后根据候选规则,选出新的主库(会检查是否有设置candidate_master=1和no_master=1):

apply_diff_relay_logs -command=find -latest_mlf=mysql-bin.000019 -latest_rmlp=238437084 -target_mlf=mysql-bin.000019 -target_rmlp=116056791 -server_id=1 -workdir=/var/log/masterha -timestamp=20120330124742 -manager_version=0.53 -relay_log_info=/data/mha_38/relay-log.info  -relay_dir=/data/mha_38/

Phase 3.4: New Master Diff Log Generation Phase..

新主库需要判断自己的relay log是否与latest slave有差异,产生差异relay log;之后Monitor server会通过scp将主库差异binlog拷贝到新主库上。

Phase 3.5: Master Log Apply Phase..

在新主库上应用relay log差异和主库binlog差异;最后,获得新主库的binlog文件及位置信息,并设置read_only=0。

Phase 4: Slaves Recovery Phase..
Phase 4.1: Starting Parallel Slave Diff Log Generation Phase..

判断从库与lastest slave是否存在relay log差异,在latest slave上执行如下命令,生成差异relay log文件,并通过scp拷贝到对应的从库上:

apply_diff_relay_logs -command=generate_and_send -scp_user=root -scp_host=10.0.1.37 -latest_mlf=mysql-bin.000019 -latest_rmlp=238437084 -target_mlf=mysql-bin.000019 -target_rmlp=116056791 -server_id=1 -diff_file_readtolatest=/var/log/masterha/relay_from_read_to_latest_10.0.1.37_3306_20120330124742.binlog -workdir=/var/log/masterha -timestamp=20120330124742 -handle_raw_binlog=1 -disable_log_bin=0 -manager_version=0.53 -relay_log_info=/data/mha_38/relay-log.info  -relay_dir=/data/mha_38/

Phase 4.2: Starting Parallel Slave Log Apply Phase..

首先,将monitor server上生成的binlog差异拷贝到个从库上;

然后,判断从库执行relay log位置(Exec_Master_Log_Pos)是否与已读到的relay log位置(Read_Master_Log_Pos)一致,执行以下命令获得差异文件:

save_binary_logs -command=save -start_file=relay-bin.000003  -start_pos=33701765 -output_file=/var/log/masterha/relay_from_exec_to_read_10.0.1.37_3306_20120330124742.binlog -handle_raw_binlog=1 -disable_log_bin=0 -manager_version=0.53 -relay_log_info=/data/mha_37/relay-log.info  -binlog_dir=/data/mha_37/

接下来,应用所有差异日志,同时差异日志文件合并到一个文件(total_binlog_for_10.0.1.37_3306.20120330124742.binlog)中,执行的语句及结果会被输出一个标有err的日志文件(relay_log_apply_for_10.0.1.37_3306_20120330124742_err.log)中:

apply_diff_relay_logs -command=apply -slave_user=root -slave_host=10.0.1.37 -slave_ip=10.0.1.37  -slave_port=3306

-apply_files=/var/log/masterha/relay_from_exec_to_read_10.0.1.37_3306_20120330124742.binlog, \

/var/log/masterha/relay_from_read_to_latest_10.0.1.37_3306_20120330124742.binlog, \

/var/log/masterha/saved_master_binlog_from_10.0.1.48_3306_20120330124742.binlog \

-workdir=/var/log/masterha -target_version=5.1.57-log -timestamp=20120330124742 -handle_raw_binlog=1 -disable_log_bin=0 -manager_version=0.53 -slave_pass=xxx

最后,执行reset slave,并重新CHANG MASTER。

Phase 5: New master cleanup phease..

执行reset slave操作清除之前slave信息。

以上每个阶段的分析,是根据master_manager监控脚本的输出日志分析得来,它的日志非常详细。看着日志不停的感叹,如此严谨细致的方案;从故障的反复确认,到binlog/relay日志的层层比对,多重差异日志的应用,到最后复制位置的准确选择做得每一步都是十分仔细,如果中途有意外发生会终止failover操作,并产生mha_manager.failover.error的文件,下一次必须要删除该文件才能正常failover,再或是当从库的差异日志太大落后太多(100M),默认情况会终止failover随后报错退出,除非设置check_repl_relay=0,因为它要保证快速切换,downtime不能过长。

其实,在这个方案里面还有好多好多我们只得学习的地方,比如,关于binlog/relaylog文件中的信息,还有show slave status的输出信息,想说的真是太多了,大家可以从以下两个地方获得更加详尽的介绍。

非常非常详尽的文档:http://code.google.com/p/mysql-master-ha/wiki/TableOfContents?tm=6

非常非常有料的PPT:http://www.slideshare.net/matsunobu/automated-master-failover/

最后,再次感叹下,我们不得不佩服老外们对于技术的精益求精,对于事情认真严谨的态度。

MySQL高可用MHA自动Failover过程解析及故障维护 立即下载

相关推荐

别让运放自激振荡!手把手教你用波特图分析反相放大电路的稳定性(附LTspice仿真)

本文详细解析了运算放大器在反相放大电路中的稳定性问题,通过波特图分析和LTspice仿真,揭示了自激振荡的成因及解决方案。文章从故障现象识别到数学工具应用,再到实战仿真和工程优化,提供了一套完整的稳定性分析工具链,帮助工程师有效避免运放自激振荡问题。

weixin_31682031的博客 303

mysql 失效转移_MySQL基于MHA的FailOver过程

大家好,我是anyux。本文介绍MySQL基于MHA的FailOver过程。MHA FailOver过程详解什么是FailOver故障转移主库宕机,一直到业务恢复正常的处理过程如何处理FailOver1.快速监控到主库宕机2.选择新主节点,选择策略mysqladmin ping检查数据库状态,主机状态,端口等,判断从库节点读取的master_log_file及read_master_log_pos...

weixin_35156503的博客 355

深度学习环境搭建以及DeepLabCut安装过程

文章目录 一、查询电脑硬件 安装GeForce驱动程序 二、环境搭建与软件安装 1.安装CUDA运算平台软件 2.安装cuDNN支持包 3.配置环境变量 三、 DeepLabCut环境配置 1.安装Anaconda 2.创建容器环境 3.激活容器环境 4.安装TensorFlow 5.验证TensorFlow是否安装成功 6...

m0_51136557的博客 3157

[深入浅出]MHA FailOver 原理

[深入浅出]MHA FailOver 原理 MHA基于源码的工作原理 1、通过 masterha_master_monitor ,每隔ping_interval秒探测一次Master状态,如果状态异常,探测四次失败后,进行选主。 1)把宕机的master二进制日志保存下来。 2)找到binlog位置点最新的slave。 3)在binlog位置点最新的slave上用relay log(差异日志)修复其它slave。 4)将宕机的master上保存下来的二进制日志恢复到含有最..

Oldman的博客 2371

2017阿里内推笔试题--算法工程师(运筹优化)

2017阿里内推笔试题–算法工程师(运筹优化)题目沐哲是一个菜鸟仓库的一个拣货员,但他有非常个怪异的习惯。每次拣货的重量都要比之前拣的一个轻,每次拣到货后都可以得到1块钱,沐哲想知道这样最多能赚多少钱 32 34 7 33 21 2 13 12 3 11 26 36 16 30 22 1 24 14 20 23 25 5 19 29 27 15 9 17 31 4 6 18 8 10 3

shawpan的专栏 1万+

libcrypto.so.10(OPENSSL_1.0.2)(64bit) is needed by erlang-22.0.7-1.el7.x86_64

今天安装Rabbitmq的 erlang-22.0.7-1.el7.x86_64.rpmrpm包时遇到了这个坑,害找到说是不容易;错误信息在下面; [root@iz2zef7u84js1qeeq00ewwz RabbitMQ]# rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm warning: erlang-22.0.7-1.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 6026dfca: NOKEY error:

qq_45782349的博客 5782

Mysql 搭建MHA高可用架构,实现自动failover,完成主从切换

如果报错,多看日志/var/log/masterha/app1/manager.log注意是否每台mysql间都建立了ssh免密通道,否则会报错如果报错,思考是否软链接建立好了?或者主从复制搭建正确了在 manager 节点上测试 mysql 主从连接情况,最后出现 MySQL Replication Health is OK 字样说明正常。

lpfstudy的博客 3410

AS7341光谱传感器实战:I2C驱动、Arduino与Python代码及校准指南

光谱传感器通过多通道滤光片与光电二极管阵列,将光信号转换为数字量,实现波长级测量。其技术价值在于以低成本替代传统光谱仪,完成颜色识别、光源分析等任务。在植物补光、水质检测等场景中,多通道光谱数据能精准区分红光与深红光比例。AS7341作为9通道(8可见光+1近红外)I2C传感器,支持Arduino、ESP32和树莓派,结合增益与积分时间调节,可适应强弱光环境。本文从芯片原理出发,详解寄存器配置、双平台代码实现、暗电流与白板校准方法,并给出常见问题排查指南,帮助创客快速构建光谱应用。

weixin_42519733的博客 252

菜鸟小试之二:MHA failover切换

failovwer切换从192.168.1.34切换到192.168.1.35 把192.168.1.34上的master给down掉,模拟dead 下面通过手工切换: [root@skfweb2 /mha/appl]masterha_master_switch --master_state=dead --conf=/etc/appl.cnf --dead_master_host=192.1

Jeffreyli168专栏 708

lammps教程:实例讲解npt、nvt系综的选择

对于lammps新手来说,系综的选择令人困惑,到底是应该用nvt系综还是npt系综? 我在初学lammps时就被这个问题困扰了很久。如果去问别人,可能会告诉你一个答案:根据模拟需要确定。 其实和没说一样。 到底如何确定系综,确实不是一句两句能够说清楚的,不同的体系、不同的模拟目的要选择不同的系综。 前几天遇到的一个合金的模拟案例,比较有代表性,分享出来供大家参考。 建模方法和之前介绍过的高熵合金建模方法类似,先建立单晶模型,然后使用替换原子的命令获得合金结构。 建模完成后,按照常规,先上nvt系综进行驰豫

lammps_jiayou的博客 9767

FineReport实战-- 国内外各地区销售数据分析 多个图表联动

进行国内外各地区业务员销售数据分析是一项复杂但极具价值的任务,它可以帮助企业了解不同市场的表现,并据此调整销售策略以提高整体绩效。实现功能:同一个报表里面多个图表联动问题。

Davina_yu的博客 1199

MySQL MHA FailOver后,原Master节点自动以Slave角色加入集群的研究与实现

MHA是一套MySQL高可用管理软件,除了检测Master宕机后,提升候选Slave为New Master之外(漂虚拟IP),还会自动让其他Slave与New Master 建立复制关系。MHA Manager可以单独部署在一台独立的机器上,并管理多个master-slave集群。当自动Failover完成后,MHA Manager服务器上的masterha_manager 进程自动退出。

hongjian006的博客 993

LPDDR6 Efficiency Mode 技术探讨

LPDDR6 Efficiency Mode 技术探讨

zilan23的博客 1159

MHA自动Failover过程解析(up…

转自:http://blog.youkuaiyun.com/wulantian/article/details/13287975#comments#0-tsina-1-70265-397232819ff9a47a7b7e80a40613cfe1 http://www.mysqlsystems.com/2012/03/figure-out-process-of-autofailover-on-mha.htm

infiltrators的博客 773

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

MHA自动Failover过程解析(updated)(转)

原味地址:http://www.mysqlsystems.com/2012/03/figure-out-process-of-autofailover-on-mha.html MHA是一位日本MySQL大牛用Perl写的一套MySQL故障切换方案,来保证数据库系统的高可用。近期,在田老师的推动下,开始一步步深入了解这个HA方案,并也计划在公司线上尝试部署。下面的东西是这段时间的学

lijingkuan的博客 778

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

MHA自动Failover过程解析(updated)

允许转载, 转载时请以超链接形式标明文章原始出处和网站信息http://www.mysqlsystems.com/2012/03/figure-out-process-of-autofailover-on-mha.htmlMHA是一位日本MySQL大牛用Perl写的一套MySQL故障切换方案,来保证数据库系统的高可用。近期,在田老师的推动下,开始一步步深入了解这个HA方案,并...

weixin_33802505的博客 111

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

MHA自动Failover过程解析(updated) ------好东西 分享一下

允许转载, 转载时请以超链接形式标明文章原始出处和网站信息 http://www.mysqlsystems.com/2012/03/figure-out-process-of-autofailover-on-mha.html MHA自动Failover过程解析(updated) By zhang, on March 31st, 2012 MHA是一位日本MySQL大牛用P

wulantian的专栏 5711

探索MySQL高可用架构之MHA(1)

探索MySQL高可用架构之MHA(1)-----构建mysql高可用系列(共9篇)什么是高可用性?很多公司的服务都是24小时*365天不间断的。比如Call Center。这就要求高可用性。再比如购物网站,必须随时都可以交易。那么当购物网的server挂了一个的时候,不能对业务产生任何影响。这就是高可用性。如何处理failover?...

weixin_33923148的博客 83

MHA Failover 实现流程(核心步骤)

介绍了MHA Failover 实现流程(核心步骤),并通过MHA日志加深理解

Linux小白 1119

MHA Failover过程解析

从故障的反复确认,到binlog/relay日志的层层比对,多重差异日志的应用,到最后复制位置的准确选择做得每一步都是十分仔细,如果中途有意外发生会终止failover操作,并产生mha_manager.failover.error的文件,下一次必须要删除该文件才能正常failover,再或是当从库的差异日志太大落后太多(100M),默认情况会终止failover随后报错退出,除非设置check_repl_relay=0,因为它要保证快速切换,downtime不能过长。只需安装node包。

mr_zhangwz的博客 93

MHA Failover测试-上

TL;DR 用例 ping_type=CONNECT ping_type=INSERT master too many connection 不会触发failover 不会触发failover master hang 不会触发failover 会触发failover且成功 仅manager无法连通master 不会触发failover 不会触发failover manager无法连通master, 且无法ssh slave1 不会触发failover 不会触发failover

FaN() 540

MySQL MHA failover过程

1、切换过程[root@es3~]#masterha_check_repl--conf=/root/app1.cnf TueAug2010:22:412019-[warning]Globalconfigurationfile/etc/masterha_default.cnfnotfound.Skipping. TueAug2010:22...

236

详解Mysql 高可用方案 之 Failover mha

在分布式系统中,我们往往会考虑系统的高可用,对于无状态程序来讲,高可用实施相对简单一些,纵向、横向扩展起来相对容易,然而对于数据密集型应用,像数据库的高可用,就不太好扩展。我们在考虑数据库高可用时,主要考虑发生系统宕机意外中断的时候,尽可能的保持数据库的可用性,保证业务不会被影响;其次是备份库,只读副本节点需要与主节点保持数据实时一致,当数据库切换后,应当保持数据的一致性,不会存在数据缺失或者...

weixin_33699914的博客 552
上一篇: PFP, CPA, CPS, CPM, CPC, CPL, CPP, CPR概念及其特点
下一篇: MySQL高可用性大杀器之MHA
mousever
博客等级 码龄19年 231粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值