当前位置:首页 > 文章列表 > 数据库 > MySQL > MySQL Replication中并行复制怎么实现

MySQL Replication中并行复制怎么实现

来源:亿速云 2023-04-28 06:52:06 0浏览 收藏

大家好,今天本人给大家带来文章《MySQL Replication中并行复制怎么实现》,文中内容主要涉及到,如果你对数据库方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

    传统单线程复制说明

    众所周知,MySQL在5.6版本之前,主从复制的从节点上有两个线程,分别是I/O线程和SQL线程。

    • I/O线程负责接收二进制日志的Event写入Relay Log。

    • SQL线程读取Relay Log并在数据库中进行回放。

    以上方式偶尔会造成延迟,那么可能造成主从节点延迟的情况有哪些?

    • 1.主库执行大事务(如:大表结构变更操作)。

    • 2.主库大批量变更(如:大量插入、更新、删除操作)。

    • 3.ROW同步模式下,主库大表无主键频繁更新。

    • 4.数据库参数配置不合理,从节点性能存在瓶颈(如:从节点事务日志设置过小,导致频繁刷盘)。

    • 5.网络环境不稳定,从节点IO线程读取binlog存在延迟、重连情况。

    • 6.主从硬件配置差异,从节点的硬件资源使用达到上限。(比如:主节点SSD盘,从节点SAS盘)

    可以对以上延迟原因做个大致分类。

    • 1.硬件方面问题(包括磁盘IO、网络IO等)

    • 2.配置方面问题。

    • 3.数据库设计问题。

    • 4.主库大批量变更,从节点SQL单线程处理不够及时。

    总结

    分析以上原因可以看出要想降低主从延迟,除了改善硬件方面条件之外,另外就是需要DBA关注数据库设计和配置问题,最后就是需要提高从节点的并发处理能力,由单线程回放改为多线程并行回放是一个比较好的方法,关键点在于如何在多线程恢复的前提下解决数据冲突和故障恢复位置点的确认问题。

    MySQL5.6基于库级别的并行复制

    在实例中有多个数据库的情况下,可以开启多个线程,每个线程对应一个数据库。该模式下从节点会启动多个线程。线程分为两类 Coordinator 和 WorkThread

    • 线程分工执行逻辑

    Coordinator线程负责判断事务是否可以并行执行,如果可以并行就把事务分发给WorkThread线程执行,如果判断不能执行,如DDL跨库操作等,就等待所有的worker线程执行完成之后,再由Coordinator执行。

    • 关键配置信息

    slave-parallel-type=DATABASE
    • 方案不足点

    这种并行复制的模式,只有在实例中有多个DB且DB的事务都相对繁忙的情况下才会有较高的并行度,但是日常维护中其实单个实例的的事务处理相对集中在一个DB上。通过观察延迟可以发现基本上都是基于热点表出现延迟的情况占大多数。如果能够提供基于表的并行度是一个很好方法。

    MySQL5.7基于组提交的并行复制

    组提交说明

    简单来说就是在双1的设置下,事务提交后即刷盘的操作改为多个事务合并成一组事务再进行统一刷盘,这样处理就降低了磁盘IO的压力。详细资料参考老叶茶馆关于组提交的说明推文https://mp.weixin.qq.com/s/rcPkrutiLc93aTblEZ7sFg

    一组事务同时提交也就意味着组内事务不存在冲突,故组内的事务在从节点上就可以并发执行,问题在于如何区分事务是否在同一组中的,于是在binlog中出现了两个新的参数信息last_committed 和 sequence_number

    • 如何判断事务在一个组内呢?

    解析binlog可以发现里面多了last_committedsequence_number两个参数信息,其中last_committed存在重复的情况。

    • sequence_number # 这个值指的是事务提交的序号,单调递增。

    • last_committed # 这个值有两层含义,1.相同值代表这些事务是在同一个组内,2.该值同时又是代表上一组事务的最大编号。

    [root@mgr2 GreatSQL]# mysqlbinlog mysql-bin.0000002 | grep last_committed
    GTID last_committed=0 sequence_number=1
    GTID last_committed=0 sequence_number=2
    GTID last_committed=2 sequence_number=3
    GTID last_committed=2 sequence_number=4
    GTID last_committed=2 sequence_number=5
    GTID last_committed=2 sequence_number=6
    GTID last_committed=6 sequence_number=7
    GTID last_committed=6 sequence_number=8
    • 数据库配置

    slave-parallel-type=LOGICAL_CLOCK
    • 方案不足点

    基于组提交的同步有个不足点,就是当主节点的事务繁忙度较低的时候,导致时间段内组提交fsync刷盘的事务量较少,于是导致从库回放的并行度并不高,甚至可能一组里面只有一个事务,这样从节点的多线程就基本用不到,可以通过设置下面两个参数,让主节点延迟提交。

    • binlog_group_commit_sync_delay # 等待延迟提交的时间,binlog提交后等待一段时间再 fsync。让每个 group 的事务更多,人为提高并行度。

    • binlog_group_commit_sync_no_delay_count # 待提交的最大事务数,如果等待时间没到,而事务数达到了,就立即 fsync。达到期望的并行度后立即提交,尽量缩小等待延迟。

    MySQL8.0基于writeset的并行复制

    writeset 基于事务结果冲突进行判断事务是否可以进行并行回放的方法,他由binlog-transaction-dependency-tracking参数进行控制,默认采用WRITESET方法。

    关键参数查看

    Command-Line Format--binlog-transaction-dependency-tracking=value
    System Variablebinlog_transaction_dependency_tracking
    ScopeGlobal
    DynamicYes
    SET_VAR Hint AppliesNo
    TypeEnumeration
    Default ValueCOMMIT_ORDER
    Valid ValuesCOMMIT_ORDER
    WRITESET
    WRITESET_SESSION

    参数配置项说明

    • COMMIT_ORDER # 使用 5.7 Group commit 的方式决定事务依赖。

    • WRITESET     # 使用写集合的方式决定事务依赖。

    • WRITESET_SESSION # 使用写集合,但是同一个session中的事务不会有相同的last_committed。

    writeset 是一个HASH类型的数组,里面记录着事务的更新信息,通过transaction_write_set_extraction判断当前事务更新的记录与历史事务更新的记录是否存在冲突,判断过后再采取对应处理方法。writeset储存的最大存储值由binlog-transaction-dependency-history-size控制。

    需要注意的是,当设置成WRITESETWRITESET_SESSION的时候,事务提交是无序状态的,可以通过设置 slave_preserve_commit_order=1 强制按顺序提交。

    • binlog_transaction_dependency_history_size

    设置保存在内存中的行哈希数的上限,用于缓存之前事务修改的行信息。一旦达到这个哈希数,就会清除历史记录。

    Command-Line Format--binlog-transaction-dependency-history-size=#
    System Variablebinlog_transaction_dependency_history_size
    ScopeGlobal
    DynamicYes
    SET_VAR Hint AppliesNo
    TypeInteger
    Default Value25000
    Minimum Value1
    Minimum Value1000000
    • transaction_write_set_extraction

    该模式支持三种算法,默认采用XXHASH64,当从节点配置writeset复制的时候,该配置不能配置为OFF。该参数已经在MySQL 8.0.26中被弃用,后续将会进行删除。

    Command-Line Format--transaction-write-set-extraction[=value]
    Deprecated8.0.26
    System Variablebinlog_transaction_dependency_history_size
    ScopeGlobal, Session
    DynamicYes
    SET_VAR Hint AppliesNo
    TypeEnumeration
    Default ValueXXHASH64
    Valid ValuesOFF
    MURMUR32
    XXHASH64

    数据库配置

    slave_parallel_type = LOGICAL_CLOCK
    slave_parallel_workers = 8
    binlog_transaction_dependency_tracking = WRITESET
    slave_preserve_commit_order = 1

    以上就是《MySQL Replication中并行复制怎么实现》的详细内容,更多关于mysql,replication的资料请关注golang学习网公众号!

    版本声明
    本文转载于:亿速云 如有侵犯,请联系study_golang@163.com删除
    mysql覆盖索引高性能实例分析mysql覆盖索引高性能实例分析
    上一篇
    mysql覆盖索引高性能实例分析
    MySQL架构由什么组成
    下一篇
    MySQL架构由什么组成
    查看更多
    最新文章
    查看更多
    课程推荐
    • 前端进阶之JavaScript设计模式
      前端进阶之JavaScript设计模式
      设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
      542次学习
    • GO语言核心编程课程
      GO语言核心编程课程
      本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
      508次学习
    • 简单聊聊mysql8与网络通信
      简单聊聊mysql8与网络通信
      如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
      497次学习
    • JavaScript正则表达式基础与实战
      JavaScript正则表达式基础与实战
      在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
      487次学习
    • 从零制作响应式网站—Grid布局
      从零制作响应式网站—Grid布局
      本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
      484次学习
    查看更多
    AI推荐
    • AI Make Song:零门槛AI音乐创作平台,助你轻松制作个性化音乐
      AI Make Song
      AI Make Song是一款革命性的AI音乐生成平台,提供文本和歌词转音乐的双模式输入,支持多语言及商业友好版权体系。无论你是音乐爱好者、内容创作者还是广告从业者,都能在这里实现“用文字创造音乐”的梦想。平台已生成超百万首原创音乐,覆盖全球20个国家,用户满意度高达95%。
      14次使用
    • SongGenerator.io:零门槛AI音乐生成器,快速创作高质量音乐
      SongGenerator
      探索SongGenerator.io,零门槛、全免费的AI音乐生成器。无需注册,通过简单文本输入即可生成多风格音乐,适用于内容创作者、音乐爱好者和教育工作者。日均生成量超10万次,全球50国家用户信赖。
      12次使用
    •  BeArt AI换脸:免费在线工具,轻松实现照片、视频、GIF换脸
      BeArt AI换脸
      探索BeArt AI换脸工具,免费在线使用,无需下载软件,即可对照片、视频和GIF进行高质量换脸。体验快速、流畅、无水印的换脸效果,适用于娱乐创作、影视制作、广告营销等多种场景。
      11次使用
    • SEO标题协启动:AI驱动的智能对话与内容生成平台 - 提升创作效率
      协启动
      SEO摘要协启动(XieQiDong Chatbot)是由深圳协启动传媒有限公司运营的AI智能服务平台,提供多模型支持的对话服务、文档处理和图像生成工具,旨在提升用户内容创作与信息处理效率。平台支持订阅制付费,适合个人及企业用户,满足日常聊天、文案生成、学习辅助等需求。
      16次使用
    • Brev AI:零注册门槛的全功能免费AI音乐创作平台
      Brev AI
      探索Brev AI,一个无需注册即可免费使用的AI音乐创作平台,提供多功能工具如音乐生成、去人声、歌词创作等,适用于内容创作、商业配乐和个人创作,满足您的音乐需求。
      17次使用
    微信登录更方便
    • 密码登录
    • 注册账号
    登录即同意 用户协议隐私政策
    返回登录
    • 重置密码