首页 > 数据库 >TDSQL强同步复制

TDSQL强同步复制

时间:2023-05-31 14:01:54浏览次数:36  
标签:同步 Slave log relay ACK TDSQL 复制 线程 Master

一.概述

通过分析,我们发现MySQL原声半同步复制缺陷:

1、MySQL半同步复制支持退化成异步复制,在严格的金融场景不一定合适。

2、MySQL在Slave在收到Master的binlog时,默认情况下无法保证relay log实时落盘,即sync_relay_log=0,如果需要保证relay log实时落盘,即sync_relay_log=1,则每个event会调用一次fsync,数据库性能大幅下降。

3、MySQL在等待Slave返回ACK时工作线程是阻塞状态的,若长时间收不到ACK,用户提交被挂起,

      1>如果要提高并发则要会开启更多的线程,而线程越多,时耗就越不稳定,性能达到某个值之后会下降.

       2>在跨IDC等延时比较大的情况下,MySQL半同步复制性能下降比较厉害。

因此,TDSQL强同步复制主要改造如下:

1、如果Master等待Slave ACK出现超时,则返回给客户端失败,但不可退化模式下强同步复制不退化成异步复制,确保主备数据强一致,主备切换事物0丢失,满足金融场景的需求。

2、增加rpl_slave_ack_thread线程,循环取出io_thread接收到的binlog 和pos等信息,且只处理最后一个,如果对列为空,则等待,可以通过组的机制来实现,性能与异步相当,

      1> 启用该功能后,从库io_thread不是在接收主库的event之后立即写入磁盘(也不是 fsync),而是将 binlog 文件名和偏移量插入一个队列。  

      2> 使用rpl_slave_ack_thread线程从队列中获取binlog位置信息,然后写入binlog_cache,并fsync,然后给强同步主库回ACK消息。

3、强同步复制采用线程池+业务线程易步化,充分利用资源,性能接近异步

      1> 在Master等待Slave ACK的过程中,会将会话保存起来,然后线程切换到其他的的会话处理,不用无谓的等待。

       2> 性能提升的同时响应时间会增加,但在高并发场景下TPS不下降。

二、强同步复制的原理:

TDSQL强同步复制_客户端

首先Master上一笔写请求到达,线程池分配连接处理该请求,当收到commit之后先写binlog,这时继续往下应该回吐客户端信息,但对于开启了强同步的服务来说,此时会先hold住这个操作,在内存保存会话信息。

然后可以继续处理其链接的请求。此时客户端还不能收到应答,啥时候能收到应答呢?Master启动之后,会先启动一个udp服务器,用来接受Slave收到binlog的ACK请求,同时再启动16个工作线程,当收到ACK请求时,这16个线程其中之一去唤醒刚刚保存的会话,执行下半段(如执行引擎层提交等)并对客户端返回应答信息。

所以,在Master上新开了两组线程,一组为接受ACK应答线程(Dump ACK Thread),另外一组为唤醒hang住的客户端连接线程(User ACK Thread)。Slave这里比较简单,就是在io线程刷盘relay log时给Master的udp线程发一个应答包。、

三、核心参数

sqlasyn=ON

● 是否开启强同步模式。Master和Slave需同时开启该参数,强同步才能正常工作。

● 注意:强同步必须和thread pool一起使用;针对使用extra port或者socket连接(没有使用thread pool),强同步模式失效。 sqlasyntimeout=30

● 强同步下Master等待Slave ACK最大时间;如果超时之后会报超时的错误并断开连接 。 tdsql_allow_async=OFF

● 如果Master没有收到Slave ACK,则允许降级为异步复制。 sqlasync_after_sync=OFF

● 如果为ON,则Master的用户线程在收到Slave ACK后进行engine commit,即AFTER_SYNC模式。如果为OFF,则AFTER_COMMIT模式。 sqlasynwarntimeout=3

● Master接收Slave ACK超过配置的时间,将会在error日志里打印信息,便于在网络、备机等异常的时候分析日志既可以发现一些线索。日志格式如下:

[ERROR] [MY-000000] [Server] session waiting for ack of binlog pos (2,5780) cost [6] sec,exceed 3 sec relay_log_sync_threshold=20000

● 在同步中继日志并将ACK发送给Master之前要累积的字节数。 relay_log_sync_timeout=1000

● 如果自从上次从IO线程fsync&ACK中继日志以来已经过去了这么多微秒,则IO线程无论如何都将fsync&ACK中继日志,而与relay_log_sync_threshold无关。此超时应该短于sqlasyntimeout,否则客户端在提交事务时将获得ER_RBTIMEOUT错误,然后断开连接。 relay_log_sync_txn_count=10

● 如果IO线程自上次fsync&ACK中继日志以来已接收到这么多事务的二进制日志,则无论其他限制如何,它将仍然fsync&ACK中继日志。 tdsql_relay_log_opt=OFF

● 如果为ON,始终在事务结束时刷relay log,以使relay log可靠。sqlasync_group_slave_ack=TRUE

● 是否开启slave节点使用group ack(merge fsync),保证数据持久化,减少IO。

标签:同步,Slave,log,relay,ACK,TDSQL,复制,线程,Master
From: https://blog.51cto.com/u_15721050/6386308

相关文章

  • java同步mysql的数据到PostgreSQL时报错ERROR: invalid byte sequence for encoding "
    最近,同事在做一个功能,通过java程序将mysql中的一张表的数据同步到pgsql中,在同步过程中,插入到pgsql中出现了如下错误:`###Errorupdatingdatabase.Cause:org.postgresql.util.PSQLException:ERROR:invalidbytesequenceforencoding"UTF8":0x00在位置:unnamedportalpa......
  • 华纳娱乐公司在线客服电话18488108816(微信同步)
    华纳娱乐公司在线客服电话18488108816(微信同步)华纳娱乐公司在线客服电话18488108816(微信同步)华纳娱乐公司在线客服电话18488108816(微信同步)华纳娱乐公司在线客服电话18488108816(微信同步)华纳娱乐公司在线客服电话18488108816(微信同步)华纳娱乐公司在线客服电话18488108816(微信同步)......
  • 新建的git仓库同步旧的git仓库代码,并保留git提交历史记录
    新建的git仓库同步旧的git仓库代码,并保留git提交历史记录gitremoteadd$源名称$仓库地址例如:[email protected]:xxx/abc.git然后需要将新建的源代码pull到本地,注意需要添加allow-unrelated-historiesgitfetchabcgitmergeabc/master--allow......
  • 网闸 复制的
    网闸是在两个不同安全域之间,通过协议转换的手段,以信息摆渡的方式实现数据交换,且只有被系统明确要求传输的信息才可以通过。其信息流一般为通用应用服务。网闸的“闸”字取自于船闸的意思,在信息摆渡的过程中内外网(上下游)从未发生物理连接,所以网闸产品必须要有至少两套主机和一个物......
  • 利用 Kattle 同步数据库记录
    在工作中要实现Oracle数据库之间的记录传递,于是使用Kattle工具实现此同步功能,主要设计过程如下图: 我们先看下整个作业过程,主要是通过建立三个转换来实现:一、获取最近的传输标识;  A、获取PUR_ORDER_TRAINMIT_LOG表中 CREDATE_FLG字段,记录下最后一次同步的增量时间......
  • Python异步编程之web框架 异步vs同步 文件IO任务压测对比
    测试基本信息主题:比较异步框架和同步框架在文件IO操作的性能差异python版本:python3.8压测工具:locustweb框架:同步:flask异步:aiohttp、starlette异步文件模块:aiofiles、anyio.Path请求并发量:模拟10个用户服务器配置:Intel(R)i7-12700F客户端配置:Intel(R)i7-87003......
  • 备库复制主库密码文件,替换密码文件
    问题背景:搭建oracle主备,拷贝密码文件后,因为密码问题修改了主库密码,需要替换密码文件,记录密码拷贝:asmcmdASMCMD>cd+DATA/ORCL/PASSWORDASMCMD>lspwdtccs.256.XXXASMCMD>pwcopy+DATA/ORCL/PASSWORD/pwdorcl.256.XXX/home/grid/或ASMCMD>pwcopypwdorcl.256.XXX/hom......
  • 文件传输只是第一步,文件同步和备份的关键是
    有备无患,“备份”的观念早已深入所有信息管理人员的心里。在IT人员信息化安全计划中备份是不可或缺的重要环节。然而,我们还是会经常听到客户抱怨数据备份太慢,文件传输会出现丢失、异常、损坏的情况。那这到底是备份方式有问题还是人员疏忽? 数据备份,保证文件传输高速、稳定只是......
  • 计算机操作系统中实现进程间同步的信号量概念讲解
    在计算机操作系统中,信号量(Semaphore)是一种用于实现进程间同步和互斥的机制。信号量提供了两个基本操作:P(Proberen)和V(Verhogen),它们在进程间进行同步操作。P(Proberen)操作:P操作也被称为"申请"操作或"阻塞"操作。当一个进程执行P操作时,它试图申请一个信号量。如果该信号量的值大于0,......
  • 更改ALV字段并同步自建数据表
    更改ALV字段并同步自建数据表参考ABAP数据表操作教程。ALV报表数据怎么可以实现可编辑?然后可以保存到自建表ZTVBAP_TEST中?修改ALV字段展示属性值。"修改alv显示字段属性editwa_fieldcat-edit='X'."指定显示字段可编辑MODIFYit_fieldcatFROMwa_fieldcatTRANSPORTI......