返回顶部
首页 > 资讯 > 数据库 >MySQL Replication中并行复制怎么实现
  • 150
分享到

MySQL Replication中并行复制怎么实现

2023-07-02 14:07:43 150人浏览 安东尼
摘要

这篇文章主要介绍“MySQL Replication中并行复制怎么实现”,在日常操作中,相信很多人在Mysql Replication中并行复制怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对

这篇文章主要介绍“MySQL Replication中并行复制怎么实现”,在日常操作中,相信很多人在Mysql Replication中并行复制怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql Replication中并行复制怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    传统单线程复制说明

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

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

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

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

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

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

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

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

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

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

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

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

    • 配置方面问题。

    • 数据库设计问题。

    • 主库大批量变更,从节点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_committedGTID last_committed=0 sequence_number=1GTID last_committed=0 sequence_number=2GTID last_committed=2 sequence_number=3GTID last_committed=2 sequence_number=4GTID last_committed=2 sequence_number=5GTID last_committed=2 sequence_number=6GTID last_committed=6 sequence_number=7GTID 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_CLOCKslave_parallel_workers = 8binlog_transaction_dependency_tracking = WRITESETslave_preserve_commit_order = 1

    到此,关于“MySQL Replication中并行复制怎么实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    您可能感兴趣的文档:

    --结束END--

    本文标题: MySQL Replication中并行复制怎么实现

    本文链接: https://lsjlt.com/news/342471.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • MySQL Replication中并行复制怎么实现
      这篇文章主要介绍“MySQL Replication中并行复制怎么实现”,在日常操作中,相信很多人在MySQL Replication中并行复制怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
      99+
      2023-07-02
    • MySQL Replication中的并行复制示例详解
      目录传统单线程复制说明总结mysql5.6基于库级别的并行复制MySQL5.7基于组提交的并行复制组提交说明MySQL8.0基于writeset的并行复制关键参数查看参数配置项说明引用资料:传统单线程复制说明 众所周知,...
      99+
      2022-07-01
      MySQL Replication并行复制 MySQL 并行复制
    • MYSQL并行复制怎么实现
      本篇内容介绍了“MYSQL并行复制怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
      99+
      2024-04-02
    • Mysql复制Replication的实现方法
      本篇内容主要讲解“Mysql复制Replication的实现方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql复制Replication的实现方法”吧...
      99+
      2024-04-02
    • 怎么理解MySQL Replication的复制线程
      这期内容当中小编将会给大家带来有关怎么理解MySQL Replication的复制线程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 MyS...
      99+
      2024-04-02
    • mysql中replication复制的示例分析
      这篇文章主要介绍了mysql中replication复制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 1首先主服务器把数据更改...
      99+
      2024-04-02
    • MySQL中怎么实现并发控制
      今天就跟大家聊聊有关MySQL中怎么实现并发控制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。锁锁分为读锁和写锁两种,也称作共享锁和排他锁。因为多个...
      99+
      2024-04-02
    • 浅析MySQL并行复制
      01 并行复制的概念    在MySQL的主从复制架构中,主库上经常会并发的执行很多SQL,只要这些SQL没有产生锁等待,那么同一时间并发好几个SQL线程是没有问题的。    ...
      99+
      2022-05-31
      MySQL 并行复制 mysql 复制
    • MySQL5.7并行复制原理及实现
      稍微了解过一点的数据的运维就知道MySQL 5.5以及之前是单SQL线程回放,如果Master QPS稍微高点,从上就有延迟了,5.6是基于库的并行回放机制,只有当多个库的话才有复制才有优势,而5.7是基于组的并行回...
      99+
      2022-06-01
      MySQL5.7并行复制 MySQL 并行复制
    • mysql中怎么实现蠕虫复制
      这期内容当中小编将会给大家带来有关mysql中怎么实现蠕虫复制,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。蠕虫复制,顾名思义自己复制自己,并且数量成倍也就是以指数的形式...
      99+
      2024-04-02
    • Mysql中怎么实现延时复制
      今天就跟大家聊聊有关Mysql中怎么实现延时复制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先研究下mysql的复制结构,4.0以上开始,复制分...
      99+
      2024-04-02
    • MySQL中怎么实现主主复制
      今天就跟大家聊聊有关MySQL中怎么实现主主复制 ,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 1 机器规划 192.168.6....
      99+
      2024-04-02
    • MySQL中怎么实现异步复制
      这篇文章将为大家详细讲解有关MySQL中怎么实现异步复制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、MYSQL复制架构衍生史在2000年,MySQL ...
      99+
      2024-04-02
    • MySQL中怎么实现半同步复制
      MySQL中怎么实现半同步复制,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。半同步复制:什么是半同步复制我们知道在默认情况下,...
      99+
      2024-04-02
    • Mysql复制方式(半同步复制,并行复制,多源复制
      一、MySQL主从复制(异步复制,默认) Mysql主从复制原理 Mysql的复制原理大致如下: 1.主库记录binlog日志 在每次准备提交事务完成数据更新前,主库将数据更新的事件记录到二进制日志binlog中。主库上的s...
      99+
      2017-10-08
      Mysql复制方式(半同步复制,并行复制,多源复制
    • MySQL中怎么实现主从复制和半同步复制
      这篇文章将为大家详细讲解有关MySQL中怎么实现主从复制和半同步复制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、复制的介绍MySQL支持单向、异步复制...
      99+
      2024-04-02
    • 浅析MySQL的WriteSet并行复制
      【历史背景】   岁月更迭中我已经从事MySQL-DBA这个工作三个年头,见证MySQL从“基本可用”,“边缘系统可以用MySQL”,“哦操!你怎么不用MySQL”;   正所谓!“一个数据库的境遇既取决于历史的进程...
      99+
      2022-05-31
      MySQL WriteSet并行复制 MySQL WriteSet MySQL 并行复制
    • 如何进行MySQL并行复制测试
      今天就跟大家聊聊有关如何进行MySQL并行复制测试,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。    对于主从延迟,其实一...
      99+
      2024-04-02
    • MySQL中怎么实现双活同步复制
      这篇文章将为大家详细讲解有关MySQL中怎么实现双活同步复制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。基于MySQL原生复制主主同步方案  这...
      99+
      2024-04-02
    • mysql 中怎么实现互为主从复制
      本篇文章给大家分享的是有关mysql 中怎么实现互为主从复制,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 报错: 1) change ...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作