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的故障切换。

drbd mysql mha_浅谈秒级故障切换!用MHA轻松实现MySQL高可用(三)相关推荐

  1. mysql 郝朝阳_秒级故障切换!用MHA轻松实现MySQL高可用(三)

    作者介绍郝朝阳,运维工程师,专注于运维自动化的实现.现就职于宜搜科技,负责前端运维工作.虽然多方面开花,却致力于形成自己运维体系思想. 在上一篇的MHA介绍中提及过其它一些MySQL的高可用解决方案, ...

  2. 浅谈千万级PV/IP规模高性能高并发网站架构

    原创作者:老男孩linux实战运维培训机构 老男孩 QQ:31333741    说明:几个月前老男孩发过一次类似的文章,本次为了参加一个朋友邀请的活动,稍微完善了一下,欢迎各位同仁一起交流网站架构技 ...

  3. 浅谈千万级高性能高并发网站架构

    浅谈千万级PV/IP规模高性能高并发网站架构 高并发访问的核心原则其实就一句话"把所有的用户访问请求都尽量往前推". 如果把来访用户比作来犯的"敌人",我们一定 ...

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

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/736710 如果把来 ...

  5. MYSQL优化浅谈,工具及优化点介绍,mysqldumpslow,pt-query-digest,explain等

    MYSQL优化浅谈 msyql是开发常用的关系型数据库,快速.稳定.开源等优点就不说了. 个人认为,项目上线,标志着一个项目真正的开始.从运维,到反馈,到再分析,再版本迭代,再优化- 这是一个漫长且考 ...

  6. android x86 支付宝,亿级APP支付宝在移动端的高可用技术实践

    原标题:亿级APP支付宝在移动端的高可用技术实践 " 对于移动技术而言,2017 年是继往开来之年.一方面是移动技术领域进入深水区,另一方面移动技术边界和内涵被不断重塑. 阿里巴巴希望进一步 ...

  7. mysql key_len_浅谈mysql explain中key_len的计算方法

    mysql的explain命令可以分析sql的性能,其中有一项是key_len(索引的长度)的统计.本文将分析mysql explain中key_len的计算方法. 1.创建测试表及数据 CREATE ...

  8. 【①MySQL】浅谈数据库系统:MySQL的简介与安装配置

    前言 欢迎来到小K的MySQL专栏,本节将为大家带来MySQL的简介与安装配置的详细讲解~ 目录 前言 一.数据库系统概述 数据(Data) 数据库(Database) 数据库管理系统(Databas ...

  9. mysql kingshard_浅谈 Kingshard MySQL 中间件

    实现功能: 可以实现MySQL的分表,以及分表之后的增加,删除,修改,查询等MySQL的一系列操作.可以扩展MySQL的主从架构,方便MySQL架构的分布式扩展. 实验测试架构为在两个MASTER上面 ...

  10. MySQL MHA: 一种master高可用的主从复制解决方案

    2019独角兽企业重金招聘Python工程师标准>>> 大纲 前言 MHA的架构 环境部署 实验步骤 总结 前言 上篇文章我们实现了MySQL的主从复制, 但是我们之前就说过, 主从 ...

最新文章

  1. 图像偏色检测算法,速度快,效果好,共享给大家。
  2. 包r语言_R语言代码共享:制作R包
  3. aspx练习备忘录#想锤自己两拳#1
  4. oracle orm 实例 java_Oracle数据库的JDBC查询实例
  5. 为什么不建议学python贴吧_为什么那么多自学Python的后来都放弃了,分析起来就这些原因...
  6. Intergration Service(2005)备忘(之)数据传输处理
  7. 分享一个免杀的netcat.exe
  8. 剑指offer-06-旋转数组的最小数字
  9. sin35度等于多少怎么用计算机算,sin35度等于多少_tan35°等于几分之几
  10. Android MTK TP Driver 触屏驱动
  11. 开源GIS--geos实现空间连接
  12. 【java基础】三目表达式
  13. 电大c语言2017年1月,电大1253+C语言程序设计A(1月)小抄参考
  14. 泰坦尼克号生存预测(超详细)
  15. 目标检测——梯度均衡机制GHM(Gradient Harmonized Mechanism)的理解
  16. Python plot() 画图标记 marker
  17. 动漫学日语《灌篮高手》(更新中)
  18. 软件测试mysql面试题:int(20)中20的涵义?
  19. 20162316刘诚昊 第七周学习报告
  20. 快速高效的阅读一篇AI论文方法

热门文章

  1. 信息文档分工会在运动会象棋比赛中夺得佳绩
  2. mysql.sock文件丢失的一个原因
  3. 介绍一下和AspNetPager结合的不错的分页方案
  4. lr之RTE脚本(telnet方式访问水木清华)
  5. idea添加maven启动
  6. 易到起死回生的背后,谁在指点江山?
  7. Maven具体解释之------maven版本号管理
  8. Buildroot make网卡interfaces文件被修改
  9. springboot定制404错误信息
  10. Android开发:由模块化到组件化(一)