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)

大家都在看

  • centos安装chrome和解决chrom点击打不开页面的问题

    1、去官网下载chrom的rpm包 2、进入到下载包的目录,执行:yum -y localinstall google-chrome-stable_current_x86_64.r…

    数据库 2023年6月11日
    098
  • MySQL第1章——数据库概述

    数据库概述 为什么要使用数据库 什么是数据持久化? 数据持久化就是把数据保存到可掉电式存储设备中供以后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘…

    数据库 2023年6月14日
    080
  • 工厂模式

    工厂模式是java中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一…

    数据库 2023年6月11日
    092
  • Java中CMD命令来备份mysql数据库备份文件出来为0字节问题

    Java中CMD命令来备份mysql&#…

    数据库 2023年5月24日
    0113
  • 解决Tomcat部署工件中无子模块的工件

    本文是在尝试了刷新Maven项目、clean了Maven缓存并且重启IDEA之后任然无法在Tomcat中找到子模块对应的工件,这时就要试着模仿着自己创建一个模块父类的pom.xml…

    数据库 2023年6月16日
    086
  • Git的常见命令

    Git 一、git环境安装 1.初始化本地仓库: git init 2.将本地仓库跟远程仓库建立连接:git remote add name path ​ git clone pa…

    数据库 2023年6月16日
    082
  • docker-compose部署rocketmq

    docker-compose安装: Ubuntu下载docker-compose文件 sudo curl -L https:/…

    数据库 2023年6月11日
    084
  • python自动安装mysql5.7

    python版本:python2.6 centos版本:centos6.9 mysql版本:mysql5.7.19 安装目录路径和数据目录路径都是固定,当然也可以自己修改 这个脚本…

    数据库 2023年6月9日
    0167
  • 赞!7000 字学习笔记,一天搞定 MySQL

    MySQL近两年一直稳居第二,随时有可能超过Oracle计晋升为第一名,因为MySQL的性能一直在被优化,同时安全机制也是逐渐成熟,更重要的是开源免费的。 MySQL是一种关系数据…

    数据库 2023年6月9日
    079
  • Docker从入门到精通

    1 容器简介1.1 什么是 Linux 容器1.2 容器不就是虚拟化吗1.3 容器发展简史2 什么是 Docker?2.1 Docker 如何工作?2.2 Docker 技术是否与…

    数据库 2023年6月14日
    093
  • 汇编实验十编写子程序

    第一题,显示字符串,8行3列显示Welcome to masm! assume cs:codedata segmentdb ‘Welcome to masm!&#821…

    数据库 2023年6月11日
    080
  • B树-查找

    B树系列文章 1. B树-介绍 2. B树-查找 3. B树-插入 4. B树-删除 查找 假设有一棵3阶B树,如下图所示。 下面说明在该B树中查找 52的过程 首先,从根结点出发…

    数据库 2023年6月14日
    0139
  • 数据库持久化+JDBC数据库连接

    数据持久化就是 将内存中的数据模型转换为存储模型,以及 将存储模型转换为内存中的数据模型的统称。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。 …

    数据库 2023年6月16日
    0124
  • Redis集群(三)集群模式

    一、 集群的作用 集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。 集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点…

    数据库 2023年6月11日
    084
  • MySQL函数学习(二)—–数值型函数

    注:笔记旨在记录 二、MySQL 数值型函数 \ 函 数 名 称 作 用 完 成 1 RAND 取随机数,可设置参数种子 勾 2 ABS 求x的绝对值 勾 3 SIGN 求x的正负…

    数据库 2023年6月16日
    078
  • Java并发编程之AQS以及源码解析

    文章目录 概览 实现思路 实现原理 * 源自CLH锁 AQS数据模型 CAS操作 主要方法 * 自定义同步器的实现方法 AQS定义的模板方法 源码解读 * 等待状态释义 AQS获取…

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