高可用mysql之MHA的原理
MHA 如何工作的?
MHA是如何工作的?
=======================================================================================================================
* 参见 https://code.google.com/p/mysql-master-ha/wiki/HowMHAWorks
- 创始人的ppt文档描述设计的原理 http://www.slideshare.net/matsunobu/automated-master-failover
尽管排版不是特别吸引人,但是确实涵盖了内部设计笔记,不过可能不是最新的。 - 源码参见
https://github.com/yoshinorim/mha4mysql-manager/tree/master/lib/MHA perl写的操作binlog的接口
https://github.com/yoshinorim/mha4mysql-node/tree/master/lib/MHA
https://github.com/ovaistariq/mha-helper python封装的工具脚本,用来调用perl写的命令接口。 * 如何辨别从哪个偏移量开始进行中继日志补偿?!
很久之前,MHA的作者使用mysqlbinlog来识别中继日志的偏移,但现在不用了,自己解析那个二进制文件的事件头部
就行了,就可以辨别事件的起始偏移量。
不适用mysqlbinlog的原因有几个,最主要是因为mysqlbinlog总是打印出所有事件的所有内容,不仅仅只是打印出事件头部,
但我们仅仅需要的是去分析头部而已。因为必要的定位信息都在头部,包括事件类型、master id、事件长度、下一个事件的偏移量。
事件体我们并不关心,那么,使用mysqlbinlog不仅在读取二进制日志时增加了性能开销,也让我们需要格外警惕一些与日志中的关键字
“撞衫”的sql语句,比如end_log_pos\# at等等。
为了避免错误的识别起始偏移信息,mysqlbinlog加上--base64-output=always选项是有帮助的,但是这个选项只在mysql 5.1和mysql 5.5
中支持,5.0不支持,5.6中被移除了。而且这个选项说不定会漏掉某些事件。
上面的行不通的话,只能逆向来搜索了,rotate事件是个好的地标。 * 快速的中继日志定位
假定待恢复的目标从库中的master_log_file:pos是mysqld-bin.000001:504810023,最新从库中的io线程的读头在 mysqld-bin.000001:504810689,
而且最新的中继日志文件是mysqld-relay-bin.000001并且超过了500M。目标从库和最新从库的IO线程读头只相差几百个字节。如果MHA从中继日志
头部开始解析,那么故障切换的时间就太长了。
$latest_mlf = Master_Log_File on the latest slave
$target_mlf = Master_Log_File on the recovery target slave
$latest_rmlp = Read_Master_Log_Pos on the latest slave
$target_rmlp = Read_Master_Log_Pos on the recovery target slave
$offset = $latest_rmlp - $target_rmlp
$filesize = File size of the latest relay log file on the latest slave if ($latest_mlf eq $target_mlf) && ($filesize > $offset),那么MHA就可以决定下来,起始恢复点是最新从库的最新中继文件中的
($filesize - $offset)偏移处, * 如何为待恢复的目标从库生成relaylog补偿和binlog补偿
总的来说,分三段来完成补偿:
- 目标从库的exec_master_log_pos到目标从库的read_master_log_pos
由于中继日志中待回放的事件必须组成一个完整的事务,begin和commit之间的所有内容,如果主库宕机前从库并未收到完整的事务事件,
那么exec_master_log_pos < read_master_log_pos,他们之间只是事务的一部分,没得到重放执行。
- 目标从库的read_master_log_pos到最新从库的read_master_log_pos
目标从库的中继日志可能落后于最新从库。
- 最新从库的read_master_log_pos到崩溃主库的binlog结尾处 之前,MHA的作者是每段都采用mysqlbinlog输出的,这样会带来两个问题:
- 在每个binlog文件开始处和每次mysqlbinlog输出的结尾处都添加rollback语句。需要显式过滤。
- 如果row-based event刚好被割裂到两个文件中,那么mysqlbinlog的输出可能不正确。
现在,改为三段都是通过直接解析二进制文件的事件头部来定位和搜索,接着将三段组合成一个大的二进制文件,然后再交给
mysqlbinlog来输出,只输出一次,方便过滤rollback,也没有了割裂row event的问题。
高可用mysql之MHA的原理的更多相关文章
- 高可用mysql之MHA源码剖析
* MHA的整个故障(离线)切换过程 - 检测主库的状态,确认是否崩溃. - 确认服务崩溃,保存binlog,推送到主控机,并可以强制关闭主库避免脑裂. - 找出数据最新的从库(也就是read_mas ...
- mysql实现高可用架构之MHA
一.简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA 在监控到 mas ...
- MySQL系列:高可用架构之MHA
前言 从11年毕业到现在,工作也好些年头,入坑mysql也有近四年的时间,也捣鼓过像mongodb.redis.cassandra.neo4j等Nosql数据库.其实一直想写博客分享下工作上的零零碎碎 ...
- (转)MySQL高可用架构之MHA
MySQL高可用架构之MHA 原文:http://www.cnblogs.com/gomysql/p/3675429.html 简介: MHA(Master High Availability)目前 ...
- MySQL高可用系列之MHA(二)
一.參数说明 MHA提供了一系列配置參数.深入理解每一个參数的详细含义,对优化配置.合理使用MHA非常重要.非常多高可用性也都是通过合理配置一些參数而实现的. MHA包含例如以下配置參数,分别说明例如 ...
- MySQL高可用集群MHA方案
MySQL高可用集群MHA方案 爱奇艺在用的数据库高可用方案 MHA 是目前比较成熟及流行的 MySQL 高可用解决方案,很多互联网公司正是直接使用或者基于 MHA 的架构进行改造实现 MySQL 的 ...
- mysql高可用架构之MHA,haproxy实现读写分离详解
MySQL高可用架构之MHA 一.运维人员需要掌握的MySQL技术: 1.基本SQL语句 2.基本的管理[库表数据的管理 权限的管理] 3.容灾 保证数据不丢失. 二.工作中MySQ ...
- centos 7 Atlas keepalived 实现高可用 MySQL 5.7 MHA环境读写分离
目录 简介 相关链接 环境准备 Atlas 环境 MySQL 集群环境 Atlas 安装 和 配置 为数据库的密码加密 修改配置文件 启动 Keepalived 安装配置 安装 master 配置 K ...
- 《高可用MySQL》1 – Windows环境下压缩版MySQL安装
近日在读O’REILIY系列的<高可用MySQL>, 自然少不了主从(Master-Slave)配置和横向扩展相关的内容.Master-Slave这东西吧,在许多公司都是标配,开发中基本天 ...
随机推荐
- jmeter解决不同线程组之间传递参数问题
首先在第一个线程组里讲你需要保存的值放入到jmeter的某个属性中,属性名名字自己定义,如上图的token , props.put("token", token),第二个参数必须是 ...
- C语言中 指向函数的指针 简介
引子:在学习CPrimerPlus的第十四章的14.13节中,遇到了如下三行文字,是有关指向函数的指针的,把我搞晕了. char * fump(); //返回指向char的指针的函数 char (* ...
- .NET WebAPI 实现图片上传(包括附带参数上传图片)
博主的项目,客户端是APP,考虑到以后也可能会应用到微信端.网站等,图片上传方法就需要兼容多端,并且以目前的设计,不允许非登录用户上传图片,就得在上传时解决附带参数上传图片的问题. 先来看看后台方法( ...
- 在ASP.NET Core中使用Angular2,以及与Angular2的Token base身份认证
注:下载本文提到的完整代码示例请访问:How to authorization Angular 2 app with asp.net core web api 在ASP.NET Core中使用Angu ...
- ORB-SLAM(五)优化
ORB-SLAM作为单目SLAM,其精度很大程度上决定于帧与帧之间的位姿优化的是否准确.因此优化(optimization)在ORB-SLAM里面扮演了很重要的角色.这一小节探讨一下ORB-SLAM里 ...
- linux安装adb
本文只针对centOS6.8,其他版本未测试 1.下载adb包 下载android sdk for linux(http://tools.android-studio.org/index.php/sd ...
- Picture intermediate frame ----- increase smooth
By YutaiHou
- linux安装php
接上篇:linux安装apache 一.安装php 先安装libxml2库 [root@ctxsdhy package]# yum -y install libxml2-devel 最新地址在:htt ...
- Nginx编译安装(Centos)
前言 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大 ...
- 【JavaScript】ArtTemplate个人的使用体验。
据说ArtTemplate是腾讯的,感觉这东西真不错,使用方便,用起来很简单,哈哈.腾讯也不完全只是坑爹啊. ArtTemplate 使用是,正常引入js,这个自然不用说.这东西啥时候使用呢?我觉得这 ...