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

MySQL复制是异步或者半同步的。当master故障时,一些slave可能并没有收到最新的relay log,也就意味着每个slave可能处于不同的状态。手动处理这些一致性问题是小事,因为不修复这些问题,就不能开始复制。但是手动修复这些问题,花费一个小时或更多的时间并不少见。

一主一从

如果架构是一主一从,就不会出现一部分slave的状态落后于最新的slave的问题。当master出现故障,可以将应用的流量全部发送给新的master(原来的slave)。故障切换很容易解决。但是会有下面的问题。

首先,不能扩展读流量。在很多情况下,可能会运行一些重要的操作,比如备份、分析查询、批量处理。这可能会导致slave的性能问题。如果只要一个slave,当这个slave出现故障后,master必须处理所有这些流量。

其次,可用性问题。如果master出现故障,只剩下一台服务(原来的slave成为主),就成为了单点故障问题。为了创建一个新的slave,需要在线备份,然后存储到新的slave上并立即启动slave。但是这些操作通常会花费数小时(甚至是不止一天才能完成复制)。在一些重要的应用上,可能忍受不了数据库这么长时间有单点故障问题。并且,在线备份会大大增加master的I/O负载,因此在高峰期进行备份是很危险的。

双主多从

双主多从也是常见的架构。如果当前的master出现故障,备用的master就会变为新master。大很多场景下,备用的master都配置为只读。

但这不总是作为master故障切换解决方案运行的。当目前的master出现故障,余下的slave可能没有接收到全部的relay log,因此在slave之间解决一致性问题仍需要其它解决方案。

如果不能忍受一致性问题并且还想立即启动服务。只需要将备用的master作为新的master,并且抛弃剩余的slave。之后再从这个新的master做线上备份创建新的slave。但是这个方法和前面提到的一主一从的发法有同样的问题。剩余的slave不能进行读扩展和进行冗余的目的。

另外,使用双主(一个只读)并且每个master都至少有一个从也是可能的。

至少一个从可以进行复制,如果目前的master出现故障。但是事实上,很多使用者都不会采用这种架构,因为最大的缺点是复杂性。在这种架构中使用了三层复制。管理三层复制并不容易。例如,如果备用master出现故障,备用master的slave就无法继续进行复制。很多情况下,必须重新配置备用master和它的slave。重要的是,在这种架构中,必须要使用至少4台服务器。

心跳+DRBD

使用心跳(Heartbeat)+DRBD+MySQL是非常常见的HA解决方案。但是这个解决方案有一些严重的问题。

第一个问题是开销,特别是想运行大量MySQL复制环境的时候。心跳+DRBD是主用/备用解决方案,因此需要一个不处理任何应用流量的被动(standby)master。被动服务器不能被用来进行读扩展。通常,你至少需要4台MySQL服务,一个主动(active)master,一个被动(passive)master,两个slave。

第二个问题是停机。因为心跳+Heartbeat是active/standby集群,因此如果active server出现故障,故障恢复会发生在passive server上。这可能需要花费很长的时间,特别是没有用InnoDB插件。即使使用了InnoDB插件,只花费几分钟在passive server开始接收访问连接的情况并不常见。除了故障恢复时间,在故障恢复后,热身(warm-up)(填充数据到缓冲池)也要花费时间,因为在passive上,数据库/文件系统缓存是空的。在实际中,需要一个或更多额外的slave来处理足够的读流量。在warm-up期间,由于还粗是空的,因此写性能会显著下降。

第三个问题是写性能下降或一致性问题。为了保证active/passive高可用集群运行,在每次commit必须把事务日志(二进制日志和InnoDB日志)刷新到磁盘,因此必须设置innodb-flush-log-at-trx-cmmit=1和sync-binlog=1。但是sync-binlog=1会降低写性能,因为在当前的MySQL版本fsync()是连续的(如果sync-binlog是1,组提交就会打破)。大多数情况下,不会设置sync-binlog=1。但是如果sync-binlog=1没有设置,当active master故障,新的master(之前的passive server)可能会丢失已经被发送到slave上的二进制日志事件。假如,master出现故障,并且slave A接收到mysql-bin.00123的1500位置。如果binlog数据近刷新到1000位置到磁盘,新的master仅只有mysql-bin.00123到1000位置并且创建新的二进制文件mysql-bin.00124。如果出现这种情况,由于新的master没有mysql-bin.00123的1500位置,slave A就不能进行复制了。

第四个问题是复杂性。对于很多用户来说,安装/配置心跳和DRBD是不简单的。在很多部署环境,配置DRBD经常需要重建系统分区,这在很多情况下是不容易的。另外,也需要在DRBD和Linux内核层有足够的经验。如果执行了一个错误的命令(比如在passive节点执行了drbd –overwrite-data-of-peer)非常容易损坏生产数据。当使用DRBD,一旦出现磁盘I/O层的问题,对于大多数DBA来说,解决这个问题是很难的。

MySQL集群

MySQL集群真正实现了高可用解决方案,但是必须使用NDB存储引擎。大多数情况下都是使用InnoDB,因此无法使用MySQL集群的优势。

  • 半同步复制

半同步复制大大降低了”binlog仅存在故障master上”的风险。这对避免数据的丢失有很大的帮助。但是半同步复制并没有解决一致性问题。半同步复制保证在master提交时至少有一个(并不是所有)slave接收到binlog事件。仍有可能一些slave没有接收到binlog事件。如果没有将最新的slave上的relay log应用到非最新的slave上,slave就无法处于一致性状态。

MHA解决了一致性问题,因此通过将半同步复制和MHA一起使用,几乎没有数据丢失和slave保持一直就能实现。

全局事务ID(GTID)

全局事务ID的目的和MHA想要实现的是基本相同的,但是全局事务ID包括的更多。MHA只能支持两层复制,但是全局事务ID可以支持很多层复制的环境,因此即使第二层复制故障了,仍然可以恢复三层复制。

从MySQL5.6开始就开始支持GTID了。Oracle的官方工具mysqlfailover支持带GTID的master故障切换。从MHA的0.56版本开始,也支持基于GTID的故障切换。MHA会自动检测mysqld是否在GTID运行,如果GTID开启,MHA就实现带GTID的故障切换,如果没有启用,MHA就使用基于relay log的故障切换。

时间: 2024-11-05 22:06:16

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

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

MHA简介 MHA是由日本人youshimaton(原就职于DeNA,现就职于FaceBook)开发的比较成熟的MySQL高可用方案.MHA能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性.目前淘宝也正在开发相似产品TMHA,目前已支持一主一从. MHA架构 MHA由MHA Manager和MHA Node组成.如下图: MHA Manager 运行一些工具,比如masterha_manager工具实现自动监控MySQL Master和实现master故障切换,其它工具实现

整个MHA+keepalived+lvs+mysql高可用架构配置说明

整个MHA+keepalived+lvs+mysql高可用架构配置说明1.1. 环境简介1.1.1.vmvare虚拟机,系统版本CentOS7.5 x86_64位最小化安装,mysql的版本5.7.21,1.1.2.虚拟机器的ssh端口均为默认22,1.1.3.虚拟机的iptables全部关闭,1.1.4.虚拟机的selinux全部关闭,1.1.5.虚拟机服务器时间全部一致 ntpdate 0.asia.pool.ntp.org1.1.6.3台机器的ssh端口为22**1.2.此次试验采用的是3

秒级容灾,UCloud 内网高可用服务之三代架构演进

快节奏的生活,任何的业务异常 / 中断都是不能容忍的. 在无人化超市选购完成进行结账时,结账页面突然卡住,无法完成购买操作.这时该选择放弃手中的商品 or 继续等待? 酒店办理入住时,管理系统突然崩溃,无法查询预订记录,导致办理入住受到影响,酒店前台排起了长队-- 高可用与我们每个人都是息息相关的,在即将到来的双十一,更是对各个电商的业务可用性提出了更高的要求.对此,UCloud 提供基于内网 VIP 的高可用服务,内网 VIP 通过前后三代广播集群的设计演进,解决了复杂异构 Overlay 网

第22章 mysql 高可用MMM、MHA

2015-10-25 目录 参考资料 [1] 唐汉明.深入浅出MySQL 数据库开发.优化与管理维护(第2版)[M].北京:人民邮电出版社,2014 [2] Schwartz.高性能MySQL(第3版)[M].北京:电子工业出版社,2013 [3] 分享MYSQL中的各种高可用技术(源自姜承尧大牛) [4] MHA工作原理 [5] 技术实战:基于 MHA 方式实现 MySQL 的高可用(1) [6] mysql HA方案: MHA [7] mysql高可用方案MHA介绍 [8] Mysql5.5

浅谈千万级PV/IP规模高性能高并发网站架构(转自老男孩)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/736710 如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是数据库及分布式存储). 如:能缓存在用户电脑本地的,就不要让他去访问CDN. 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了.能访问静态服务器的,就不要去访问动态

(转)浅谈千万级PV/IP规模高性能高并发网站架构

浅谈千万级PV/IP规模高性能高并发网站架构 原文:http://blog.51cto.com/oldboy/736710 文章架构简图:   高并发访问的核心原则其实就一句话"把所有的用户访问请求都尽量往前推". 如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是数据库及分布式存储). 如:能缓存在用户电脑本地的,就不要让他去访问CDN. 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务

MySQL高可用系列之MHA(二)

一.参数说明 MHA提供了一系列配置参数,深入理解每个参数的具体含义,对优化配置.合理使用MHA非常重要,很多高可用性也都是通过合理配置一些参数而实现的. MHA包括如下配置参数,分别说明如下: hostname/ip/port (Local Only) hostname为MySQL Server的IP地址或主机名: ip为MySQL Server的IP地址,缺省从$hostname中获取:port为MySQL Server的端口号,缺省为3306 ssh_host/ssh_ip/ssh_por

MySQL高可用之MHA部署

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用. MHA里有两个角色一个是MHA Node(数据节点)另一个是MHA Manager(管理节点). MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台sla

MySQL高可用之MHA—MHA介绍

MHA简介 MHA是由日本人yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的MySQL高可用方案.MHA能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性.目前淘宝也正在开发相似产品TMHA,目前已支持一主一从. MHA架构 MHA由MHA Manager和MHA Node组成.如下图 MHA Manager 运行一些工具,比如masterha_manager工具实现自动监控MySQL Master和实现master故障切换,其它工具实现手动实