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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣:290. 单词规律

前言:剑指offer刷题系列 问题: 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律…

docker推拉时的数据交换详解

前言 docker用了这么久了, 有没有想过, 在执行docker push 和 docker pull命令的时候, 数据是如何传递的呢? 换句话说, 如果要实现一个镜像仓库, 针对推拉的服务, 如何实现接口呢? 根据OCI 分发规范文档 的描述, 已经对整个推拉过程中要调用的接口有描述了. 但是, 纸上学来…

CNN、Transformer、Uniformer之外,我们终于有了更高效的视频理解技术

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 发布在https://it.weoknow.com 更多资源欢迎关注 视频理解因大量时空冗余和复杂时空依赖,同时克服两个问题难度巨大…

力扣每日一题 2024/3/24 零钱兑换

题目描述 用例说明 思路讲解 动态规划五步法 第一步确定dp数组的含义:dp[i]为凑到金额为i所用最少的硬币数量 第二步确定动态规划方程:凑足金额为j-coins[i]所需最少的硬币个数为dp[j-coins[i]],那凑足金额为j所用的最少硬币数为dp[j-coin…

怎么将文件快速生成二维码?文件二维码的在线生成技巧

现在越来越多的人都开始通过二维码的方式来传递文件,将word、pdf、excel、pdf等格式的文件通过扫码的方式展示或者下载文件,这种方式有很多的优势,包括传播速度快成本低,只需要生成一张二维码图片,就可以让其他人能够同…

Prompt-RAG:在特定领域中应用的革新性无需向量嵌入的RAG技术

论文地址:https://arxiv.org/ftp/arxiv/papers/2401/2401.11246.pdf 原文地址:https://cobusgreyling.medium.com/prompt-rag-98288fb38190 2024 年 3 月 21 日 虽然 Prompt-RAG 确实有其局限性,但在特定情况下它可以有效地替代传统向量嵌入 …

QTableWidget删除单元格

如果单元格内有内容&#xff0c;可以使用函数selectedItems() 获取有内容行的一个链表 QList<QTableWidgetItem *> items ui->qtableWidget->selectedItems(); //选中有内容的行可选择有内容的行int count items.count();for(int i 0 ; i < count; i){ …

搭建vite项目

文章目录 Vite 是一个基于 Webpack 的开发服务器&#xff0c;用于开发 Vue 3 和 Vite 应用程序 一、创建一个vite项目二、集成Vue Router1.安装 vue-routernext插件2.在 src 目录下创建一个名为 router 的文件夹&#xff0c;并在其中创建一个名为 index.js 的文件。在这个文件中…

element-ui radio-group 组件源码分享

接着上篇的 radio 组件源码分享&#xff0c;继续探索 radio-group 源码部分的实现过程&#xff0c;主要从以下四个方面来讲解&#xff1a; 1、el-radio-group 页面结构 2、el-radio-group 组件属性 3、el-radio-group 组件方法 4、核心代码部分 一、页面结构&#xff0c;如…

docker 不同架构镜像融合问题解决

1、背景 docker 作为目前容器的标准之一&#xff0c;但是对于多种架构的平台的混合编译支撑不是很好。因此衍生了镜像融合&#xff0c;分别将多种不同的架构构建好&#xff0c;然后将镜像进行融合上传。拉取镜像的会根据当前系统的架构拉取不同的镜像&#xff0c;也可以通过 -…

Linux内核err.h文件分析

在阅读和编写内核相关的代码时&#xff0c;经常会看到IS_ERR、ERR_PTR等函数。这些函数在内核头文件的err.h中。以我服务器的代码为例&#xff0c;内核版本为5.15。 这个文件的代码如下&#xff1a; /* SPDX-License-Identifier: GPL-2.0 */ #ifndef _LINUX_ERR_H #define _L…

基于nodejs+vue在线作业管理系统的设计与实现python-flask-django-php

这种个性化的网络系统管理更重视相互协调和管理合作,能激发管理者的创造性和主动性,这对在线作业管理系统来说非常有益。 关键词&#xff1a;在线作业管理系统&#xff0c;nodejs语言&#xff0c;express框架&#xff0c; 前端技术&#xff1a;nodejsvueelementui, Express 框架…

易源堂梵仕哲品牌新品发布会

祥龙启新&#xff0c;非凡无际&#xff01;2024年3月16日&#xff0c;上海易源堂集团梵仕哲品牌新品发布会在有着“山水宁海,寿者之乡”称号的浙江宁海顺利召开&#xff1b;易源堂集团联合创始人集团副总经理李振雨、易源堂集团营销策划总监曹斌&#xff0c;易源堂副总经理姚军…

mysql 用户管理-账户管理

学习了《mysql 用户管理-权限表》。接着学习更常用的的账户管理。 2&#xff0c;账户管理 MySQL提供许多语句用来管理用户账号,这些语句可以用来管理包括登录和退出MySQL服务器、创建用户、删除用户、密码管理和权限管理等内容。MySQL 数据库的安全性&#xff0c;需要通过账户管…

注册马来西亚商标常见问题

马来西亚商标法于1983年9月1日正式生效。这部商标法废除了马来亚、沙巴和沙捞越三地区各自的商标法规和申请程序&#xff0c;使马来西亚有了一部统一商标法。此外&#xff0c;马来西亚有关商标的法规包括1983年9月1日同时生效的《1983年商标法实施细则》。在马来西亚&#xff0…

Xcode-双架构arm64 x86_64编译

要启用通用构建&#xff0c;在最新版本的 Xcode 中&#xff0c;请打开您的项目设置&#xff0c;然后依次选择&#xff1a; 1. “Build Settings” 选项卡。 2. 在顶部输入框中输入 “Architectures”。 3. 在 “Architectures” 下拉列表中选择 “Other”。 4. 在输入框中输入 …

国内git最新版本下载链接2.44

git官网地址:Git - Downloading Package (git-scm.com) 蓝奏云: ​​​​​​gGit-2.44.0-64-bit.exe - 蓝奏云 git仓库地址:git/git: Git Source Code Mirror - This is a publish-only repository but pull requests can be turned into patches to the mailing list via …

2024常用接口抓包以及接口测试工具总结【建议收藏】

接口 统称为API&#xff0c;程序与程序之间的对接、交接。 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点&#xff0c;主要是为了检验不同组件&#xff08;模块&#xff09;之间数据的传递是否正确&#xff0c;同时接口测试还要测试当前系统与第三方…

谈谈我对 AIGC 趋势下软件工程重塑的理解

作者&#xff1a;陈鑫 今天给大家带来的话题是 AIGC 趋势下的软件工程重塑。今天这个话题主要分为以下四大部分。 第一部分是 AI 是否已经成为软件研发的必选项&#xff1b;第二部分是 AI 对于软件研发的挑战及智能化机会&#xff0c;第三部分是企业落地软件研发智能化的策略…

MySQL的事务深入理解和存储系统

目录 一、事务的基本理论 1.事务的隔离 1.1事务之间的相互影响 1.2事物隔离级别 2.查询和设置事物隔离级别 2.1查询全局事务隔离级别 2.2查询会话事物隔离级别 2.3设置全局事务隔离级别 2.4设置会话事务隔离级别 ​编辑3.事务控制语句 ​编辑3.1提交事务 ​编辑3.2…