广告
返回顶部
首页 > 资讯 > 数据库 >高可用数据库主从复制延时的解决方法
  • 290
分享到

高可用数据库主从复制延时的解决方法

2024-04-02 19:04:59 290人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关高可用数据库主从复制延时的解决方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Mysql主从复制的延时一直是业界困扰已久的问题

这篇文章将为大家详细讲解有关高可用数据库主从复制延时的解决方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

Mysql主从复制的延时一直是业界困扰已久的问题。延时的出现会降低主从读写分离的价值,不利于数据实时性较高的业务使用mysql

UDB是UCloud推出的云数据库服务,上线已达六年,运营了数以万计的UDB  Mysql实例。除了提供高可用、高性能、便捷易用的产品特性,团队还平均每天帮助用户解决2-3起MySQL实例主从复制延时的问题。从大量实践中我们总结了主从复制延时的各种成因和解决方法,现分享于此。

延时问题的重要性

主从复制机制广泛应用在UDB的内部实现中:UDB创建的从库和主库就采用了“主从复制”的数据复制;另外,UDB的主打产品“UDB  MySQL高可用实例”,也是采用2个数据库互为主从的“双主模式”来进行数据复制,而双主模式的核心就是主从复制机制。

如果主从复制之间出现延时,就会影响主从数据的一致性。

在高可用复制场景下,我们在UDB高可用容灾设计上考虑到,若出现主备数据不一致的场景,默认是不允许进行高可用容灾切换的。因为在主备数据不一致的情况下,此时发生容灾切换,且在新的主库写入了数据,那么从业务角度上,会产生意想不到的严重后果。

复制延时问题,不仅在UDB高可用中会带来不良后果,在只读从库的场景下,若从库产生复制延时,也可能会对业务造成一定影响,比如在业务上表现为读写不一致——新增/修改数据查不到等现象。

由此可见,主从复制的延时问题在数据库运营中需要特别关注。一般来说,DBA在库上执行'SHOW SLAVE STATUS',并且观察

'Seconds_Behind_Master’的值,就能够了解当前某个数据库和它的主库之间的数据复制延时。这个值是如此的重要,因此在UDB的监控界面上,我们将这个值单独抽取来,设计了“从库同步延时”监控项,以便于运维人员能够直接在控制台上观察。

高可用数据库主从复制延时的解决方法

生产环境中延时问题的分析及解决

我们将最常见的主从复制延时案例总结为几类,以下是相关案例的现象描述、原因分析和解决方法汇总。

◆ 案例一:主库DML请求频繁

某些用户在业务高峰期间,特别是对于数据库主库有大量的写请求操作,即大量insert、delete、update等并发操作的情况下,会出现主从复制延时问题。

现象描述

我们通过观察主库的写操作的QPS的值,会看到主库的写操作的QPS值突然升高,伴随主从复制延时的上升,可以判断是由于主库DML请求频繁原因造成的。

高可用数据库主从复制延时的解决方法

如上图,可以看出,在17:58分左右QPS突增,查看控制台上的写相关QPS,也有相应提升。而QPS突增的时间,对应的延时也在逐步上升,如下图所示。

高可用数据库主从复制延时的解决方法

原因分析

经过分析,我们认为这是由于主库大量的写请求操作,在短时间产生了大量的binlog。这些操作需要全部同步到从库,并且执行,因此产生了主从的数据复制延时。

从深层次分析原因,是因为在业务高峰期间的主库写入数据是并发写入的,而从库SQL  Thread为单线程回放binlog日志,很容易造成relaylog堆积,产生延时。

解决思路

如果是MySQL 5.7以下的版本,可以做分片(sharding),通过水平扩展(scale  out)的方法打散写请求,提升写请求写入binlog的并行度。

如果是MySQL 5.7以上的版本,在MySQL 5.7,使用了基于逻辑时钟(Group Commit)的并行复制。而在MySQL  8.0,使用了基于Write Set的并行复制。这两种方案都能够提升回放binlog的性能,减少延时。

高可用数据库主从复制延时的解决方法

◆ 案例二:主库执行大事务

事务指一个事务的执行,耗时非常长。常见产生大事务的语句有:

  • 使用了大量速度很慢的导入数据语句,比如:INSERT INTO $tb、SELECT * FROM $tb、LOAD DATA INFILE等;

  • 使用了UPDATE、DELETE语句,对于一个很大的表进行全表的UPDATE和DELETE等。

当这个事务在从库执行回放执行操作时,就有可能会产生主从复制延时。

现象描述

我们从SHOW SLAVE STATUS的结果进行分析,会发现 Exec_Master_Log_Pos  字段一直未变,且second_behinds_master持续增加,而 Slave_SQL_Running_State 字段的值为"Reading event  from the relay  log";同时,分析主库binlog,看主库当前执行的事务,会发现有一些大事务,这样基本可以判定是执行大事务的原因导致的主从复制延时。

高可用数据库主从复制延时的解决方法

原因分析

当大事务记录入binlog并同步到从库之后,从库执行这个事务的操作耗时也非常长,这段时间,就会产生主从复制延时。

举个例子,假如主库花费200s更新了一张大表,在主从库配置相近的情况下,从库也需要花几乎同样的时间更新这张大表,此时从库延时开始堆积,后续的events无法更新。

解决思路

对于这种情况引起的主从复制延时,我们的改进方法是:拆分大事务语句到若干小事务中,这样能够进行及时提交,减小主从复制延时。

◆ 案例三:主库对大表执行DDL语句

DDL全称为 Data Definition Language  ,指一些对表结构进行修改操作的语句,比如,对表加一个字段或者加一个索引等等。当DDL对主库大表执行DDL语句的情况下,可能会产生主从复制延时。

现象描述

从现象上,如果从库执行SHOW SLAVE  STATUS的输出中,检查Exec_Master_Log_Pos一直未动,在排除主库执行大事务的情况下,那么就有可能是在执行大表的  DDL。这一点结合分析主库binlog,看主库当前执行的事务就可以进行确认。

DDL语句的执行情况,可以进一步细分现象来更好地判断:

1.DDL未开始,被阻塞,这时SHOW SLAVE STATUS的结果能检查到Slave_SQL_Running_State为waiting for  table metadata lock,且Exec_Master_Log_Pos不变;

高可用数据库主从复制延时的解决方法

2.DDL正在执行,SQL Thread单线程应用导致延时增加。这种情况下观察SHOW SLAVE  STATU的结果能发现Slave_SQL_Running_State为altering table,而Exec_Master_Log_Pos不变。

高可用数据库主从复制延时的解决方法

如果有上述的现象,那么很有可能主库对大表执行DDL语句,同步到从库并在从库回放时,就产生了主从复制延时。

原因分析

DDL导致的主从复制延时的原因和大事务类似,也是因为从库执行DDL的binlog较慢而产生了主从复制延时。

解决思路

遇到这种情况,我们主要通过SHOW  PROCESSLIST或对infORMation_schema.innodb_trx做查询,来找到阻塞DDL语句,并KILL掉相关查询,让DDL正常在从库执行。

DDL本身造成的延时难以避免,建议考虑:

  • 避免业务高峰,尽量安排在业务低峰期执行 ;

  • set  sql_log_bin=0后,分别在主从库上手动执行DDL(此操作对于某些DDL操作会造成数据不一致,请务必严格测试),这一条如果用户使用云数据库UDB,可以联系UCloud  UDB运维团队进行协助操作。

◆ 案例四:主库与从库配置不一致

如果主库和从库使用了不同的计算资源和存储资源,或者使用了不同的内核调教参数,可能会造成主从不一致。

现象描述

我们会详细比对主库和从库的性能监控数据,如果发现监控数据差异巨大,结合查看主从的各个配置情况,即可作出明确判断。

原因分析

各种硬件或者资源的配置差异都有可能导致主从的性能差异,从而导致主从复制延时发生:

  • 硬件上:比如,主库实例服务器使用SSD磁盘,而从库实例服务器使用普通SAS盘,那么主库产生的写入操作在从库上不能马上消化掉,就产生了主从复制延时;

  • 配置上:比如,RAID卡写策略不一致、OS内核参数设置不一致、MySQL落盘策略不一致等,都是可能的原因。

解决思路

考虑尽量统一DB机器的配置(包括硬件及选项参数)。甚至对于某些OLAP业务,从库实例硬件配置需要略高于主库。

◆ 案例五:表缺乏主键或合适索引

如果数据库的表缺少主键或者合适索引,在主从复制的binlog_format设置为'row'的情况下,可能会产生主从复制延时。

现象描述

我们进行数据库检查时,会发现:

  • 观察SHOW SLAVE STATUS的输出,发现Slave_SQL_Running_State为Reading event from the relay  log;

  • SHOW OPEN TABLES WHERE in_use=1的表一直存在;

  • 观察SHOW SLAVE STATUS的Exec_Master_Log_Pos字段不变;

  • mysqld进程的CPU接近100%(无读业务时),IO压力不大。

这些现象出现的情况下,可以认为很可能有表缺乏主键或索引。

原因分析

在主从复制的binlog_format设置为'row'的情况下,比如有这样的一个场景,主库更新一张500万表中的20万行数据。binlog在row格式下,记录到binlog的为20万次update操作,也就是每次操作更新1条记录。如果这条语句恰好有不好的执行计划,如发生全表扫描,那么每一条update语句需要全表扫描。此时SQL  Thread重放将特别慢,造成严重的主从复制延时。

解决思路

这种情况下,我们会去检查表结构,保证每个表都有显式自增主键,并协助用户建立合适索引。

◆ 案例六:从库自身压力过大

有时候,从库性能压力很大的情况下,跟不上主库的更新速度,就产生了主从复制延时。

现象描述

观察数据库实例时,会发现CPU负载过高,IO利用率过高等现象,这些导致SQL  Thread应用过慢。这样就可以判断是因为从库自身压力过大引起主从复制延时。

原因分析

部分UCloud用户对于数据库的主从会使用读写分离模式,读请求大部分在从库上执行。在业务有大量读请求的场景下,从库会产生比主库大得多的性能压力。有的用户甚至会在从库运行十分耗费计算资源的OLAP业务,这也对从库造成了更高的性能挑战,这些都会造成主从复制的延时。

解决思路

这种情况下,我们会建议用户建立更多从库,打散读请求,降低现有从库实例的压力。对于OLAP业务来说,可以专门建立一个从库来做OLAP业务,并对这个从库,允许适当的主从复制延时。

总结在使用MySQL的主从复制模式进行数据复制时,主从复制延时是一个需要考量的关键因素。它会影响数据的一致性,进而影响数据库高可用的容灾切换。

在遇到数据库之间出现主从复制延时的情况下,我们团队基于过往经验,归纳出以下方法与流程来协助排查问题:

  • 通过SHOW SLAVE STATUS与SHOW PROCESSLIST查看现在从库的情况。(顺便也可排除在从库备份时的类似原因);

  • 若Exec_Master_Log_Pos不变,考虑大事务、DDL、无主键,检查主库对应的binlog及position即可;

  • 若Exec_Master_Log_Pos变化,延时逐步增加,考虑从库机器负载,如IO、CPU等,并考虑主库写操作与从库自身压力是否过大。

UDB的高可用、高性能、便捷易用,可以大量减轻使用者的运维负担。在使用过程中,  UDB团队也会利用多年累积的运营经验,帮助用户及时分析、排查问题原因,并给出合理的解决方法。

关于高可用数据库主从复制延时的解决方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: 高可用数据库主从复制延时的解决方法

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 高可用数据库主从复制延时的解决方法
    这篇文章将为大家详细讲解有关高可用数据库主从复制延时的解决方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MySQL主从复制的延时一直是业界困扰已久的问题...
    99+
    2022-10-19
  • MySQL数据库主从复制延时超长如何解决
    这篇文章给大家介绍MySQL数据库主从复制延时超长如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。延时问题的重要性主从复制机制广泛应用在UDB的内部实现中:UDB创建的从库和主库...
    99+
    2022-10-18
  • MySQL主从复制数据不一致的解决方法
    目录1. 准备工作1.1 主机配置1.2 从机配置2. 数据不一致问题3. 原因分析4. 问题解决5. 小结今天来说说 MySQL 主从复制数据不一致的问题,通过几个具体的案例,来向...
    99+
    2022-11-13
  • MySQL5.5数据库的主从复制用法
    这篇文章主要讲解了“MySQL5.5数据库的主从复制用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL5.5数据库的主从复制用法”吧!MySQL ...
    99+
    2022-10-18
  • PHP实现数据库主从复制的方法
    随着业务的不断发展和业务量的不断增加,单个数据库的性能往往难以满足需求,因此数据库集群成为了一个非常重要的方向。在数据库集群中,主从复制是一个非常常见且重要的技术,通过主从复制可以将主数据库中的数据实时同步到从数据库中,保证数据的安全性和可...
    99+
    2023-05-17
    数据库 PHP 主从复制
  • 教你彻底解决MySQL 5.7 主从复制的延迟问题方法
    本文主要给大家简单讲讲彻底解决MySQL 5.7 主从复制的延迟问题方法,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望彻底解决MySQL 5.7 主从复制的...
    99+
    2022-10-18
  • PHP实现Memcached数据库主从复制的方法
    Memcached是一个开源的高性能分布式内存对象缓存系统,可用于加快web应用程序,尤其是在大规模数据缓存方面表现良好。对于该系统而言,主从复制是一种非常重要的功能,它可以用于保证数据的可靠性和高可用性。本文将介绍如何使用PHP实现Mem...
    99+
    2023-05-15
    PHP memcached 主从复制
  • PHP实现MongoDB数据库主从复制的方法
    在现代的网络应用程序中,数据处理和管理是至关重要的任务。随着Web应用程序变得越来越复杂,需要处理海量数据,存储和处理这些数据的数据库也越来越多了。MongoDB是一种NoSQL数据库,在Web应用程序中被广泛使用。与MySQL等关系型数据...
    99+
    2023-05-16
    PHP MongoDB 主从复制
  • PHP实现Oracle数据库主从复制的方法
    随着互联网应用的不断发展,数据库的稳定性和性能需求越来越高。为了保证数据库的高可用性和数据安全性,数据库主从复制已经成为了一种比较普遍的解决方案。在本文中,我们将介绍如何使用PHP实现Oracle数据库主从复制。一、主从复制介绍数据库主从复...
    99+
    2023-05-16
    PHP 主从复制 Oracle数据库
  • PHP实现Redis数据库主从复制的方法
    近年来随着Web应用的快速发展,数据库的处理量也越来越大,性能的要求也越来越高,所以分布式数据库的需求也日渐增加。而Redis是一种流行的NoSQL数据库,支持多种分布式方案,其中主从复制是一种常用且实现起来比较简单的分布式方案。本文将介绍...
    99+
    2023-05-15
    PHP redis 主从复制
  • PHP实现数据库主从复制故障恢复的方法
    随着互联网的迅速发展,大量的数据需要存储和处理,因此数据库成为现代应用开发中不可或缺的一部分。而在现实应用中,由于网络环境、硬件故障等多种因素的影响,数据库主从复制的故障恢复常常是一项必不可少的任务。在本文中,我们将介绍如何使用PHP实现数...
    99+
    2023-05-16
    PHP 故障恢复 数据库主从复制
  • PHP实现数据库主从复制故障切换的方法
    随着互联网的快速发展,数据库作为后台数据存储的重要组成部分,对于网站的高可用性和性能优化至关重要。其中,主从复制是一个常用的数据库高可用性解决方案,可以在不影响服务的情况下提高系统的稳定性和可用性。本文主要介绍如何使用PHP实现主从复制及故...
    99+
    2023-05-15
    PHP 数据库主从复制 故障切换
  • 解决MySQL主从数据库没有同步的两种方法
    目录解决MySQL主从数据库没有同步的两种方法一、不同步情况二、解决方案 1.先进入主库,进行锁表,防止数据写入2.进行数据备份3.查看master 状态4.把mysql备份文件传到...
    99+
    2022-11-12
  • mysql复制slave服务器数据延迟的原因与解决方法
    mysql复制slave服务器数据延迟的原因与解决方法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。复制slave服务器数据延...
    99+
    2022-10-18
  • 优化数据库性能:MySQL主从复制在集群技术中的最佳使用方法
    优化数据库性能:MySQL主从复制在集群技术中的最佳使用方法摘要:随着互联网的快速发展,数据库的性能问题成为了各个企业和组织关注的焦点。MySQL主从复制技术在解决数据库性能瓶颈方面发挥着重要作用。本文将介绍MySQL主从复制的概念及原理,...
    99+
    2023-10-22
    数据库性能优化 集群技术 MySQL主从复制
  • 解决MongoDB技术开发中遇到的数据复制延迟问题的方法研究
    解决MongoDB技术开发中遇到的数据复制延迟问题的方法研究引言:在现代应用程序开发中,数据库复制是确保数据高可用性和容错性的重要组成部分。MongoDB作为一种流行的NoSQL数据库,提供了一种名为复制集的机制来实现数据复制和故障转移。然...
    99+
    2023-10-22
    MongoDB 解决方法 数据复制延迟
  • 阿里云新数据库高性能、高可用的新一代数据库解决方案
    随着大数据时代的到来,数据量的爆炸式增长使得传统的数据库解决方案已经无法满足日益复杂的应用需求。阿里云新数据库,作为新一代的数据库解决方案,以高性能、高可用为特点,为用户提供了一种全新的数据库体验。 阿里云新数据库是阿里云推出的一款高性能、...
    99+
    2023-11-01
    数据库 阿里 高性能
  • Swoole和Workerman对PHP与MySQL的数据高可用和数据复制的优化方法
    一、高可用性的实现数据库连接池在使用PHP操作MySQL数据库时,每次进行数据库操作都需要建立和关闭与数据库的连接,这样效率较低。而使用连接池技术,可以使得连接的创建和销毁复用,提高数据库访问性能。以下是使用Swoole实现数据库连接池的示...
    99+
    2023-10-21
    swoole Workerman 数据高可用
  • 深度解析阿里云 SQL 服务器高性能、高可用的数据库解决方案
    阿里云 SQL 服务器是阿里云推出的一款云端数据库产品,旨在为企业提供高效、安全的数据库服务。本文将深入解析阿里云 SQL服务器,包括其性能特点、高可用性设计以及适用场景等。 一、性能特点 阿里云 SQL 服务器采用先进的分布式数据库技术...
    99+
    2023-12-15
    阿里 高性能 深度
  • 漏刻有时数据可视化大屏常见问题(9):mysql数据库.sql文件制作自动安装格式的解决方案
    在数据可视化制作的过程中,数据库结构总是在不断的调整和变化中。为了给程序开发者更好的操作体验,简化操作流程,需要在程序测试完毕打包版本的时候,对数据库进行格式操作,以便完成初始化的自动安装。现就如何实现数据库自动安装格式的步骤整理如下: ...
    99+
    2018-07-09
    漏刻有时数据可视化大屏常见问题(9):mysql数据库.sql文件制作自动安装格式的解决方案
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作