UCloud高可用数据库UDB主从复制延时的解决

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的监控界面上,我们将这个值单独抽取来,设计了“从库同步延时”监控项,以便于运维人员能够直接在控制台上观察。

UCloud高可用数据库UDB主从复制延时的解决

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

UCloud高可用数据库UDB主从复制延时的解决

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

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

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

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

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

UCloud高可用数据库UDB主从复制延时的解决

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

UCloud高可用数据库UDB主从复制延时的解决

如果有上述的现象,那么很有可能主库对大表执行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团队也会利用多年累积的运营经验,帮助用户及时分析、排查问题原因,并给出合理的解决方法。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:SEO优化专员,转转请注明出处:https://www.chuangxiangniao.com/p/902419.html

(0)
上一篇 2025年1月4日 02:52:18
下一篇 2025年1月4日 02:52:45

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • java数据库中文乱码解决方法

    mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面我们来看一下解决java向数据库插入数据时出现乱码的解决方法。 在数据库的配置的url后加useUnicode=true&a…

    2025年5月3日
    000
  • java利用json文件来实现数据库数据的导入导出

    背景: 工作中我们可能会遇到需要将某个环境中的某些数据快速的移动到另一个环境的情况,此时我们就可以通过导入导出json文件的方式实现。 (学习视频分享:java课程) 举例: 立即学习“Java免费学习笔记(深入)”; 我们将这个环境的数据…

    2025年5月3日 编程技术
    000
  • 如何使用Swoole实现WebSocket服务器与数据库交互

    如何使用Swoole实现WebSocket服务器与数据库交互 简介:WebSocket是一种基于TCP协议的全双工通信协议,可以在客户端与服务器之间建立实时的双向通信。而Swoole是一款PHP扩展,可以方便地实现高性能的异步、并发编程。在…

    2025年5月3日
    000
  • CentOS Java应用性能瓶颈在哪

    在centos系统上运行的java应用程序可能会面临多种性能瓶颈,这些瓶颈可以出现在jvm、代码、数据库和系统资源等多个层次。以下是常见的性能瓶颈及其优化建议: JVM层面 内存管理:不恰当的堆内存设置(例如-Xms和-Xmx)可能会导致频…

    编程技术 2025年5月2日
    000
  • Oracle数据库免费使用的可能性有多大?

    在当前的信息技术领域中,数据库是企业和组织中至关重要的一部分。而Oracle数据库作为市场上具有较高知名度和广泛应用的数据库管理系统之一,一直以来都是许多企业首选的数据库解决方案。然而,随着开源软件和云计算技术的快速发展,越来越多的组织开始…

    2025年5月2日
    000
  • Oracle数据库是否免费提供服务?

    《Oracle数据库是否免费提供服务?》 Oracle数据库是一款领先的企业级关系数据库管理系统,被广泛用于许多大型企业和组织的数据管理和存储。随着数据库技术的发展和普及,许多人关心Oracle数据库是否免费提供服务。在这篇文章中,我们将探…

    2025年5月2日
    000
  • 手机uc看片网址_uc浏览器手机看片网址入口

    UC浏览器的官方视频入口是https://www.php.cn/link/1780e9ba97e0174d231898c0bbfe79b5,用户可在此观看各种视频资源。UC浏览器的功能包括:1.基本浏览功能,如网页浏览、搜索等;2.内容聚合…

    2025年4月30日
    000
  • 如何提升LAMP服务器的稳定性

    确保LAMP(Linux, Apache, MySQL, PHP)服务器稳定运行,需要从硬件、软件配置、监控和维护等多方面入手。以下策略和建议将助您提升服务器稳定性: 硬件方面: 硬件升级: 采用更高速的CPU、更大容量的内存(RAM)和S…

    2025年4月29日
    000
  • LNMP性能测试方法

    lnmp组合(linux、nginx、mysql和php)是部署web应用程序的常用技术栈。为了评估lnmp的性能,可以按照以下步骤和方法进行测试: 性能测试方法 选择性能测试工具:Tricentis NeoLoad:提供全面的负载测试解决…

    2025年4月29日
    000
  • LAMP中Linux怎样优化性能

    在lamp(linux, apache, mysql, php)环境中优化linux性能是一个多方面的任务,涉及到系统配置、资源管理、服务配置等多个层面。以下是一些关键的优化技巧: 系统配置优化 关闭SELinux:虽然SELinux提高了…

    互联网 2025年4月29日
    000

发表回复

登录后才能评论