高可用MySQL MHA介绍

MySQL MHA介绍

MHA简介

MHA是一位日本MySQL大牛用Perl写一套MySQL故障切换方案,来保证数据库系统的高可用,在宕机的事件内(通常10-30秒),完成故障转意,部署MHA,可避免主从一致性问题,节约购买新服务器的费用,不影响服务器性能,易安装,不改变现有部署

MHA在生产环境的作用

一主多从的环境下,MySQL的主从复制是异步或是半同步。
Master发生故障的时候,有可能一部分(或者全部)的Slave未能获取到最新的binlog,造成Slave之间的binlog转发发生偏差。
如下图所示,Master宕机之后,id=102的binlog未能被发送到任何一个Slave上,id=101的binlog只有save2上有,slave3上未能收到id=100和id-101的binlog
如果想要正确恢复:
  • Master必须发出的ID=102的binlog
  • 还要消除各个Slave之间的差异性
MHA可以全自动的处理以上这些

MHA架构

可实现master工作状态的监控以及宕机时的故障转移
要求:MySQL版本要在5.0以上

MHA原理

1、等待SQL线程执行完毕
2、解析最新的Slave上的中继日志(relay log)的日志头(log Header),为其他各个服务器确定出差异位置
3、将i1–>i2–>X 全部组成一个二进制日志

MHA的主要特性

  • 从master的监控到故障转移全部都能自动完成,故障转移也可手动执行
  • 可在秒级单位内实现故障转移
  • 可将任意Slave提升至master
  • 具备在多个点上调用外部脚本(扩展)的技能,可以用在电源OFF或者IP地址的故障转移上。
  • 安装和卸载不用停止当前的mysql进程
  • MHA 自身不会增加服务器负担,不会降低性能,不用追加服务器
  • 不依赖Storage Engine
  • 不依赖二进制文件的格式(不论是statement模式还是Row模式)

拓展性

  • seconary_check_script
  1.   调用该脚本,从多个网络路径判断MASTER是否宕机
  2.   MASTER连接错误时会被调用
  3.   MHA标配的脚本masterhaseconarycheck方便
  • shutdown_script
  1.   电源强制OFF等
  2.   故障转移前的瞬间被调用
  3.   SSH可以链接到的情况下mysqld,mysqld_safe强制kill,ssh连不到的情况下关闭电源
  • master_ip_failover_script
  1.   MASTER的IP地址更新,新建和应用程序连接所需要的用户
  2.   故障转移前的瞬间和转移到新MASTER(差异反映结束后)被调用
  3.   根据用途的不同来写脚本可以实现不需要更改应用程序端就可以连接到新的MASTER
  4.   MASTER IP使用虚拟IP的场合
  将VIP让给新的MASTER
5.   用catalog database等来管理MASTER的IP地址的场合  
   更新该catalog database 中的信息
  •  report_script 发邮件通知故障转移成功或失败等的详细情况
  1.   故障转移结束后被调用

案例分析

  • 在DeNA的服务中(主要是社交游戏),针对有超过150组(对)MASTER/SLAVE的服务器引入MHA
  • MySQL一般不会出现服务宕机,通常是由OS和H/W故障引起
  • 拓展

    检测MASTER是否宕机

除了Manager会对MASTER进行监控外,另外还通过其他两处的远程数据中心来检测是否可以连接到MASTER

    强制宕机MASTER

ssh可以连接到的情况下用kill -9 mysqld mysqld_safe,ssh连接不到的情况下ipmitool等工具强制关闭电源。
 
  • 针对OS挂掉的故障转移,检测系统是否挂掉需要10秒,故障转移仅需4秒
MASTER的生死判定
3*4-3 (9秒-12秒)

  判定是否可以进行故障转移

默认情况,只有其他所有的SLAVE都存货的情况下才进行故障转移
检测SLAVE,判断其工作状态(不到1秒)

  故障转移处理

  1. 强制将显著的MASTER关机
  2. SSH可以连接到的情况下,将有差异的二进制日志保存下来
  3. 确定新MASTER
  4. 将重新MASTER的IP地址有效化
  5. 重开其他的SLAVE从新的MASTER之间的主从复制

准备工作

一个可以写的MASTER和多个SLAVE或只读MASTER

当MASTER崩溃时,MHA会修复SLAVE之间的一致性问题。另外,MHA会尝试从崩溃的MASTER保存未能发送的二进制日志并应用到所有Slave。如果仅有一台SLAVE服务器,就不需要担心SLAVE之间的一致性问题。但是即使只有一台SLAVE服务器,在SSH可以连通的情况下,MHA在MASTER崩溃时抢救日志上也会非常有帮助,当然,通过半同步也可以解决这个问题。
从MHA Manager 0.52 开始支持多个MASTER(multi master)的复制。下面是MHA在多MASTER复制时注意的事项
  • 只允许有一个MASTER(可写)。在其他MASTER上必须设置MySQL全局变量”read-only=1″
  • 缺省情况下,所有被管理的服务器(在配置文件中定义的服务器)应该是2层级联复制。
在0.52版本以前,MHA仅在所有SLAVE都从同一个MASTER上进行复制才能进行检测,监控和故障转移操作。也就是说MHA不支持多主的配置形式。一般情况下,只要MHA可以管控自动故障转移,使用多MASTER配置的意义会很有限,比如在线模式更改。如果只是尝试使用多MASTER配置(比如仅仅为了在线模式更改)仅需在操作期间停止MHA并配置多主设置。当操作结束后,重新改为单主多从的配置,并重启MHA。

管理3层或更多曾的及联复制环境

MHA默认不支持三次或更多曾的级联复制架构(比如Master->Master2->Slave3)。MHA仅在SLAVE直接从当前主要MASTER进行复制时,才会进行故障转移和恢复操作。MHA可以管理MASTER1和MASTER2并且当MASTER1崩溃提升MASTER为主MASTER,但是MHA不能监控和恢复SLAVE3,因为SLAVE3从不同的MASTER(MASTER2)上进行主从复制。为了让MHA在这种架构下能进行工作,需要以下设置:
  • 在MHA的配置文件中设置MASTER和二层级联中的主机(MASTER1和MASTER2)
  • 使用multi_tier_slave=1 参数并在MHA配置文件中设置所有主机。
不管在那种情况中,MHA都只管理主MASTER和第二层的级联SLAVE,即使MASTER崩溃,MASTER2会成为主要MASTER,从MASTER进行复制的SLAVE依然可以运行

MySQL5.0或更高的版本

MHA支持MySQL5.0或更高的版本。MHA不支持MySQL4.1,因为MySQL5.0开始,二进制日志的格式发生了改变(binlog v4) MHA分析二进制日志并确定位置点时止支持v4版本,所以MySQL4.1 在这里不能工作。MySQL5.0或更高版本中的mysqlbinlog同样也需要v4版本的binlog格式。在早起的MySQL版本中主从复制处理存在一些非常严重的问题,所以高度推荐使用高版本的MySQL.特别是如果你还在使用MYSQL 5.06.0 以前的版本,请考虑升级

在候选MASTER 上必须开启log-bin

如果当前SLAVE未设置log-bin,很明显他们都不能成为MASTER,MHA Manager内部将会检查log-bin的设置,不会将未开启binlog的Slave提升为MASTER、如果当前的Slave都没有设置log-bin,MHA将会不尽兴故障转移

在所有服务器上二进制日志和中继日志过滤规则必须一致

所有服务器上的主从复制过滤规则(binlog-do-db,replicate-ignore-db等)MHA在启动时检查过滤规则,如果发现各服务器之间的配置不一致将不会进行监控或故障转移

在被选MASTER上必须存在具有复制权限的用户

当故障转移完成后,所有Slave将执行CHANGE MASTER TO 语句。必须存在一个具有复制权限的用户才能进行复制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xtrabackup安装以及应用

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。 xtrabackup官方网址:https://www.percona.com/downloads/XtraBackup/MySQL Ba…

MySQL双主配置

双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步。对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致。 这样做的好处多。 1. 可以做灾备,其中一个坏了可以切换到另一个。 2. 可以做负载均衡&…

DSPBuilder笔记

一、位宽设置 在DSPBuilder中,数据在内部采用二进制定点数表示方法,数据可以设置成无符号整数、有符号整数和有符号小数等,其中有符号数由符号位、整数位和小数位组成(有符号整数的小数位为0),位宽根据需求…

MySQL主从复制原理、半同步操作步骤及原理

1.1 企业Linux运维场景数据同步方案 1.1.1 文件级别的异机同步方案 1、scp/sftp/nc 命令可以实现远程数据同步。2、搭建ftp/http/svn/nfs 服务器,然后在客户端上也可以把数据同步到服务器。3、搭建samba文件共享服务,然后在客户端上也可以把数据同步到服…

基于.Net 写我自己的Ajax后台框架AjaxFramework

小小目录: 为什么要写自己的Ajax后台框架 框架的简单设计说明 框架如何使用 框架使用效果图 框架的优缺点 框架源码下载1、为什么要写自己的Ajax后台框架 现在Ajax在web应用方面已经用的稀巴烂了,如果你做一个网站没有用到ajax都不好意思拿出手&…

MySQL备份恢复与日志

MySQL 数据库的备份与恢复 1.1 备份数据的意义 第一是保护公司的数据,第二是网站7*24小时提供服务1.2 备份单个数据库参数使用 MySQL数据库自带了一个很好用的备份命令,就是mysqldump,它的基本使用如下;语法:mysqldum…

MySQL入门介绍

数据库介绍 1.1 什么是数据库? 简单的说,数据库(英文Dtabase)就是一个存放数据的仓库,这个仓库是按照一定的数据结果(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的、我们可以通…

zoj 2526(一道很好的最短路应用题)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId1538 题意:最短路问题,但是要求出最短路的条数,同时要求出所有可能的最短路选择中javabean最多的情况。 思路:求到终点的最短路径用Dijkstra&am…

MySQL常用命令大全

登录MySQL方法 单实例MySQL登录的方法 mysql #刚装完系统无密码情况登录方式,不需要密码 mysql -u root #刚装完系统无密码的情况登录 mysql -uroot -p #这里标准的dba命令行登录 mysql -uroot -poldboy #非脚本里一般不这样用,密码明文会泄露密码…

服务器安全之iptables iptables

服务器安全之iptables 感谢老男孩老师为我们讲解iptables 优化之路 iptables防火墙简介 Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的安全自由的**基于包过滤的防火墙工具**,它的功能十分强大&#xff0…

MC新手入门(三十)------ 逻辑运算符和表达式

游戏设计中提供了三种逻辑运算符: 1)&& 与运算 2)|| 或运算 3) !非运算 游戏设计中我们常常要用到上面的逻辑运算,例如:当在双人游戏中都要实现两人同时存活才能过关,…

Nagios 配置及监控

Nagios 监控 在互联网日益发展的今天,监控的重要性已经不言而喻。可能打开一个URL要经过6-7层的处理,如果出了问题而没有监控将很难定位到问题所在。那哪些内容需要监控呢? 1.本地资源 (1) 负载:uptime; (2) CPU&…

SSH 配置

SSH 批量管理 SSH介绍 SSH是Secure Shell Protocol的简写,由IETF网络工作小组(Network working Group)指定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传…

服务器重启导致无法启动MySQL

今天服务器受到DDOS攻击,笔者脑残重启了一下服务器。结果造成MySQL服务器无法启动mysql日志见下图。160803 17:43:47 mysqld_safe Starting mysqld daemon with databases from /application/mysql/data160803 17:43:47 [Note] /application/mysql/bin/mysqld (mysq…

架构师之DNS实战

架构师 DNS实战 老男孩教育 DNS简介 1. DNS的出现及演化 网络出现的早起是使用IP地址通讯的,那是就几台主机通讯。但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和W…

打包jar文件后的spring部署及hibernate自动建表经验总结

楔子 用springhibernate做一个服务器运行程序,在部署到服务器时(打包成jar,在window server2008下运行),出现了以下两个纠结问题: 1. 加载不了Spring容器 2. hibernate.hbm2ddl.auto 到了服务器不能自动建表…

我是一个线程 [转]

我是一个线程,我一出生就被编了个号:0x3704,然后被领到一个昏暗的屋子里,在这里我发现了很多和我一模一样的同伴。 我身边的同伴0x6900 待的时间比较长,他带着沧桑的口气对我说:“我们线程的宿命就是处理包…

自动化运维之–Cobbler

Cobbler 自动化 Cobbler简介 Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows。该工具使用python开发,小巧轻便(才15k行python代码),使用简单的命令即可完成PXE网络安装环境的配置&…

开源jumpserver 堡垒机搭建

一、环境 CentOS 6.x x86_64 mini service iptables stop 关闭SELinux的方法: 修改/etc/selinux/config文件中的SELINUX”” 为 disabled ,然后重启。 如果不想重启系统,使用命令setenforce 0 1.指定yum源 wget -O /etc/yum.repos.d/e…

Shell 变量及函数讲解 [2]

Shell 变量的输入 Shell变量除了可以直接赋值或脚本传参外,还可以使用read命令从标准输入获得,read为bash内置命令,可以通过help read查看帮助【语法格式】read [参数] [变量名]【常用参数】-p prompt:设置提示信息-t timeout&…