mysql udb_UDB高可用数据库内核深度优化
原标题:UDB高可用数据库内核深度优化
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记录到relay log中,同时记录接收进度到master.info中;
SQL读取relay log中的日志内容进行复现,同时记录复制日志的进度到relay-log.info中。
我们在原生复制的基础上做了内核的深度优化,针对上述流程中的部分步骤,在功能和性能上做了改进,使得 UDB高可用数据库产品更加稳定。
2.1 Relay log文件记录的优化
2.1.1 存在的问题在MySQL中,binlog是以event为基本单位进行记录,以MySQL 5.7 ROW格式(开启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,记录到relay log中后再继续接收下一个。这种做法是低效的,也没有充分利用到MySQL本身的文件缓存。
2.1.2 优化方案优化IO线程记录relay log的方式,将以event为单位记录,修改为以事务为单位进行记录。合并IO线程小的IO操作,提高IO性能。
将单个的event写操作合并为多个event统一写操作,将小的IO操作合并成较大的IO操作,提高IO性能。
2.2 Master.info文件记录的优化
2.2.1 存在的问题Master.info文件在搭建复制时,记录主库IP、PORT等连接主库的相关信息,在复制过程中,记录IO线程从主库接收到的binlog的文件名和位置,文件和位置会在每次记录relay log成功后更新。
在基于GTID搭建复制后,master.info中记录的binlog文件和位置不再作为复制的依据,所以master.info中记录的binlog的文件和位置不再是有效的数据,也就没有必要每次进行更新。
2.2.2 优化方案在IO线程记录relay log成功后,更新master.info文件之前,添加判断。如果开启了GTID并且使用GTID作为复制的依据(auto_position=1),那么不再更新master.info中binlog的文件和位置。
其它的master.info操作仍然保留,如change master、shutdown等操作。
2.3 Relay log锁的优化
2.3.1 存在的问题在IO线程和SQL线程复制进度相似的情况下,在操作relay log时,会使用同一块文件缓存,在读写文件缓存时,需要加锁来保证操作的正确性。而IO线程和SQL线程需要频繁地读写这块公共内存,就需要对同一把锁频繁的竞争,从而导致性能下降。
2.3.2 优化方案将IO线程和SQL线程对relay log的操作拆分开来,不再使用同一块文件缓存。虽然这样做会导致SQL线程增加一次读IO操作。但是消除了对锁的竞争,大大地提高了IO线程和SQL线程整体的性能。
三、总结
优化后的复制流程图如下:
数据库原生复制流程中包括记录binlog、记录relay log、记录master.info、relay-log.info等,针对上述流程中的部分步骤以及其他未列出的优化,在功能和性能上进行改进,UDB高可用数据库在功能和性能上均得到了明显的提升,UDB高可用数据库可以提供更加可靠、高效的服务。返回搜狐,查看更多
责任编辑:
mysql udb_UDB高可用数据库内核深度优化相关推荐
- MyCAT+MySQL 搭建高可用企业级数据库集群
第1章 课程介绍 课程介绍 1-1 MyCAT导学 试看 1-2 课程介绍 第2章 MyCAT入门 这一章中,我们将回顾了垂直切分,水平切分,分库分表等基础概念,然后快速回如何安装和启动MyCAT的, ...
- 构建Oracle高可用环境HA rac:企业级高可用数据库架构、实战与经验总结
1.1 理解Oracle数据库 1.2 Oracle高可用特性(High Availability) 1.3 搭建高可用的周边辅助环境 1.4 高可用应用设计 1.5 高可用数据库设计 1. ...
- mysql keepalived_mysql高可用+keepalived
生产环境中一台mysql主机存在单点故障,所以我们要确保mysql的高可用性,即俩台mysql服务器如果其中有一台mysql服务器挂掉后,另外一台就能立刻接替进行工作. MYSQL的高可用方案一般有 ...
- MySQL 常用高可用方案
这一节内容来简单聊聊 MySQL 最常用的几种高可用方案. 1 主从或主主 + Keepalived 主从或主主 + Keepalived 算是历史比较悠久的 MySQL 高可用方案,常见架构如下: ...
- Mysql的高可用方案及主从详细配置
1.常用的高可用MySQL解决方案: 数据库作为最基础的数据存储服务之一,在存储系统中有着非常重要的地位,因此要求其具备高可用性无可厚非.能实现不同SLA(服务水平协定)的解决方案有很多种,这些方案可 ...
- heartbeat V2实现MySQL+NFS高可用
heartbeatV2实现MySQL+NFS高可用 实验前准备 1.时间需要同步,建议使用NTP服务器同步时间并且创建时间同步计划 #ntpdate 172.16.0.1 //第一个节点#ntpda ...
- Mysql MMM 高可用
一.Mysql MMM 高可用概况: mmm_mond 负责所有的监控工作的监控守护进程,决定节点的移除等: mmm_agentd 运行在mysql服务器上的代理守护进程,通过简单远程服务集提供给 ...
- Spring - MySql实现高可用架构之MHA
一.简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA 在监控到 mas ...
- MySQL第七讲 MySQL的高可用方案
MySQL服务的主从和互主以及半同步 集群,都是使用MySQL自身的功能来搭建的集群.但是 这样的集群,不具备高可用的功能.即如果是MySQL主服务挂了,从服务是没办法 自动切换成主服务 ...
最新文章
- C/C++ 中生成特定范围内的随机数
- CodeSign error: code signing is required for product type Application in SDK iOS
- [转] Oracle中Blob转Clob
- 信息学奥赛一本通C++语言——1014:与圆相关的计算
- 计算机会考补考时间安排,2019-2020学年第二学期初补考考试安排(实时更新)
- 输出字符串引用名java_将方法名称作为字符串给出时,如何调用Java方法?
- linux重启网卡命令_如何在 Linux 中更改 MAC 地址 | Linux 中国
- 会议室分配时间最长_突破大设计1:时间分配
- 恢复Debian下root用户bash高亮显示
- 世预赛:12强赛首战国足0-3不敌澳大利亚,下一场面对日本队国足会如何调整?
- CNN中的小tips
- php 5.0入门系列教程 pdf,ThinkPHP5.0-快速入门手册(新手教程版).pdf
- 网吧登陆steam启动gta5一直启动不了
- 嵌入式设备的JTAG,Angle,和ICE三种调试笔记
- 常用AF对焦算法详解
- 理解ViT(结合代码)
- consul重启导致服务必须跟着重启解决方案
- 软工网络16个人作业一
- 云计算机房管理,云计算在机房管理中的应用前景研究
- linux xhci源码,第四十六篇:Linux中的USB XHCI HOST TRANSFER RING的相关数据结构 (1)
热门文章
- 运算放大器芯片输出扩流电路三例
- i9500android操作系统跑流量,三星I9500刷机包 百度云ROM54公测版 因为专注 所以精进...
- DEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在
- Java多线程——赛马娘小游戏
- thinkjs-redis配置问题
- java jtextfield清空_java – 当鼠标点击JTextField时如何清除JTextField
- 加 xjjdog0 好友,朋友圈送大红包!
- 计算机考研推荐的专业课视频链接(408)
- TS - 问题解决力 - 下篇
- 工具 · VSCode配置为绿柔护眼主题