MySQL高可用解决方案――从主从复制到InnoDB Cluster架构

这篇具有很好参考价值的文章主要介绍了MySQL高可用解决方案――从主从复制到InnoDB Cluster架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2024送书福利正式起航
关注「哪吒编程」,提升Java技能
文末送5本《MySQL高可用解决方案――从主从复制到InnoDB Cluster架构》

大家好,我是哪吒。

爱奇艺每天都为数以亿计的用户提供7x24小时不间断的视频服务。通过爱奇艺的平台,用户可以方便地获取海量、优质、高清的视频资源。但如果服务平台出现故障,会有大量的用户将无法正常播放视频,因此我们的应用服务以及数据库服务都必须具备高可用架构。

爱奇艺技术产品团队对各类应用划分了不同的重要等级,对不同重要等级的应用使用数据库服务提供了不同的SLA保障。比如S级应用RTO控制在分钟级别的保障;对A级应用RTO在10分钟级别的保障等。本文将主要介绍我们的MySQL高可用实现方案。

一、基于MHA二次开发

MHA是目前比较成熟及流行的MySQL高可用解决方案,很多互联网公司正是直接使用或者基于MHA的架构进行改造实现MySQL的高可用。MHA能在30秒内对故障进行转移,并最大程度地保障数据的一致性。MHA由两个模块组成:Manager 和 Node。

Manager部署在独立的机器上,负责检查MySQL复制状态、主库状态以及执行切换操作。Node运行在每台MySQL机器上,主要负责保存和复制master binlog、识别主库宕机时各Slave差异的中继日志并将差异的事务应用到其他的Slave,同时还负责清除Slave上的relay_log。

它的部署架构如下图所示:

mysql ha系统,搬砖工逆袭Java架构师,mysql,数据库,高可用,微服务
MHA虽然已经比较成熟,但也存在一些缺点:

  • 使用配置文件管理主备关系、不能重复切换
  • 实例增减需要重启Manager
  • Manager是单点,虽然有standby的节点,但不能自动切换

另外我们的MySQL部署环境复杂,存在跨DC跨地域的部署,新主机的选举需要更多的规则。并且集群数量较为庞大,如果直接采用MHA做高可靠用,会大大增加管理成本。因此我们自研了一套MySQL的高可用方案。

二、MySQL HA架构简介

爱奇艺自研MysQL HA系统由HA Master和HA Agent两部分组成。三个HA Master组成一个最小集群单元,这个最小集群单元对应MHA的Manager,通过raft协议实现高可用,解决Manager单点和不能重复切换的问题。HA Agent功能和MHA Node功能类似,负责责故障检测、解析和传输 binlog、清理 relay log 以 及负责 MGR 的高可用。

mysql ha系统,搬砖工逆袭Java架构师,mysql,数据库,高可用,微服务

1、HA Master

整个MySQL HA部分,体现出设计原则思路,有难点的部分重点如下。

mysql ha系统,搬砖工逆袭Java架构师,mysql,数据库,高可用,微服务
切换模块则负责具体的故障切换,通过定期轮训badinstance集合,对符合条件的实例进行切换。支持自动和手动两种切换方式。对于自动切换,需要在CMDB里配置好切换策略,可选同DC切换、跨DC切换还是跨地域切换。

切换流程如图所示:

mysql ha系统,搬砖工逆袭Java架构师,mysql,数据库,高可用,微服务
除了对主库支持故障切换外,也具备对从库故障切换的能力。在从库故障宕机时,通过检测故障,再操作域名的方式实现Slave的高可用。

2、HA Agent

Agent负责监控CMDB里状态为online的实例,通过检查mysqld进程是否存在等规则判断实例是否存活,如果判断实例宕机则向HA Master发送包含badinstance的RPC心跳。如果是机器宕机,HA Master会收到Agent的超时事件,并对心跳超时的Agent所在服务器上的实例进行切换。为了尽量避免网络抖动造成误切,我们把Agent超时时长设置为1分钟,1分钟内的闪断或者抖动不做切换。

Agent还负责对MGR的Primary节点进行监控和域名切换。MGR在主节点发生切换后,客户端需要去捕获这个切换信息,再把请求重新指向新的主节点,这对于业务来说不友好。因此我们给Agent增加一个功能,当发现主节点发生过切换后,就把源主节点上的域名重绑到新的主节点上,从而实现MGR故障切换对业务的透明。

mysql ha系统,搬砖工逆袭Java架构师,mysql,数据库,高可用,微服务

三、HA的选主规则

HA需要一套复杂的选主规则,用以适配我们复杂的部署环境,选主规则如下:

  1. 排除在bad slaves里的slave
  2. 选择所有latest slaves优先级最高的candidate master
  3. 如果从库没有设置优先级,选出所有非bad slaves的slave
  4. 根据切换策略,依次选择同DC→同region→跨region的slave
  5. 对满足条件的从库,排除从库所在机器Master个数和Slave个数太多的salve,在剩下的slave中选择机器剩余磁盘空间最大的slave

通过以上规则,选出一个最优的主进行切换。如果没有满足条件的slave,则会通过电话告警的方式通知DBA进行人工干预。

四、补全diff binlog

在Master切换过程中,会存在3种类型的diff binlog:

  1. 从库io thread接收到的relay log不完整,不是一个完整的事务或完整的binlog event
  2. lastest slave与其他slave存在的diff relay log
  3. 如果dead master机器还能访问, 则还包括dead master未发送的diff binlog

diff binlog的恢复顺序如图所示:

mysql ha系统,搬砖工逆袭Java架构师,mysql,数据库,高可用,微服务

如果是使用gtid复制,需要生成3种diff binlog文件,然后顺序apply diff binlog文件,恢复从库。非gtid复制,先change master到lastest slave,先让slave从lastest slave恢复数据,然后再apply dead master未发送的diff binlog 文件,完成binlog补齐。

五、数据一致性

如果采用半同步复制,且主库宕机瞬间没有发生网络超时,则HA能保证切换以后数据的一致性。但如果主库宕机瞬间,网络存在超时会导致半同步复制退化为异步复制,此时发生切换就可能丢失数据。这种情况需要业务端具备补偿机制,对数据进行补齐。但如果是MGR,不会存在数据丢失的问题。

六、总结

我们结合爱奇艺多种内部监控系统、资产管理系统、CMDB、链路追踪以及混沌工程平台开发一个面向业务的应用运维平台,提供一站式服务拨测、巡检、资源使用分析、调用链路追踪以及故障演练等功能。通过混沌工程平台提供的故障注入能力,对S级业务的数据库进行攻防演练。经过不断的迭代优化,数据库的攻防演练会成为常态,通过不断的演练提升应用的可用性和安全性,真正做到有备无患。

七、《MySQL高可用解决方案――从主从复制到InnoDB Cluster架构》

购书传送门

mysql ha系统,搬砖工逆袭Java架构师,mysql,数据库,高可用,微服务

1、作者

徐轶韬,甲骨文公司MySQL解决方案首席工程师。为中国金融、政府、航空运输等行业的MySQL用户提供相关产品的售前咨询、企业级产品介绍、解决方案服务,以及推广和普及MySQL数据库在社区的使用。公众号“MySQL解决方案工程师”的运营者和内容作者。“3306π”开源软件社区活动出品人,“墨天轮”社区2020年度十大突出贡献人物。

2、内容简介

本书对MySQL官方提供的高可用解决方案逐一进行介绍,详细阐述每种方案的原理、架构、优缺点及适用场景,并配合演示说明,帮助读者快速理解相关内容。与其他MySQL高可用相关图书不同,本书专注于MySQL官方团队提供的解决方案,包括MySQL主从复制、MySQL ReplicaSet、组复制、InnoDB Cluster及InnoDB ClusterSet等相关内容。此外,本书还介绍了MySQL 8.0的部分内容,包括文档存储、MySQL Shell及MySQL Router等。附录部分介绍了企业版监控、企业版备份等MySQL官方工具,以及克隆插件和虚拟机环境VirtualBox,使读者可以更加全面地了解MySQL的生态和工具。通过本书,MySQL数据库开发人员、MySQL数据库管理人员和架构师可以了解MySQL当前全部的产品特性和高可用解决方案,获知每种方案的详细内容,并能够将高可用解决方案灵活运用到实际的生产解决方案中。本书面向的读者对象包括MySQL的初学者、数据库架构师、DBA、相关软件开发人员,以及组织内部的IT负责人。

3、送 3 本《一本书讲透Elasticsearch:原理、进阶与工程实践》

关于MySQL,想必每个人都有自己的心得体会,欢迎大家在留言区分享,今天就给大家送《MySQL高可用解决方案》了
1楼、2楼、5楼、10楼可分别获得一本
评论最走心人士,额外再送一本
活动截止时间:2024-3-27 21:00:00
哪吒会在朋友圈公布中奖名单

4、 学习传送门 >>> 哪吒编程,陪伴学习,共同优秀

每天分享Java硬核干货,包含Java基础、数据库、SSM、SpringBoot、微服务、设计模式、算法等系列文章。一起学习打卡,遇到问题,发到群里,一起讨论学习,比一个人学习效率高的多。

坚持每日学习打卡,养成持续学习、持续成长的好习惯。

成功秘诀只有一个,那就是卷,督促和鞭策自己,永不放弃。文章来源地址https://www.toymoban.com/news/detail-852886.html

到了这里,关于MySQL高可用解决方案――从主从复制到InnoDB Cluster架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql+proxysql+replication-manager的主从半同步复制+高可用+读写分离

    环境: AlmaLinux release 9.1 MySQL Community Server Ver 8.0.33 Replication Manager v2.2.40 for MariaDB 10.x and MySQL 5.7 Series ProxySQL version 2.5.1-90-gbedaa6c 主机分配情况: 采用hyper-v创建虚拟机的方式进行的,创建1台模板之后另外3台导入虚拟机复制。 1、安装mysql mysql8的默认加密插件变为了caching_sha2_

    2023年04月23日
    浏览(55)
  • 主从同步的延迟问题、原因及解决方案

    主从同步的延迟问题、原因及解决方案 MySQL的主从同步在实际使用过程中会有从库延迟的问题,那么为什么会有这种问题呢? 如何避免这种问题呢? 情况一: 从服务器配置过低导致延迟 这类延迟场景的出现往往是主节点拥有较大规格的配置,而只读节点却购买了一个最小规格的

    2024年02月16日
    浏览(46)
  • Redis高可用——主从复制

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能

    2024年02月12日
    浏览(39)
  • Redis高可用:主从复制详解

    目录 1.什么是主从复制? 2.优势 3.主从复制的原理 4.全量复制和增量复制    4.1 全量复制    4.2 增量复制 5.相关问题总结    5.1 当主服务器不进行持久化时复制的安全性    5.2 为什么主从全量复制使用RDB而不使用AOF?    5.3 为什么还有无磁盘复制模式?    5.4 为什么还

    2024年02月12日
    浏览(41)
  • Redis高可用(主从复制,哨兵,集群)

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从

    2024年02月07日
    浏览(35)
  • Redis高可用主从复制、哨兵、集群

    在Redis中,实现高可用的技术主要包括持久化、主从复制、哨兵和集群。 1、主从复制 主从复制时高可用Redis的基础,哨兵和cluster都是在主从复制基础上实现高可用的,主从复制主要实现了数据的多级备份,以及对与读操作的负载均衡和简单的故障恢复。 缺陷:①故障恢复无

    2024年02月12日
    浏览(51)
  • Redis 高可用和优化(主从复制、哨兵、集群)

    目录 一:Redis 高可用 二: Redis 持久化 1、持久化的功能 2、Redis 提供两种方式进行持久化 3、 RDB 持久化  (1)触发条件 (1.1)手动触发 (1.2)自动触发 (1.3)其他自动触发机制 4、执行流程 5、 启动时加载 6、AOF 持久化 (1)开启AOF 7、执行流程 (1)命令追加(append) (

    2024年02月12日
    浏览(41)
  • 原型模式:复制对象的智能解决方案

    在软件开发过程中,对象的创建可能是一个昂贵的操作,特别是当对象的初始化包括从数据库加载数据、进行IO操作或进行复杂计算时。原型模式是一种创建型设计模式,它通过复制现有的实例来创建新的对象实例,从而避免了类初始化时的高成本。本文将详细介绍原型模式

    2024年04月14日
    浏览(36)
  • Redis高可用之主从复制、哨兵、cluster集群

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从

    2024年02月06日
    浏览(42)
  • redis高可用——主从复制、哨兵模式、cluster集群

    目录 1、redis群集有三种模式 2、主从复制 2.1、概述: 2.2、Redis主从复制有以下几个重要作用: 2.3、主从复制流程: 2.4、redis主从复制实验 3、哨兵模式. 3.1、概述: 3.2、 哨兵的核心功能: 3.3、哨兵模式原理: 3.6、 哨兵模式的作用; 3.7、故障转移机制 3.8、主节点的选举: 3.9、主

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包