小研究 - Mysql快速全同步复制技术的设计和应用(一)

news2025/1/4 17:42:58

Mysql半同步复制技术在高性能的数据管理中被广泛采用,但它在可靠性方面却存在不足.本文对半同步复制技术进行优化,提出了一种快速全同步复制技术,通过对半同步数据复制过程中的事务流程设置、线程资源合理应用、批量日志应用等技术手段,在保证数据可靠性的基础上降低复制过程中的性能损失,实现了快速的全同步复制.测试结果表明,快速全同步复制技术可以在性能、可靠性和一致性方面做到很好的均衡,有效提高了Mysql存储集群的业务承载能力.

目录

1 引言

1 快速全同步复制技术原理

1.1 快速全同步复制

1.2 快速全同步复制的特点

1.2.1 线程复用

1.2.2 数据可靠性保证

1.2.3 批量写入


1 引言

数据复制是将主机节点服务器上的数据及其变更应用到一个或多个备机节点服务器里,达到主机节点和备机节点数据相同的目的.复制功能是实现数据库系统高可用性、可扩展性、灾难恢复能力、备份等功能的基础,在分布式数据库多副本读写、读写分离、备份容灾等场景应用非常广泛 . 根据复制技术的发生时机及复制后果,Mysql复制技术可分为异步复制、同步复制、半同步复制三种.

异步复制是Mysql 原生支持的复制技术,主机节点将事务信息写入Binlog文件中时,主机节点会通过 Binlog dump 线程给备机节点发送这些新的Binlog变化,并不等待从库的响应继而提交事务并写入Binlog,所以异步复制不能保证这些事务变化的Binlog数据可靠传输并应用到任何备机节点,从而有数据丢失的可能性.

在 2010 年发布的 Mysql 5.5 版本中,引入了半同步复制,半同步复制解决了异步复制存在的数据可靠性问题,主机节点需要等待至少一个备机节点收到且成功把日志写入Relay log文件,客户端才可收到复制完成的确认消息,从而进入事务的下一个阶段 . 与异步复制相比,半同步复制在提交成功返回时已知数据至少存在于两个位置,从而提高了数据完整性.

但半同步复制依然存在数据丢失的可能性,在半同步复制中,如果出现异常,在没有任何从库反馈确认消息的情况下,会导致事务等待超时,这种情况下主库将退化为异步复制,直到至少有一个半同步从库恢复正常后,主库才恢复半同步复制.为 提 高 数 据 的 可 靠 性 ,在 2016 年 发 布 的Mysql 5.7.17版本中引入了一个全新的技术,称之为InnoDB Group Replication,也就是全同步复制.在全同步复制中,当主库执行完一个事务,必须等所有的从库都执行了该事务才返回给客户端,这样就可以完全保证数据在所有节点都被成功复制.但因需等待所有从库执行完该事务才能返回,全同步复制的主机节点完成一个事务的时间会被拉长,导致性能急剧降低.

1 快速全同步复制技术原理

1.1 快速全同步复制

快速全同步复制是Mysql存储集群主机节点和备机节点通过Binlog进行复制的一种技术,通过数据复制期间线程资源的重复利用及批量确认等优化手段,在保证主机节点变更日志已经传输到备机节点的基础上,快速响应数据库客户的请求和响应 . 快速全同步复制技术的架构如图 1 所示,具体运行步骤如下:

第一步:主机节点(Master)接收到客户程序的提交请求,在完成本地提交后将数据变更日志通过
Binlog Dump 线程发往备机节点(Slave),此时并不给客户程序反馈请求操作成功的消息.

第二步:备机节点接收到 n 个 Binlog 变更日志后,IO 线程将变更日志写入备机节点的 Relay Log完成后,将写入成功的确认消息(ACK)发回到主机节点的ACK 消息队列(ACK Wait Queue)线程池.

第三步:主机节点的Wait线程池收到备机节点的确认消息后,反馈给客户程序,本次请求的处理结束.

1.2 快速全同步复制的特点

Mysql半同步复制5.6版本和5.7版本的基本原理如图2所示.

Mysql5.6 的半同步是after commit机制的复制,用户事务在主机节点完成提交之后,用户线程直到等到备机节点确认消息(ACK)后才反馈给客户程序事务成功 .Mysql5.7 及以后的增强半同步是 aftersync 的复制机制,用户事务在主机节点提交完成之前,用户线程直到等到备机节点确认消息(ACK)后才完成提交并反馈给客户程序事务成功.这两种不同机制的差别导致了主机节点上不同事务间数据一致性的差别,在性能上和可靠性上没有根本的改变.

1.2.1 线程复用

无论是 5.6 版本的半同步复制还是 5.7 版本及以后的增强半同步复制,在用户会话等待备机节点确认消息(Wait ACK)期间,用户会话始终占用一个线程,直到该事务完成才退出 . 在一个负载高的系统,大量用户会话在等待 ACK 期间将占用大量的线程资源而影响性能.

而快速全同步复制利用了线程池技术,每个事务 Commit(包括 DDL、AUTOCOMMIT STMT、COMMIT、XA PREPARE、XA COMMIT 等)在完成所有提交过程后,将 Wait ACK 数据包发送到客户端之前等待备机节点确认 . 在等待完整 WaitACK时,由于使用了线程池,事务或其会话不占用任何操作系统线程,数据库的工作线程将继续处理来自其他连接的其他请求,这种机制避免了资源浪费,从而使性能明显得到提升.

1.2.2 数据可靠性保证

在半同步复制中,如果数据复制发生异常(备机节点不可以用或者数据复制所用的网络发生异常)的情况下,主机节点会暂停(Mysql 默认 10 s 左右)对应用的响应,复制方式将降为异步复制.直到数据复制恢复正常,将恢复为半同步复制 . 当复制方式降为异步复制时,数据可靠性就无法保障,这在某些业务场景是不允许的.而快速全同步复制,在默认情况下是不可以降级为异步复制的(只在特殊情况下方可通过参数配置支持降级),从而保证数据在任何情况下都不会丢失 . 下面从两个不同场景进行分析,当出现异常的情况时,快速全同步复制如何处理这种异常.

1.2.3 批量写入

快速全同步复制在性能上的优化还包括批量Relay Log 写入和组提交.批量Relay Log写入是指备机节点可以根据参数配置,在接收到一定数量的Binlog 之后才写入 Relay Log,然后将 ACK 消息批量反馈到主机节点的应用程序.这在一定程度上提高了备机节点的写入效率,并使复制性能得到明显提升.

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

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

相关文章

span标签添加什么属性可以在鼠标移入后有一个提示文字类似于图片的alt

span标签添加什么属性可以在鼠标移入后有一个提示文字 类似于图片的alt 我们给span标签设置了不换行,超出后显示省略号,但是默认鼠标移入是不会有完整的文字的提示的,可以给span标签添加一个title属性就搞定了! 效果图 html代码&a…

【css】textarea-通过resize:none 禁止拖动设置大小

使用 resize 属性可防止调整 textareas 的大小&#xff08;禁用右下角的“抓取器”&#xff09;&#xff1a; 没有设置resize:none 代码&#xff1a; <!DOCTYPE html> <html> <head> <style> textarea {width: 100%;height: 150px;padding: 12px 20p…

【Linux初阶】基础IO - 动静态库 | 初识、生成、链接、加载

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux初阶】 ✒️✒️本篇内容&#xff1a;动静态库初识&#xff0c;库的含义&#xff0c;静态库的生成与链接&#xff0c;gcc/g默认链接方式&#xff0c…

OSPF作业3

题目 地址配置 R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; R5&#xff1a; R6&#xff1a; R7&#xff1a; R8&#xff1a; R9&#xff1a; R10&#xff1a; R11&#xff1a; R12&#xff1a; 私网通及LSDB优化 R1&#xff1a; ospf 1 router-id 1.1.1.1 …

HBase-读流程

创建连接同写流程。 &#xff08;1&#xff09;读取本地缓存中的Meta表信息&#xff1b;&#xff08;第一次启动客户端为空&#xff09; &#xff08;2&#xff09;向ZK发起读取Meta表所在位置的请求&#xff1b; &#xff08;3&#xff09;ZK正常返回Meta表所在位置&#x…

《算法竞赛·快冲300题》每日一题:“连接草坪(II)”

《算法竞赛快冲300题》将于2024年出版&#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码&#xff0c;以中低档题为主&#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 连…

【ARM64 ATF 系列 1 -- ATF 中断向量表及SMC 处理流程】

文章目录 1.1 ATF 中断向量表1.1.1 ATF 汇编宏 vector_base 1.2 ATF SMC 中断处理流程 1.1 ATF 中断向量表 ATF 中断向量表的定义位于文件&#xff1a;bl31/aarch64/runtime_exceptions.S vector_base runtime_exceptions/* -----------------------------------------------…

Spring+MyBatis整合案例

提示&#xff1a;要有自学能力&#xff0c;会学习 文章目录 前言前期准备项目内容数据库创建应用程序配置po 包代码mapper 包代码service 包代码测试类代码添加事物处理功能 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 前期准备 第一步&#xff1a…

[CSS] 图片九宫格

效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible" content"IEedge"/><meta name"viewport" content"widthdevice-…

vscode自动补全(智能提示)大小写问题

最近发现vscode的自动补全有时候显示的不是想要的&#xff0c;具体表现为&#xff1a;我输入了几个字母&#xff0c;但是提示列表里面没有我需要的内容。 例如&#xff1a; 我输入了list&#xff0c;但是没有显示java.util中的List&#xff1b; 或者我输入了hashmap&#xf…

海外媒体发稿:软文写作方法方式?一篇好的软文理应合理规划?

不同种类的软文会有不同的方式&#xff0c;下面小编就来来给大家分析一下&#xff1a; 方法一、要选定文章的突破点&#xff1a; 所说突破点就是这篇文章文章软文理应以什么样的视角、什么样的见解、什么样的语言设计理念、如何文章文章的标题来写。不同种类的传播效果&#…

Apache+Tomcat 整合

目录 方式一&#xff1a;JK 1、下载安装包 2、添加依赖 3、启动服务&#xff0c;检查端口是否监听 4、提供apxs命令 5、检查是否确实依赖 6、编译安装 7、重要配置文件 方式二&#xff1a;http_proxy 方式三&#xff1a;ajp_proxy 方式一&#xff1a;JK 1、下载安装…

Vulnhub: ColddWorld: Immersion靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.183 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.183 查看login的源码发现提示&#xff1a;page和文件/var/carls.txt 漏洞利用 wfuzz探测account.php页面发现文件包含&am…

前端笔记html-layer使用

layer.open方法 layer.open({type:2, //可传入的值有&#xff1a;0&#xff08;信息框&#xff0c;默认&#xff09;1&#xff08;页面层&#xff09;2&#xff08;iframe层&#xff09;3&#xff08;加载层&#xff09;4&#xff08;tips层&#xff09;title: title,content:[…

高抗干扰LCD液晶屏驱动芯片,低功耗的特性适用于水电气表以及工控仪表类产品

VK2C23是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大224点&#xff08;56SEGx4COM&#xff09;或者最大416点&#xff08;52SEGx8COM&#xff09;的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据&#xff0c;也可通过指令进入省电模式。其高抗干扰&#xff…

怎么进行流程图制作?用这个工具制作很方便

怎么进行流程图制作&#xff1f;流程图是一种非常有用的工具&#xff0c;可以帮助我们更好地理解和展示各种复杂的业务流程和工作流程。它可以将复杂的过程简化为易于理解的图形和文本&#xff0c;使得人们更容易理解和跟踪整个流程。因此&#xff0c;制作流程图是在日常工作中…

用低代码构建高效敏捷工作流

随着行业业务发展及业务流程诉求的增长&#xff0c;企业信息资源越来越表现出一种异构分布、松散耦合的特点。实现大规模、异构、分布式执行环境&#xff0c;使得相互关联的任务能够高效运转成为了业务管理的强诉求。以事件驱动和数据驱动来进行应用系统构建也就变得更加实效。…

UE中低延时播放RTSP监控视频解决方案

第1章 方案简介 1.1 行业痛点 在各种智慧城市、智慧社区、智慧水利、智慧矿山等数字孪生项目中&#xff0c;经常使用通UE来开发三维可视化场景。在这些场景中通常都需要把现场的各种监控视频在UE的可视化场景中接入&#xff0c;主要包含海康威视、大华、宇视、华为等众多监控…

SpringBoot实现文件记录日志,日志文件自动归档和压缩

&#x1f60a; 作者&#xff1a; Eric &#x1f496; 主页&#xff1a; https://blog.csdn.net/weixin_47316183?typeblog &#x1f389; 主题&#xff1a;SpringBoot实现文件记录日志&#xff0c;日志文件自动归档和压缩 ⏱️ 创作时间&#xff1a; 2023年08月06日 文章目…

[webpack] 基本配置 (一)

文章目录 1.基本介绍2.功能介绍3.简单使用3.1 文件目录和内容3.2 下载依赖3.3 启动webpack 4.基本配置4.1 五大核心概念4.2 基本使用 1.基本介绍 Webpack 是一个静态资源打包工具。它会以一个或多个文件作为打包的入口, 将我们整个项目所有文件编译组合成一个或多个文件输出出去…