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。

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

在这里插入图片描述
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 的高可用。

在这里插入图片描述

1、HA Master

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

在这里插入图片描述
切换模块则负责具体的故障切换,通过定期轮训badinstance集合,对符合条件的实例进行切换。支持自动和手动两种切换方式。对于自动切换,需要在CMDB里配置好切换策略,可选同DC切换、跨DC切换还是跨地域切换。

切换流程如图所示:

在这里插入图片描述
除了对主库支持故障切换外,也具备对从库故障切换的能力。在从库故障宕机时,通过检测故障,再操作域名的方式实现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故障切换对业务的透明。

在这里插入图片描述

三、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的恢复顺序如图所示:

在这里插入图片描述

如果是使用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架构》

购书传送门

在这里插入图片描述

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、微服务、设计模式、算法等系列文章。一起学习打卡,遇到问题,发到群里,一起讨论学习,比一个人学习效率高的多。

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

成功秘诀只有一个,那就是卷,督促和鞭策自己,永不放弃。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

查看Linux系统重启的四种基本命令

目录 前言1. last2. uptime3. journalctl4. dmesg 前言 对于排查其原因推荐阅读:详细分析服务器自动重启原因(涉及Linux、Window) 在Linux中,有多种命令可以查看系统重启的信息 以下是其中一些常用的命令及其解释: …

跨时钟域学习记录(一)

亚稳态 亚稳态是电平介于高低电平之间的一种暂时状态。在同步系统中,当寄存器的信号无法满足建立时间和保持时间时,输出端的信号就可能出现亚稳态。在异步系统中,亚稳态并非一定在建立时间和保持时间无法满足时出现。   受噪声、温度、电压…

ZYNQ学习之PetaLinux开发环境搭建

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ FTP&#xff1a;File Transfer Protocol 一、Ubuntu 和 Windows 文件互传 1.1、开启 Ubu…

HarmonyOS系统开发ArkTS常用组件文本及参数(五)

目录 一、Text组件 1、Text组件案例 二、Text组件参数 1、string字符串类型 2、Resources类型 2.1、resources中内容配置 base/element/string.json 中的内容 zh_US/element/string.json 中的内容 es_US/element/string.json 中的内容 2.2、环境适配 适配英文 适配中文…

初探Ruby编程语言

文章目录 引言一、Ruby简史二、Ruby特性三、安装Ruby四、命令行执行Ruby五、Ruby的编程模型六、案例演示结语 引言 大家好&#xff0c;今天我们将一起探索一门历史悠久、充满魅力的编程语言——Ruby。Ruby是由松本行弘&#xff08;Yukihiro Matsumoto&#xff09;于1993年发明…

计算机网络实验——学习记录二(HTTP协议)

1. Linux主机上连接互联网的网络接口是&#xff1a;ens33。 2. 在显示过滤器&#xff08;Filter&#xff09;中输入“ http.host www.zzu.edu.cn”&#xff0c;筛选出HTTP协议报文首部行中包含“ Host&#xff1a;www.zzu.edu.cn”的报文&#xff08;目的地址是Web服务器的报…

微前端——qiankun

一、微前端 微前端是指存在于浏览器中的微服务&#xff0c;其借鉴了后端微服务的架构理念&#xff0c;将微服务的概念扩展到前端。即将一个大型的前端应用拆分为成多个模块&#xff0c;每个微前端模块可以有不同的团队开发并进行管理&#xff0c;且可以自主选择框架&#xff0…

RSTP、MSTP、VRRP

RSTP协议原理与配置 问题一、STP的收敛延时&#xff08;30秒&#xff08;有BP端口情况下RP端口down&#xff09;或者50秒&#xff08;没有BP端口情况下RP端口down&#xff09;&#xff09; RSTP&#xff1a;Rapid Spanning Tree Protocol RSTP和STP从原理流程上一样&#xf…

Vivado的SIMULATION的Scope和source的层级怎么看

一、查看source source的层级可以很容易看出来&#xff0c;上面是tb文件的名称&#xff0c;下面的 axi_full_wrapper : axi_full_wrapper (axi full wrapper.v) (1)中&#xff0c;右边的那个axi_full_wrapper是模块名称&#xff0c;也是源文件名称&#xff08;因为module之后接…

天正T20V10 下载地址及安装教程

天正软件是一家专业的工程设计软件和解决方案提供商&#xff0c;主要致力于建筑、结构、暖通、给排水、电气等领域的设计和施工工程。他们开发和提供多种软件产品&#xff0c;涵盖了建筑设计、结构设计、暖通空调设计、给排水设计、电气设计等方面。 天正软件的产品具有丰富的…

Python的7大就业方向!小白适合哪个方向?学了Python能干什么?

每个程序员都有自己主要的开发语言&#xff0c;并且都认为自己的语言是最好的&#xff0c;懂的朋友在评论区里打个666~ 我的主要开发语言是Python&#xff0c;Python在我们编程圈里呢&#xff0c;是非常流行。 最近两年甚至火出了编程圈&#xff0c;越来越多不是程序员的朋友也…

Vulnhub:DR4G0N B4LL: 1

目录 信息收集 1、arp 2、nmap WEB web信息收集 gobuster 隐藏目录发现 图片隐写 ssh登录 提权 get user 系统信息收集 get root 信息收集 1、arp ┌──(root㉿ru)-[~/kali/vulnhub] └─# arp-scan -l …

谷歌seo怎么优化产品推广?

想要在谷歌SEO上优化产品推广&#xff0c;关键在于理解和利用搜索引擎的工作原理来提升你的产品在搜索结果中的可见性&#xff0c;结构化数据就很重要了&#xff0c;它能让谷歌更容易理解你的页面内容&#xff0c;让他知道你这个页面不是文章页&#xff0c;主页&#xff0c;而是…

【AI】大模型API调研及推荐

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 【AI】大模型API调研及推荐引入调研KimiAPI对接 国内GPT4的转发API对接 总结 【AI…

生态系统碳循环模型CENTURY 建模方法

原文链接&#xff1a;生态系统碳循环模型CENTURY 建模方法https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247598976&idx6&snb684175e24c5600a69033a838535078d&chksmfa820267cdf58b71cb1d119dfe101f7b3a312e8c0b1b8ef4adbef2894aa902b290ef7e091de2&am…

Lightroom Classic 2024,成就专业摄影梦想mac/win版

Lightroom Classic 2024是一款功能强大的数字图像处理和管理工具&#xff0c;专为摄影师和摄影爱好者设计。它提供了丰富的照片调整、处理、管理和分享功能&#xff0c;帮助用户轻松管理、编辑和展示他们的照片。 Lightroom Classic 2024软件获取 首先&#xff0c;Lightroom C…

MixKG: Mixing for harder negative samples in knowledge graph---没代码

摘要 知识图嵌入(KGE)旨在将实体和关系表示为低维向量&#xff0c;用于许多现实世界的应用。实体和关系的表征是通过对比正负三联体来学习的。因此&#xff0c;高质量的阴性样品在KGE中是非常重要的。然而&#xff0c;目前的KGE模型要么依赖于简单的负抽样方法&#xff0c;这使…

为什么有的测径仪断电重启后自动恢复,有的手动恢复

关键字&#xff1a;测径仪断电重启&#xff0c;测径仪自动恢复&#xff0c;测径仪严重故障&#xff0c;测径仪手动恢复&#xff0c;蓝鹏测控 测径仪断电重启后能否自动恢复&#xff0c;主要取决于其内部的设计、配置以及所面对的具体问题。 对于大多数智能测径仪来说&#xf…

机器学习-05-回归算法

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中回归算法&#xff0c;包括线性回归&#xff0c;岭回归&#xff0c;逻辑回归等部分。 参考 fit_transform,fit,transform区别和作用详解&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&am…

【Java】基于SpringCloud的考研复试辅导平台

1、前端请求后端服务提供的接口。 2、后端服务的控制层Controller接收前端的请求。 3、Contorller层调用Service层进行业务处理。 4、Service层调用Dao持久层对数据持久化。 XXX-api&#xff1a;接口工程&#xff0c;为前端提供接口。 XXX-service: 业务工程&#xff0c;为…