写点什么

MySQL 5.7 高可用数据库内核深度优化三步走

  • 2019-11-13
  • 本文字数:1804 字

    阅读完需:约 6 分钟

MySQL 5.7高可用数据库内核深度优化三步走

UDB 是 UCloud 提供的云数据库,支持实例级别的高可用。UCloud 数据库团队在数据库原生复制的多个方面进行了深度优化,提升了 UDB 高可用数据库的功能和性能。

一、UDB 高可用数据库架构

UDB 高可用数据库产品以虚拟 IP、HAProxy、单节点 UDB 数据库搭建双节点高可用架构:


  • 双节点的 UDB 数据库保证数据库数据的全量冗余,同时保证数据库的可用性;

  • HAProxy 在同一时间只连接一个 UDB 节点,避免多点写入带来的数据冲突问题;

  • 双节点 HAProxy 保证 Proxy 的可用性;

  • 虚拟 IP 在 HAProxy 发生宕机时通过 IP 漂移的方式对 HAProxy 进行切换,用户不需要再次修改 IP。



在上述架构中,从节点 UDB 的数据是否完整、是否与主库保证数据一致性是整个高可用架构的关键,所以用于数据传输的半同步复制起着至关重要的作用。针对原生的半同步复制,UDB 数据库作了内核层面的深度优化。

二、UDB 数据库深度优化

UDB 数据库产品是以开源数据库 MySQL Community Server 5.7.16 为基线版本,围绕高可用架构做内核深度优化。


复制流程,如上图所示,主要经过如下几个步骤:


  • MySQL Server 执行 SQL 成功后,记录 binlog;

  • Dump 线程读取 binlog 后,发送到从机 IO 线程;

  • IO 线程将接收到的 binlog 记录到 relaylog 中,同时记录接收进度到 master.info 中;

  • SQL 读取 relaylog 中的日志内容进行复现,同时记录复制日志的进度到 relay-log.info 中。


我们在原生复制的基础上做了内核的深度优化,针对上述流程中的部分步骤,在功能和性能上做了改进,使得 UDB 高可用数据库产品更加稳定。

1、Relay log 文件记录的优化

  • 存在的问题


在 MySQL 中,binlog 是以 event 为基本单位进行记录,以 MySQL5.7ROW 格式(开启 GTID)的 binlog 为例,一个 DML(insert)会以 5 个 event 的格式记录到 binlog 中(其他操作均以一个或者多个 event 组成,不再一一罗列),分别为:


  • GTID_EVENT:记录当前事务的 GTID

  • QUERY_EVENT:事务开始

  • TABLE_MAP_EVENT:操作对应的表

  • WRITE_ROW_EVENT:插入记录

  • XID_EVENT:提交事务


全部 event 组成一个完整的事务,完整的事务才会被 SQL 线程正确复现到从库上。当前 IO 线程接收 binlog 时,是以 event 为单位进行接收,即接收到一个 event,记录到 relaylog 中后再继续接收下一个。这种做法是低效的,也没有充分利用到 MySQL 本身的文件缓存。


  • 优化方案


优化 IO 线程记录 relaylog 的方式,将以 event 为单位记录,修改为以事务为单位进行记录。合并 IO 线程小的 IO 操作,提高 IO 性能。



将单个的 event 写操作合并为多个 event 统一写操作,将小的 IO 操作合并成较大的 IO 操作,提高 IO 性能。

2、Master.info 文件记录的优化

  • 存在的问题


Master.info 文件在搭建复制时,记录主库 IP、PORT 等连接主库的相关信息,在复制过程中,记录 IO 线程从主库接收到的 binlog 的文件名和位置,文件和位置会在每次记录 relaylog 成功后更新。


在基于 GTID 搭建复制后,master.info 中记录的 binlog 文件和位置不再作为复制的依据,所以 master.info 中记录的 binlog 的文件和位置不再是有效的数据,也就没有必要每次进行更新。


  • 优化方案


在 IO 线程记录 relaylog 成功后,更新 master.info 文件之前,添加判断。如果开启了 GTID 并且使用 GTID 作为复制的依据(auto_position=1),那么不再更新 master.info 中 binlog 的文件和位置。


其它的 master.info 操作仍然保留,如 change master、shutdown 等操作。

3、Relay log 锁的优化

  • 存在的问题


在 IO 线程和 SQL 线程复制进度相似的情况下,在操作 relay log 时,会使用同一块文件缓存,在读写文件缓存时,需要加锁来保证操作的正确性。而 IO 线程和 SQL 线程需要频繁地读写这块公共内存,就需要对同一把锁频繁的竞争,从而导致性能下降。


  • 优化方案


将 IO 线程和 SQL 线程对 relay log 的操作拆分开来,不再使用同一块文件缓存。虽然这样做会导致 SQL 线程增加一次读 IO 操作。但是消除了对锁的竞争,大大地提高了 IO 线程和 SQL 线程整体的性能。


三、总结

优化后的复制流程图如下:



数据库原生复制流程中包括记录 binlog、记录 relay log、记录 master.info、relay-log.info 等。针对上述流程中的部分步骤以及其他未列出的优化,在功能和性能上进行改进,UDB 高可用数据库在功能和性能上均得到了明显的提升,UDB 高可用数据库可以提供更加可靠、高效的服务。


本文转载自公众号 UCloud 技术(ID:ucloud_tech)。


原文链接:


https://mp.weixin.qq.com/s/fGk8kcIOVgXkTw1p4MknyQ


2019-11-13 18:581043

评论

发布
暂无评论
发现更多内容

vue3学习-Composition API

格斗家不爱在外太空沉思

Vue 3 三周年连更

Shell在日常工作中的应用实践

京东科技开发者

Linux Shell 服务器 shell脚本编程 企业号 4 月 PK 榜

关于软件测试领域的 Happy Path

汪子熙

软件测试 测试 自动化测试 测试自动化 三周年连更

等保2.0来临,华为云助力企业更好应对等保合规

神奇视野

等保2.0时代,华为云助力客户做好等保合规

神奇视野

Mac音频采样器Kontakt 7最新版v7.3.0下载

Rose

mac音频采样器 Kontakt 7激活版 Native Instruments Kontakt 7 mac下载

SpringBoot如何使用Jetty容器?超级详细,建议收藏

bug菌

springboot jetty 三周年连更

华为云安全建设安全云生态 保全企业运营安全

神奇视野

Unity 之 查找游戏物体的几种方式汇总解析

陈言必行

Unity 三周年连更

中软国际亮相OpenHarmony开发者大会,荣获A类捐赠人授牌认可

科技热闻

图计算引擎分析--GridGraph

京东科技开发者

系统 磁盘 图计算引擎 企业号 4 月 PK 榜 GridGraph

Web平台规模化部署高效编码格式的实践和思考

阿里技术

视频编解码

如何让 Windows 应用程序在 Parallels Desktop 中启动得更快

Rose

pd虚拟机 pd18虚拟机 Parallels Desktop启动

PDF编辑软件Acrobat Pro DC 2023 最新版+如何取消Acrobat更新教程

Rose

Acrobat Pro DC 2023 Acrobat Pro DC更新 如何取消Acrobat 自动更新

2023年超全前端面试题-背完稳稳拿offer(欢迎补充)

肥晨

三周年连更

迎政策东风,华为云为企业“等保”建设打开想象空间

神奇视野

企业微信接入系列-扫码绑定/登录

六月的雨在InfoQ

企业微信 三周年连更 企业微信扫码 企业微信接入

阿里P8面试官推荐学习的11大专题:java面试精讲框架文档

Java java面试 框架

强大易用的矢量图形设计工具Sketch v96.1最新中文版

Rose

苹果软件下载 Sketch中文版 Sketch V96.1 mac图形设计工具

Java异常Exception详解

timerring

Java 三周年连更

好家伙!阿里新产Java性能优化(终极版),涵盖性能优化所有操作

程序员小毕

数据库 性能优化 JVM 多线程 java面试

Lambda 应用介绍及实现原理剖析

架构精进之路

Java 后端 Lamdba表达式 三周年连更

PicConvert for mac:以批处理模式转换,调整大小和重命名图像

Rose

苹果软件资源 图片格式转换 PicConvert mac mac图片编辑

从多个数据源中提取数据进行ETL处理并导入数据仓库

海拥(haiyong.site)

三周年连更

产教融合| 赛意信息·讯方·深信息产教融合交流研讨会暨国产工业软件人才培养战略合作示范基地揭牌仪式圆满举办

科技热闻

跨平台应用开发进阶(五十一):HTML5(富文本内容)连续数字、字母不自动换行问题分析及解决

No Silver Bullet

html5 跨平台应用开发 三周年连更 问题分析及解决

浅论分布式训练中的recompute机制

百度Geek说

机器学习 深度学习 分布式 企业号 4 月 PK 榜

一种面向后端的微服务低代码平台架构设计

京东科技开发者

架构 微服务 低代码 企业号 4 月 PK 榜

阿里十亿级并发系统设计+java性能优化实战

Java 性能调优 并发系统设计

告别祈祷式编程|单元测试在项目里的正确落地姿势

浅羽技术

Java 测试 单元测试 JUnit 三周年连更

基于树莓派设计的音视频播放器(从0开始)

DS小龙哥

三周年连更

MySQL 5.7高可用数据库内核深度优化三步走_文化 & 方法_UCloud技术_InfoQ精选文章