QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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:58987

评论

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

明道云当选“中国电子商会数据资源服务创新专业委员会”理事单位

明道云

ShardingSphere X Google 编程之夏:同学,开源你怎么看?

SphereEx

开源社区 ShardingSphere 谷歌 编程之夏

一个约定让全球数万AI爱好者相聚,它是如何做到的?

硬科技星球

AUTOSAR基础篇之OS(上)

SOA开发者

Docgeni 1.1.0 正式发布!

PingCode研发中心

标签 Docgeni 文档目录 进度展示 日志展示

10月活动推荐:2021上汽集团“新四化”技术高峰论坛

SOA开发者

Rtmp Message 与 Chunk格式

webrtc developer

RTMP

用21张图,把Git 工作原理彻底说清楚

git 架构 面试 后端

实时音频抗弱网技术揭秘

百度开发者中心

最佳实践 经验分享 智能视频

为了让你搞定数据库选型,这些工程师重写了 26 万行代码

SphereEx

数据库 架构 架构设计 ShardingSphere SphereEx

RUOYI 框架教程 16|关于若依RuoYi.jar卡顿,僵死,假死,系统无反映解决方案

Java_若依框架教程

技术 Ruoyi 开发 框架 若依

gitee上提交PR和issue流程和注意事项

Geek_6cdeb6

机器学习 深度学习 git

区块链通证经济和传统经济的区别,如何实现

CECBC

还在苦恼网络协议?阿里大佬这份笔记带你从入门到精通!

Java 架构 面试 程序人生 编程语言

OpenCV学习(三):三重境界

轻口味

OpenCV图像处理 10月月更

Python代码阅读(第35篇):完全(深度)展开嵌套列表

Felix

Python 编程 Code Programing 阅读代码

MongoDB中文社区 Freetalk,一起来玩快闪!

MongoDB中文社区

mongodb

区块链通证经济的意义

CECBC

万字长文,一篇吃透WebSocket:概念、原理、易错常识、动手实践

JackJiang

websocket 即时通讯 IM

The Data Way Vol.5|这里有一场资本与开源的 battle

SphereEx

开源 播客 ShardingSphere SphereEx

嵌入式软件时序(1)— C语言是怎么编译出来的

SOA开发者

声网 2020 实时大会后的弱网对抗实践

声网

音视频 网络环境 视频编解码 弱网下的极限实时视频通信

车云一体的应用价值

SOA开发者

基于HarmonyOS分布式技术,他们让绘画体验更为出色

Geek_283163

鸿蒙

RUOYI 框架教程 15|若依框架中 Mysql 操作 | 日期处理

Java_若依框架教程

Java 技术 Ruoyi 框架 若依

Java 面试的“完美圣经”,有了这些还愁面试吗?

Java 程序员 架构 面试 后端

我用 10000 张图片合成我们美好的瞬间

荣顶

JavaScript 大前端 canvas 图形处理

解读业界5种主流的深度网络模型

华为云开发者联盟

模型 网络模型 模型优化 模型量化 深度网络

想提高运维效率,那就把MySQL数据库部署到Kubernetes 集群中

华为云开发者联盟

MySQL 运维 测试 MySQL数据库 Kubernetes 集群

[架构实战营]模块九作业

xyu

#架构实战营

观测云产品更新|新增主机网络性能监测、图表矩形树图、多监测关联查询等功能

观测云

功能更新

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