秒级故障切换!用MHA轻松实现MySQL高可用(一)

作者介绍

郝朝阳,运维工程师,专注于运维自动化的实现。现就职于宜搜科技,负责前端运维工作。虽然多方面开花,却致力于形成自己运维体系思想。

 

  1 MHA简介

MHA是由日本人youshimaton(原就职于DeNA,现就职于FaceBook)开发的比较成熟的MySQL高可用方案。MHA能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。目前淘宝也正在开发相似产品TMHA,目前已支持一主一从。

  2 MHA架构

MHA由MHA Manager和MHA Node组成。如下图:

  3 MHA Manager

运行一些工具,比如masterha_manager工具实现自动监控MySQL Master和实现master故障切换,其它工具实现手动实现master故障切换、在线mater转移、连接检查等等。一个Manager可以管理多个master-slave集群。

  4 MHA Node

部署在所有运行MySQL的服务器上,无论是master还是slave。主要作用有三个。

Ⅰ、保存二进制日志

如果能够访问故障master,会拷贝master的二进制日志

II、应用差异中继日志

从拥有最新数据的slave上生成差异中继日志,然后应用差异日志。

III、清除中继日志

在不停止SQL线程的情况下删除中继日志

  5 MHA工作原理

当master出现故障时,通过对比slave之间I/O线程读取masterbinlog的位置,选取最接近的slave做为latestslave。其它slave通过与latest slave对比生成差异中继日志。在latest slave上应用从master保存的binlog,同时将latest slave提升为master。最后在其它slave上应用相应的差异中继日志并开始从新的master开始复制。

在MHA实现Master故障切换过程中,MHA Node会试图访问故障的master(通过SSH),如果可以访问(不是硬件故障,比如InnoDB数据文件损坏等),会保存二进制文件,以最大程度保证数据不丢失。MHA和半同步复制一起使用会大大降低数据丢失的危险。

  6 当前高可用方案

  • Heartbeat+DRBD

开销:需要额外添加处于被动状态的master server(并不处理应用流量)

性能:为了实现DRBD复制环境的高可用,innodb-flush-log-at-trx-commit和sync-binlog必须设置为1,这样会导致写性能下降。

一致性:在master上必要的binlog时间可能会丢失,这样slave就无法进行复制,导致产生数据一致性问题。

  • MySQL Cluster

MySQL Cluster真正实现了高可用,但是使用的是NDB存储引擎,并且SQL节点有单点故障问题。

  • 半同步复制(5.5+)

半同步复制大大减少了“binlog events只存在故障master上”的问题。

在提交时,保证至少一个slave(并不是所有的)接收到binlog,因此一些slave可能没有接收到binlog。

  • 全局事务ID

在二进制文件中添加全局事务ID(global transaction id)需要更改binlog格式,在5.1/5.5版本中不支持。

在应用方面有很多方法可以直线全局事务ID,但是仍避免不了复杂度、性能、数据丢失或者一致性的问题。

  • PXC

PXC实现了服务高可用,数据同步时是并发复制。但是仅支持InnoDB引擎,所有的表都要有主键。锁冲突、死锁问题相对较多等等问题。

  7 MHA的优势

1、故障切换快

在主从复制集群中,只要从库在复制上没有延迟,MHA通常可以在数秒内实现故障切换。9-10秒内检查到master故障,可以选择在7-10秒关闭master以避免出现裂脑,几秒钟内,将差异中继日志(relay log)应用到新的master上,因此总的宕机时间通常为10-30秒。恢复新的master后,MHA并行的恢复其余的slave。即使在有数万台slave,也不会影响master的恢复时间。

DeNA在超过150个MySQL(主要5.0/5.1版本)主从环境下使用了MHA。当mater故障后,MHA在4秒内就完成了故障切换。在传统的主动/被动集群解决方案中,4秒内完成故障切换是不可能的。

2、master故障不会导致数据不一致

当目前的master出现故障是,MHA自动识别slave之间中继日志(relay log)的不同,并应用到所有的slave中。这样所有的salve能够保持同步,只要所有的slave处于存活状态。和Semi-Synchronous Replication一起使用,(几乎)可以保证没有数据丢失。

3、无需修改当前的MySQL设置

MHA的设计的重要原则之一就是尽可能地简单易用。MHA工作在传统的MySQL版本5.0和之后版本的主从复制环境中。和其它高可用解决方法比,MHA并不需要改变MySQL的部署环境。MHA适用于异步和半同步的主从复制。

启动/停止/升级/降级/安装/卸载MHA不需要改变(包扩启动/停止)MySQL复制。当需要升级MHA到新的版本,不需要停止MySQL,仅仅替换到新版本的MHA,然后重启MHA Manager就好了。

MHA运行在MySQL 5.0开始的原生版本上。一些其它的MySQL高可用解决方案需要特定的版本(比如MySQL集群、带全局事务ID的MySQL等等),但并不仅仅为了master的高可用才迁移应用的。在大多数情况下,已经部署了比较旧MySQL应用,并且不想仅仅为了实现Master的高可用,花太多的时间迁移到不同的存储引擎或更新的前沿发行版。MHA工作的包括5.0/5.1/5.5的原生版本的MySQL上,所以并不需要迁移。

4、无需增加大量的服务器

MHA由MHA Manager和MHA Node组成。MHA Node运行在需要故障切换/恢复的MySQL服务器上,因此并不需要额外增加服务器。MHA Manager运行在特定的服务器上,因此需要增加一台(实现高可用需要2台),但是MHA Manager可以监控大量(甚至上百台)单独的master,因此,并不需要增加大量的服务器。即使在一台slave上运行MHA Manager也是可以的。综上,实现MHA并没用额外增加大量的服务。

5、无性能下降

MHA适用与异步或半同步的MySQL复制。监控master时,MHA仅仅是每隔几秒(默认是3秒)发送一个ping包,并不发送重查询。可以得到像原生MySQL复制一样快的性能。

6、适用于任何存储引擎

MHA可以运行在只要MySQL复制运行的存储引擎上,并不仅限制于InnoDB,即使在不易迁移的传统的MyISAM引擎环境,一样可以使用MHA。


时间: 2024-09-13 10:45:24

秒级故障切换!用MHA轻松实现MySQL高可用(一)的相关文章

秒级故障切换!用MHA轻松实现MySQL高可用(二)

作者介绍   郝朝阳,运维工程师,专注于运维自动化的实现.现就职于宜搜科技,负责前端运维工作.虽然多方面开花,却致力于形成自己运维体系思想.   前提  由于MHA不会自动创建主从环境,所以要手动去部署主从环境,也可以在现有主从环境部署MHA.所有slave不要设置为只读,同时也要打开binlog.如果master故障后要切换到指定的slave上,该指定的slave打开binlog,设置可读写,其它不用设置打开binlog或设置只读也可.具体以自身架构为准. 架构     系统环境  #cat

秒级故障切换!用MHA轻松实现MySQL高可用(三)

作者介绍   郝朝阳,运维工程师,专注于运维自动化的实现.现就职于宜搜科技,负责前端运维工作.虽然多方面开花,却致力于形成自己运维体系思想.   在上一篇的MHA介绍中提及过其它一些MySQL的高可用解决方案,只是略微介绍了以下,在这里详细地介绍.   MySQL复制是异步或者半同步的.当master故障时,一些slave可能并没有收到最新的relay log,也就意味着每个slave可能处于不同的状态.手动处理这些一致性问题是小事,因为不修复这些问题,就不能开始复制.但是手动修复这些问题,花费

轻松构建Mysql高可用集群系统

一. MySQL复制的实现原理 MySQL支持单向.双向复制.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入一个二进制日志文件中,并创建一个索引文件以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,日志文件会通知主服务器,从服务器在日志中读取的最后一次成功更新的位置.接着,从服务器在上次成功更新的位置处开始进入更新操作.更新完成后从服务器开始进入等待状态,等待主服务器后续的更新. 需要注意的是:在进行复制时,所

优酷土豆资深工程师:MySQL高可用之MaxScale与MHA

讲师介绍 侯野优酷土豆资深数据库工程师  擅长Orale.MySQL故障诊断.性能调优,目前专注于MySQL的高可用技术. 曾任职于大连东软.清华紫光.触控科技等公司,服务过华夏银行.中国华能电力集团,担任OracleDBA.Oracle高级咨询顾问.    本次分享主要包括以下内容: 1.MySQL高可用方案 2.为什么选择MHA 3.读写分离方案的寻找以及为什么选择Maxscale 一.MySQL  Failover的方案 常见的Failover方案 MMM MMM缺点: Monitor节点

MySQL高可用在网易的最佳应用与实践

今天分享主要包括三方面内容:一是常见的MySQL高可用架构;二是分布式数据库高可用实践;三是基于keepalive的MySQL高可用改造.第一部分会介绍业界一些经典的MySQL高可用解决方案,第二部分和第三部分分别介绍网易在分布式数据库和单节点MySQL上的高可用运维实践. 一.常见的MySQL高可用架构 MySQL高可用主要涉及两个方面,一是客户端如何切换,如何自动failover,二是多个MySQL节点之间如何做数据同步.业界MySQL高可用的解决方案有很多,总结起来有几类:从客户端自动切换

MySQL高可用方案选型参考

本文由「MySQL中文网」原创,"MySQL中文"公众号是 http://imysql.com 的官方唯一公众号,微信首发. 欢迎关注「MySQL中文」公众号(ID: imysql_wx),我们会不定期推送MySQL相关原创干货. 本次专题是 MySQL高可用方案选型,这个专题想必有很多同学感兴趣. 高可用的意义以及各种不同高可用等级相应的停机时间我就不必多说了,直接进入主题. 可选MySQL高可用方案 MySQL的各种高可用方案,大多是基于以下几种基础来部署的: 基于主从复制: 基于

10款常见MySQL高可用方案选型解读

作者介绍 王松磊,现任职于UCloud,从事MySQL数据库内核研发工作.主要负责UCloud云数据库udb的内核故障排查工作以及数据库新特性的研发工作.   一.概述   我们在考虑MySQL数据库的高可用架构时,主要考虑如下几方面:   如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断. 用作备份.只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持一致. 当业务发生数据库切换时,切换前后的数据库内容应当一

MySQL 高可用浅析

MySQL 高可用浅析 对于多数应用来说,MySQL都是作为最关键的数据存储中心的,所以,如何让MySQL提供HA服务,是我们不得不面对的一个问题.当master当机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知master当机并进行相应的故障转移处理,都是需要我们好好思考的.这里,笔者将结合这段时间做的MySQL proxy以及toolsets相关工作,说说我们现阶段以及后续会在项目中采用的MySQL HA方案. (题图来自:comprendrechoisir.com) Repli

详解MySQL高可用MMM搭建方案及架构原理_Mysql

先来看看架构,如下图: 部署 1.修改hosts 在所有的服务器中执行相同的操作. vim /etc/hosts 192.168.137.10 master 192.168.137.20 backup 192.168.137.30 slave 192.168.137.40 monitor 2.添加mysql用户 只需要在所有的数据库端执行即可,监控端不需要. GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.137.%' IDEN