MySQL45讲之保证高可用

本文主要介绍 MySQL 主备延迟,延迟产生的原因和主备切换策略。

主备延迟

主备同步过程中主要有三个时间点:

[En]

There are three main time points in the process of master / slave synchronization:

所谓主备延迟,指的就是同一个事务下,T3-T1 的时间差值。

主备延迟的计算,可以在备库下,通过 show slave status 命令查看,返回的结果中 seconds_behind_master 代表的就是主备延迟,单位是秒。它会等于(备机执行 binlog 时间戳 – binlog 记录的主机执行时间戳)。

一般在网络正常的情况下,备机接收主机发送的 binlog 很快,即 T2-T1 很小,可以忽略不计。主备延迟的主要来自于 T3-T2,这个时间差值代表备机执行中继日志(relay log)的速度比主机产生 binlog 日志的速度慢多少。

此外,您可能想知道主备系统的不一致是否会影响主备延迟。

[En]

In addition, you may wonder whether the inconsistency between the active and standby systems will affect the active / standby latency.

答案是否定的。因为主备机连接后,备机会获取主机的系统时间,然后与本地系统时间进行比较,计算出差值,在以后的计算中会随身携带。

[En]

The answer is no. Because after the main and standby machines are connected, the standby machine will obtain the system time of the host, and then compare it with the local system time to calculate the difference, which will be taken with it in the later calculation.

产生原因

1. 备机的性能比主机差

目前这种部署较少,因为考虑到要进行主备倒换,一般采用对称部署,即主备使用相同的规格。

[En]

At present, this kind of deployment is less, because considering that the master / slave switch will be carried out, symmetrical deployment is generally adopted, that is, the master / slave uses the same specification.

2. 备机压力大

主机用来完成写操作,备机可以用来完成一些读操作,也可以用后台操作来做一些数据分析工作。备机的压力不小于主机的压力,导致备机的同步延迟。

[En]

The host is used to complete the write operation, while the standby machine may be used to complete some read operations, or the background operation to do some data analysis work. The pressure of the standby is no less than that of the host, which leads to the synchronization delay of the standby.

解决方案:

1、一主多从,多个从机分担查询压力
2、对于数据分析场景,可以将 binlog 同步到外部系统,像 hadoop。

3. 大事务

即便保证主备机压力基本一致,但大事务情况下,主备机都要耗费相近的执行时间,从而导致备机的同步延迟。所以,DBA 往往会叮嘱开发不要执行大事务。就算一定要执行,也要将大事务分割成多个小事务来执行。

4. 大表DDL

大表DDL会占用很多的 CPU 和 IO 资源,很容易造成主备延迟。所以,要比较安全的操作,建议采用 gh-ost 进行。

开发在线上执行 SQL 时一定要注意,不能执行大事务或者大表DDL这种耗时操作,尤其是比较重要的服务,否则会造成主备延迟,影响业务。

主备切换策略

1. 可靠性优先策略

切换步骤:

可靠性优先的缺点是主备机在一段时间内不可用,不可用的时长取决于步骤3,直到步骤5完成才会恢复。

[En]

The disadvantage of reliability priority is that the main and standby machines are unavailable for a period of time, and the length of unavailability depends on step 3, which is not restored until the completion of step 5.

2. 可用性优先策略

为了确保可用性优先级,首先执行步骤4和5,使不可用时间为0。但这可能会导致主机和备用计算机之间的数据不一致。

[En]

In order to ensure availability priority, steps 4 and 5 are performed first so that the unavailability time is 0. But this may cause data inconsistencies between the host and standby computers.

Original: https://www.cnblogs.com/flowers-bloom/p/mysql45-ha.html
Author: flowers-bloom
Title: MySQL45讲之保证高可用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/508078/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • vue入门(一)

    模板语法 插值语法 功能:用于解析标签体内容 写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性。 指令语法 功能:用于解析标签(包括:标签属性、标签内…

    数据库 2023年6月6日
    077
  • 最左前缀有手就会,那索引下推呢?

    联合指数的最左侧前缀原则属于高频面试题,大多数学生都必须知道,但不符合最左侧前缀的部分会发生什么(指数向下推) [En] The leftmost prefix principle…

    数据库 2023年5月24日
    072
  • 工程师成长阶段感悟

    从 2013 年陆续开始做软件研发工作, 去过不少公司, 做过一些类型项目, 桌面开发, web 开发, 手游开发, 端游开发, 棋牌, 视频云服务, 电商. 刚毕业那会在国企, …

    数据库 2023年6月9日
    082
  • springmvc静态资源配置

    <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>o…

    数据库 2023年6月16日
    086
  • 设计 | ClickHouse 分布式表实现数据同步

    作者:吴帆 青云数据库团队成员主要负责维护 MySQL 及 ClickHouse 产品开发,擅长故障分析,性能优化。 在多副本分布式 ClickHouse 集群中,通常需要使用 D…

    数据库 2023年5月24日
    093
  • Kafka集群部署

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月16日
    065
  • NO.6 HTML+CSS 笔记

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    067
  • leetcode 669. Trim a Binary Search Tree 修剪二叉搜索树 (简单)

    一、题目大意 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变…

    数据库 2023年6月16日
    083
  • Spring Boot之WebSocket

    1、项目地址:https://github.com/hqzmss/test01-springboot-websocket.git 2、IDE:IntelliJ IDEA 2018….

    数据库 2023年6月9日
    071
  • 深入浅出的分析 Set集合

    作者:炸鸡可乐原文出处:www.pzblog.cn 一、摘要 关于 Set 接口,在实际开发中,其实很少用到,但是如果你出去面试,它可能依然是一个绕不开的话题。 言归正传,废话咱们…

    数据库 2023年6月14日
    081
  • 不可不知的 MySQL 升级利器及 5.7 升级到 8.0 的注意事项

    数据库升级是一项苦乐参半的工程。好消息是,通过升级,你可以享受到新版本带来的新功能和性能提升。令人担忧的是,新版本可能与旧版本不兼容,这主要体现在以下三个方面: [En] Data…

    数据库 2023年5月24日
    062
  • mybatis SelectKey解析

    1.selectKey介绍及作用 resultType:sql返回的java类型 statementType:STATEMENT|PREPARED|CALLABLE三种默认PREP…

    数据库 2023年6月16日
    087
  • macbook air 2019 安装win10单系统

    目前不考虑写的太详细了,如果有同学遇到问题了我再完善,主要是把遇到的坑讲下第一步,准备2个U盘(如果不嫌麻烦一个也可以)1.用大白菜或者老毛桃将其中一个做成启动盘2.在window…

    数据库 2023年6月9日
    0330
  • 2022-08-19 PreparedStatement

    PreparedStatement接口是 Statement的子接口,它表示一条预编译过的SQL语句 什么是SQL注入 SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,…

    数据库 2023年6月14日
    075
  • HttpServletRequest 类

    HttpServletRequest类有什么作用 HttpServletRequest 类的常用方法 如何获取请求参数 doGet 请求的中文乱码解决: POST 请求的中文乱码解…

    数据库 2023年6月11日
    071
  • 学习笔记——Django项目中的F对象,Q对象,聚合函数,排序

    2022-09-30 F对象: 在shell中是用于两个有关联的属性之间的查询。 使用实例: 查询书籍表中阅读量大于评论量的记录 前提,进入pycharm,进入虚拟环境,进入she…

    数据库 2023年6月14日
    077
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球