2024年图书赠送福利正式启动,关注《哪吒编程》提升Java技能,文章最后赠送《MySQL高可用解决方案-从主从复制到架构》5本。
大家好,我是哪吒。
爱奇艺为数亿用户提供7*24小时的视频服务,通过爱奇艺平台,用户可以轻松访问海量、优质、高清的视频资源。但是一旦服务平台发生故障,大量用户将无法正常播放视频,所以我们的应用服务和数据库服务必须具备高可用的架构。
爱奇艺技术产品团队将各类应用划分为不同的重要性级别,针对不同重要性级别的应用,对数据库服务的使用提供了不同的SLA保障。例如,S级应用的RTO控制在分钟级别;A级应用的RTO控制在10分钟级别。本文将主要介绍我们的MySQL高可用实现方案。
1.基于MHA的二次开发
MHA是目前成熟且流行的MySQL高可用解决方案,很多互联网公司直接使用或者基于MHA架构改造来实现MySQL的高可用,MHA可以在30秒内实现故障转移,最大程度保证数据的一致性,MHA由两个模块组成:和Node。
部署在独立的机器上,负责检查MySQL复制状态,主库状态,以及进行切换操作。Node运行在每一台MySQL机器上,主要负责保存复制,在主库宕机时识别从库之间差异的中继日志,将不同的事务应用到其他从库上,并负责清除从库上的中继日志。
其部署架构如下图所示:
MHA虽然比较成熟,但是也存在一些不足之处:
另外我们的MySQL部署环境比较复杂,有跨DC、跨地域部署,新主机的选举需要的规则比较多。另外集群数量比较多,如果直接用MHA做高可靠会大大增加管理成本。因此我们针对MySQL制定了高可用解决方案。
2.MySQL HA架构介绍
爱奇艺自研的MysQL HA系统由HA和HA Agent两部分组成,三个HA组成一个最小集群单元,对应MHA,通过raft协议实现高可用,解决单点、不可重复切换问题。HA Agent功能类似MHA Node功能,负责故障检测、分析及传递,清理relay log,负责MGR的高可用。
1. 医管局
整个MySQL HA部分体现了设计原则和思想,其中难点部分重点如下。
切换模块负责具体的故障切换,通过常规轮换集对符合条件的实例进行切换,支持自动切换和手动切换,自动切换需要在CMDB中配置切换策略,可以选择DC内切换、跨DC切换、跨地域切换。
切换过程如图所示:
除了支持主数据库的故障转移之外,还支持从数据库的故障转移,当从数据库发生故障时,通过检测到故障然后操作域名来实现从数据库的高可用性。
2. HA 代理
Agent负责监控CMDB中的实例,通过检查进程是否存在等规则判断实例是否存活。如果判断实例宕机,则发送RPC心跳给HA。如果宕机,HA会收到Agent的超时事件,在心跳超时的Agent所在服务器上进行实例切换。为了避免网络抖动导致的误切,我们设置Agent超时时间为1分钟,如果1分钟内出现闪断或者抖动,则不进行切换。
Agent还负责监控MGR的节点,并进行域名切换。MGR主节点切换后,客户端需要捕获切换信息,并将请求重定向到新的主节点,这对业务不太友好。因此我们在Agent上增加一个功能,当发现主节点切换时,将源主节点上的域名重新绑定到新的主节点上,使MGR故障切换对业务透明。
3. HA 选举规则
HA 需要一套复杂的 选举规则来适应我们复杂的部署环境, 选举规则如下:
排除bad list中的slave。选择所有优先级最高的slave,如果从库没有设置优先级,则选择所有非bad的slave。根据切换策略,依次选择DC相同→相同→span的slave。对于符合条件的从库,排除机器数过多的slave和从库所在slave,在剩余的slave中选择剩余磁盘空间最大的slave。
根据以上规则选择一个最优的进行切换,若没有符合条件的Slave,则会通过电话报警的方式通知DBA,进行人工干预。
4. 完成 diff
在切换过程中,有三种类型的差异:
从库 io 收到的中继日志不完整,不是完整的事务或与其他从站的完整从站。如果死机仍可访问,中继日志还会包括死机未发送的 diff。
diff的恢复顺序如图所示:
如果使用gtid复制,需要生成三种diff文件,然后依次应用diff文件恢复slave。 对于非gtid复制,先到slave上,让slave从slave上恢复数据,然后再应用还没有发送完的死diff文件完成补全。
5.数据一致性
如果使用半同步复制,在主库宕机瞬间没有网络超时,HA 可以保证切换后的数据一致性。但如果主库宕机瞬间发生网络超时,半同步复制就会退化为异步复制,切换时可能会丢失数据。这种情况下业务端需要有补偿机制来补全数据。但如果是 MGR,就不会有数据丢失的问题。
六、结论
我们结合爱奇艺内部各类监控系统、资产管理系统、CMDB、链路追踪、混沌工程平台等,开发了面向业务的应用运维平台,提供一站式服务拨测、资源使用分析、调用链路追踪、故障演练等功能。通过混沌工程平台提供的故障注入能力,对 S 级业务的数据库进行攻防演练。经过不断的迭代优化,数据库攻防演练将成为常态,通过不断的演练,提升应用的可用性和安全性,真正做到有备无患。
7.MySQL高可用方案-从主从复制到架构
图书购买门户
1. 作者
徐逸涛,甲骨文公司 MySQL 解决方案首席工程师,为中国金融、政府、航空运输等行业的 MySQL 用户提供售前咨询、企业级产品介绍和解决方案服务,并在社区推广和普及 MySQL 数据库的使用。是公众号“MySQL 解决方案工程师”的运营者和内容作者。是“3306π”开源软件社区活动的制作人,2020 年“摩天轮”社区十大杰出贡献者之一。
2. 简介
本书对MySQL官方提供的高可用解决方案逐一进行了介绍,并详细阐述了每种解决方案的原理、架构、优缺点和适用场景,并配合演示帮助读者快速理解相关内容。与其他MySQL高可用相关书籍不同的是,本书重点介绍了MySQL官方团队提供的解决方案,包括MySQL主从复制、MySQL、组复制等相关内容。此外,本书还介绍了MySQL 8.0的一些内容,包括文档存储、MySQL Shell和MySQL。附录介绍了MySQL企业版监控、企业版备份等官方工具以及克隆插件和虚拟机环境,让读者对MySQL的生态和工具有更全面的了解。通过本书,MySQL数据库开发人员、MySQL数据库管理人员和架构师可以了解MySQL目前所有的产品特性和高可用解决方案,学习每种解决方案的细节,并能够将高可用方案灵活地应用到实际的生产方案中。 本书的读者包括MySQL初学者、数据库架构师、DBA、相关软件开发人员以及组织内的IT经理。
3. 赠送3本《一本书讲透:原理、进阶与工程实践》 关于MySQL,每个人肯定都有自己的心得,欢迎在评论区分享,今天我给大家送上《MySQL高可用解决方案》 1楼、2楼、5楼、10楼分别可以得到一本,评论最多的人可以多得一本。 活动截止时间:2024-3-27 21:00:00 哪吒将在朋友圈公布获奖名单 4. 学习传送门 >>> 哪吒编程,陪伴学习,一起超越
每天分享Java硬核内容,包括Java基础、数据库、SSM、微服务、设计模式、算法等系列文章,一起学习、打卡,遇到问题就发到群里,一起讨论学习,比一个人学习效率高太多。
坚持每日学习打卡,养成不断学习、不断成长的良好习惯。
成功的秘诀只有一个,那就是卷起袖子,鞭策自己、激励自己,永不放弃。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。