MySQL深入——16

MySQL如何保持高可用??

主备延迟

主备延迟分为两类,一类主动比如软件升级,主库所在机器按照计划下线等,另外一类是被动,比如主库所在机器掉电。

在看这个概念之前,我们先来看看“同步延迟”,与数据同步有关的时间点有三个

1.主库A完成事务,写入binlog,这是T1时刻

2.主库A将binlog发送给备库B,B接收完毕,这是T2时刻

3. 备库B执行完成这个事务,这是时刻T3。

所谓的主备延迟就是T3-T1的差值。

可以使用show slave status命令来看seconds_behind_master来看看备库延迟了多少秒。

因为在每个事务的binlog当中都有一个时间字段来记录主库写入的时间,备库他会将正在执行事务的时间字段与当前系统的时间做差,得到延迟时间。

那么我们可能会想,既然是与备库的系统时间作差实现的,那么有没有可能备库的系统时间与主库的系统时间不同,从而导致延迟时间不准呢?其实这是不必担心的,在备库连接到主库的时候,他会通过一个select unix_timestamp()函数来获得主库的系统时间,要是发现与自己的不同,他会在计算的时候直接扣除这个时间差。

主备延迟最直接的表现是,备库消费中转日志(relay log)的速度,比主库生产binlog的速度要慢,这是什么导致的呢?

主备延迟的来源

首先在有些情况下,备库的机器性能是比主库的机器性能要差的。

或者备库的压力太大,因为大多数情况下,因为主库提供了写能力,那么备库就提供一些读能力,或者一些分析语句,因为主库是直接影响业务的,所以全在备库上运行导致压力过大,耗费了大量的CPU资源从而影响了同步速度,造成了主备延迟。

要解决这种问题,我们可以多接几个从库,让从库来分担压力,或者通过binlog输出到外部系统,比如Hadoop这类系统,让外部系统提供查询的功能。

还有一种可能就是大事务造成的,因为主库上必须得等事务执行完了之后才会写入binlog,假如他执行了10分钟,就会导致10分钟的主备延迟。

可靠性优先策略

在双M结构下,从状态1到状态2切换的详细过程是这样的:

  1. 判断备库B现在的seconds_behind_master,如果小于某个值(比如5秒)继续下一步,否则持续重试这一步;

  2. 把主库A改成只读状态,即把readonly设置为true;

  3. 判断备库B的seconds_behind_master的值,直到这个值变成0为止;

  4. 把备库B改成可读写状态,也就是把readonly 设置为false;

  5. 把业务请求切到备库B。

如果一开始主备延迟就长达 30 分钟,而不先做判断直接切换的话,系统的不可用时间就长达30分钟。

可用性优先策略

如果我强行将步骤4.5放到刚开始就执行,就是说不用等主备数据同步,直接将连接切换到备库B上,让备库可以读写,那么系统就没有不可用时间了。这样操作的代价是可能出现数据不一致的情况。

在紧急情况下,比如主库掉电,就不能使用可靠性优先策略,因为要等待seconds_behind_master为0,直接使用可用性优先策略,进行切换,事后再补数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈谈 RocketMQ 5.0 分级存储背后一些有挑战的技术优化

作者:斜阳 RocketMQ 5.0 提出了分级存储的新方案,经过数个版本的深度打磨,RocketMQ 的分级存储日渐成熟,并成为降低存储成本的重要特性之一。事实上,几乎所有涉及到存储的产品都会尝试转冷降本,如何针对消…

张量计算和操作

一、数据操作 1、基础 import torchx torch.arange(12) # x:tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])x.shape # torch.Size([12])x.numel() # 12x x.reshape(3, 4) # tensor([[ 0, 1, 2, 3], # [ 4, 5, 6, 7], # [ 8, 9, 10, 11]])torch.zeros((2…

自动化Web页面性能测试介绍

随着越来越多的用户使用移动设备访问 Web 应用,使得 Web 应用需要支持一些性能并不是很好的移动设备。为了度量和测试 Web 应用是不是在高复杂度的情况下,页面性能能满足用户的需求。 同时,随着 Web 应用的空前发展,前端业务逐渐…

插入排序

插入排序 概述步骤代码示例输出结果 概述 插入排序是一种最简单直观的排序算法,它的工作原理是通过创建有序序列和无序序列,然后再遍历无序序列得到里面每一个数字,把每一个数字插入到有序序列中正确的位置。 插入排序是一种简单直观的排序…

某马头条——day10

热文章数据查询 分布式任务调度xxl-job 概述 环境搭建 docker化部署 docker run -p 3306:3306 --name mysql57 \ -v /opt/mysql/conf:/etc/mysql \ -v /opt/mysql/logs:/var/log/mysql \ -v /opt/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORDroot\ -d mysql:5.7 dock…

尝试给docker ubuntu22.04镜像添加远程访问桌面

实在时不愿折腾,但是ubuntu 镜像没有桌面,有些操作实在太难受了,效率也不高。硬着头皮上吧。幸亏这是个docker的镜像。要是个虚拟机,这折腾来去,直接崩溃了。docker的好处就是立马就能从头来过,秒级的删除安…

分辨率 时钟频率 lane速率计算

PCLK: pixel clock(像素频率) 计算方法如下: 以1920x1080p/60hz为例,total pixel:2200,total line:1125,filed rate:60Hz,那么:PCLK 2200*1125*60 148.5MHz&#xff1b…

ATF(TF-A)安全通告TF-V11——恶意的SDEI SMC可能导致越界内存读取(CVE-2023-49100)

目录 一、ATF(TF-A)安全通告TFV-11 (CVE-2023-49100) 二、透过事务看本质SDEI是干啥的呢? 三、CVE-2023-49100 1、GICv2 systems 2、GICv3 systems 四、漏洞修复 一、ATF(TF-A)安全通告TFV-11 (CVE-2023-49100) Title 恶意的SDEI SMC可能导致越界内存读取&am…

Spring Security架构

文章目录 过滤器回顾DelegatingFilterProxyFilterChainProxySecurityFilterChainSecurity Filters打印Security Filters将自定义过滤器添加到过滤器链 Handling Security ExceptionsSaving Requests Between AuthenticationRequestCachePrevent the Request From Being Saved R…

Mysql的备份以及恢复

第五章 MySQL的备份及恢复 5.1 MySQL日志管理 在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这样情况下,我们必须保证数据的安全性和完整性,就需要使用日志来查看或者恢复数据了 数据库中数据丢失或被破坏可能原…

Spring SpEL在Flink中的应用-与Filter结合实现数据动态分流

文章目录 前言一、POM依赖二、主函数代码示例三、FilterFunction实现总结 前言 SpEL表达式与Flink fiter结合可以实现基于表达式的灵活动态过滤。有关SpEL表达式的使用请参考Spring SpEL在Flink中的应用-SpEL详解。 可以将过滤规则放入数据库,根据不同的数据设置不…

【c++学习】数据结构中的顺序表

c顺序表 数据结构中的顺序表代码 数据结构中的顺序表 顺序表强调数据的存储结构,表示数据在内存中连续存储。(线性表与链表相对,链表数据在内存中的存储空间是不连续的) 代码 下述代码实现了线性表及其接口 包括增、删、查、改…

《游戏-01_3D-开发》之—人物动画控制器

创建变量, 创建线, 连接, 选中线会变为蓝色,新增变量, 设置线, 双击子层进入子层, 创建变量, 双击SkillPanel 拖拽好之后返回上一层, 依次连接, 设置线&#…

解释LoRA参数

目录 LoRA参数含义 LoRA在深度学习中的作用 示例代码中的LoRA应用 结论 LoRA参数含义 LoRA (lora_r): LoRA代表"Low-Rank Adaptation",是一种模型参数化技术,用于在不显著增加参数数量的情况下调整预训练模型。lora_r参数指的是LoRA中的秩&…

[Tomcat] [从安装到关闭] MAC部署方式

安装Tomcat 官网下载:Apache Tomcat - Apache Tomcat 9 Software Downloads 配置Tomcat 1、输入cd空格,打开Tomca目录,把bin文件夹直接拖拉到终端 2、授权bin目录下的所有操作:终端输入[sudo chmod 755 *.sh],回车 …

springboot(ssm干洗店预约洗衣系统 衣物清洗预约系统Java系统

springboot(ssm干洗店预约洗衣系统 衣物清洗预约系统Java系统 开发语言:Java 框架:springboot(可改ssm) vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7…

docker: 搭建 harbor 镜像仓库

harbor 企业级内网镜像管理软件,加速拉取镜像速度,web 页面管理方便。 系统优化 systemctl stop NetworkManager systemctl disable NetworkManager iptables -F systemctl restart docker安装docker [roottest05 ~]# yum install -y docker-compose…

【GitHub项目推荐--不错的 Go 学习项目】【转载】

开源实时性能分析平台 Pyroscope 是基于 Go 的开源实时性能分析平台,在源码中添加几行代码 pyroscope 就能帮你找出源代码中的性能问题和瓶颈、CPU 利用率过高的原因,调用树展示帮助你理解程序,支持 Go、Python、Ruby 语言。 Pyroscope 可以…

nestjs之适配器模式的应用

NestJS 是一个用于构建高效、可靠和可扩展的服务器端应用程序的框架。在 NestJS 中,适配器模式(Adapter Pattern)主要体现在其对不同类型的 HTTP 服务端框架的适配上。NestJS 本身是建立在 Express 或者 Fastify 这样的底层 HTTP 框架之上的&…

openssl3.2/test/certs - 033 - time stamping certificates

文章目录 openssl3.2/test/certs - 033 - time stamping certificates概述笔记END openssl3.2/test/certs - 033 - time stamping certificates 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 /*! \file my_openssl_linux_log_doc_033.txt\note openssl3.2/test/ce…