资讯专栏INFORMATION COLUMN

面试官:咱们来聊一聊mysql主从延迟

EasonTyler / 3511人阅读

摘要:编辑器编辑器背景编辑器前段时间遇到一个线上问题,后来排查好久发现是因为主从同步延迟导致的,所以今天写一篇文章总结一下这个问题希望对你有用。编辑器几句唠叨编辑器大家好,我是小饭,一枚后端工程师。

背景

前段时间遇到一个线上问题,后来排查好久发现是因为主从同步延迟导致的,所以今天写一篇文章总结一下这个问题希望对你有用。如果觉得还不错,记得加个关注点个赞哦

思维导图

思维导图
思维导图

常见的主从架构

随着日益增长的访问量,单台数据库的能力已经捉襟见肘。因此采用主库写数据,从库读数据这种将读写分离开的主从架构便随之衍生了出来。

一主一从

一主一从
一主一从

一主多从

一主多从
一主多从

一主一从和一主多从是最常见的主从架构,实施起来简单并且有效,不仅可以实现高可用,还能读写分离,进而提升集群的并发能力。

多主一从

多主一从
多主一从

双主复制

双主复制
双主复制

级联复制

级联复制
级联复制

主从同步原理

想要了解主从同步原理,首先得记住两个很重要的日志文件

  • binlog(二进制日志文件)
  • relay log(中继日志文件)
主从同步原理
主从同步原理

主从同步过程

  • 从库生成两个线程,一个I/O线程,一个SQL线程;
  • i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
  • 主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog
  • SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

如何判断主从是否延时

通过监控 show slave status 命令输出的Seconds_Behind_Master参数的值来判断:

  • NULL,表示io_thread或是sql_thread有任何一个发生故障;
  • 0,该值为零,表示主从复制良好;
  • 正值,表示主从已经出现延时,数字越大表示从库延迟越严重。
show slave status
show slave status

主从延迟原因

随机重放

MySQL的主从复制都是单线程的操作,主库对所有DDL和DML产生的日志写进binlog,由于binlog是顺序写,所以效率很高。Slave的SQL Thread线程将主库的DDL和DML操作事件在slave中重放。DML和DDL的IO操作是随机的,不是顺序的,成本高很多。所以SQL Thread线程的速度赶不上主库学binlog的速度,就会产生主从延迟

锁等待

另一方面,由于SQL Thread也是单线程的,当主库的并发较高时,产生的DML数量超过slave的SQL Thread所能处理的速度,或者当slave中有大型query语句产生了锁等待那么延时就产生了。

主从延迟解决办法

并行复制

既然 SQL 单线程进行重放时速度有限,那么能不能采用多线程的方式来进行重放呢?MySQL 5.6 版本后,提供了一种并行复制的方式,通过将 SQL 线程转换为多个 work 线程来进行重放,这样就解决了主从延迟的问题并行复制

降低并发

如果你理解了随机重放这个导致主从延迟的原因,那么就比较好理解了,控制主库写入的速度,主从延迟发生的概率自然就小了。

读主库

如果你做的是类似支付这种对实时性要求非常高的业务,那么最直接的方法就是直接读主库。

几句唠叨

大家好,我是小饭,一枚后端工程师。如果觉得文章对你有一点点帮助,欢迎分享给你的朋友,也给小饭点个赞,下面是我的公众号,感兴趣可以关注,这是小饭坚持下去的动力,谢谢大家,我们下次见!

二维码
二维码

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123657.html

相关文章

  • 有关于存储

    摘要:处于这一阶段的应用承载的用户量有限,一般这个时候整个应用的数据存储可以用单点进行支撑,没有很大的限制。出现种种问题后,需要对存储层进行适当的改良了。将不相关的数据拆分存储到不同的实例上,这确实能够很好的解决某种意义上的单点问题。 此篇就来谈谈数据存储吧!年初的时候进入一家互联网公司实习,刚好做的是分布式存储系统,主要支撑部门中的应用(部门所有的应用都可以承载在上面)数据存储。下面分阶段...

    未东兴 评论0 收藏0
  • 来聊一聊Cookie(小甜饼),及其涉及到的web安全吧

    摘要:最近在用写自己的博客,发现总是掉到的坑,于是就好好八一八这个小甜饼,没想到居然还说很有意思的,每一个知识点都能拉出一条大鱼,想想自己之前对,简直就是它认识我,我只能叫出他的名字。 最近在用thinkjs写自己的博客,发现总是掉到cookie的坑,于是就好好八一八这个小甜饼,没想到居然还说很有意思的,每一个知识点都能拉出一条大鱼,想想自己之前对cookie,简直就是它认识我,我只能叫出他...

    Donne 评论0 收藏0
  • [聊一聊系列]聊一聊前端速度统计(性能统计)那些事儿

    摘要:性能统计有助于帮我们检测网站的用户体验。这样,我们就轻轻松松的统计到了首屏时间。下一章,我们将继续聊聊百度移动版首页那些事。 欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面(不仅仅是代码): https://segmentfault.com/blog/frontenddriver 上一篇文章我们讨论了,如何进行前端日志打点统计: https://segm...

    gclove 评论0 收藏0
  • [聊一聊系列]聊一聊前端速度统计(性能统计)那些事儿

    摘要:性能统计有助于帮我们检测网站的用户体验。这样,我们就轻轻松松的统计到了首屏时间。下一章,我们将继续聊聊百度移动版首页那些事。 欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面(不仅仅是代码): https://segmentfault.com/blog/frontenddriver 上一篇文章我们讨论了,如何进行前端日志打点统计: https://segm...

    hzc 评论0 收藏0
  • [聊一聊系列]聊一聊前端速度统计(性能统计)那些事儿

    摘要:性能统计有助于帮我们检测网站的用户体验。这样,我们就轻轻松松的统计到了首屏时间。下一章,我们将继续聊聊百度移动版首页那些事。 欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面(不仅仅是代码): https://segmentfault.com/blog/frontenddriver 上一篇文章我们讨论了,如何进行前端日志打点统计: https://segm...

    Karuru 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<