MySQL之复制(八)

news2025/1/19 17:12:31

复制

复制和容量规划

备库什么时候开始延迟

一个关于备库比较普遍的问题是如何预测备库会在何时跟不上主库。很难去描述备库使用的复制容量为5%与95%的区别,但是至少能够在接近饱和前预警并估计复制容量。首先应该古纳差复制延迟的尖刺。如果有复制延迟的曲线图,需要注意到图上的一些短暂的延迟骤升,这时候可能负载加大,备库短时间内无法跟上主库。当负载接近耗尽备库的容量时,会发现曲线上的凸起会更高更宽。前面曲线地上升角度不必那,但随后当备库在产生延迟后开始追赶主库时,将会产生一个平缓的斜坡。这些突起的出现和增长是一个警告信息,意味着已经接近容量限制。
为了预测在将来的某个时间点会发生什么,可以人为地制造延迟,然后看多久备库能赶上主库。目的时为了明确地曲线上的斜坡的陡度。如果讲备库停止一个小时,然后开启并在1小时内追赶上,说明正常情况下只消耗了一半的容量。也就是说,如果中午12:00停止备库复制,在1:00开启,并且在2:00追赶上,备库在一小时内完成了两个小时内所有的变更,说明复制可以在双倍速度下运行。
最后,如果使用得时Percona Server或者MariaDB,也可以直接获取复制的利用率。打开服务器变量userstat,然后执行如下语句:

mysql> SELECT * FROM INFORMATION_SCHEMA.USER_STATISTICS WHERE USER='#mysql_system#'\G
*************************** 1. row ***************************
USER:#mysql_system#
TOTAL_CONNECTIONS:1
CONCURRENT_CONNECTIONS:2
CONNECTED_TIME:46188
BUSY_TIME:719
ROWS_FETCHED:0
ROWS_UPDATED:1882292
SELECT_COMMANDS:0
UPDATE_COMMANDS:580431
OTHER_COMMANDS:338857
COMMIT_TRANSACTIONS:1016571
ROLLBACK_TRANSACTIONS:0

可以讲BUSY_TIME和CONNECTED_TIME的一半(因为备库有两个复制线程)做比较,来观察备库线程实际执行命令所花费的事件(如果复制线程总是在运行,你可以使用服务器的uptime来代替CONNECTED_TIME的一半)。在该例子中,备库大约使用了其3%的能力,这并不意味着它不会遇到偶然的延迟尖刺——如果主库运行了一个超过10分钟才完成的变更,可能延迟的事件和变更执行的事件是相同的——但这很好地暗示了备库能够很快从一个延迟尖刺中恢复

规划冗余容量

在构建一个大型应用时,有意让服务器不被充分利用,,这应该是一种聪明并且划算的方式,尤其在使用复制的时候。有多余容量的服务器可以更好地处理负载尖峰,也有更多能力处理慢速查询和维护工作(如OPTIMIZE TABLE ),并且能够更好地跟上复制,试图同时向主-主拓扑结构的两个节点写入来减少复制问题通常是不划算的。分配给每台机器的读负载应该低于50%,否则,如果某台机器失效,就没有足够的容量了,如果两台服务器都能独立处理负载,就用不着担心复制的问题了。。构建冗余容量也是实现高可用性的最佳方式之一,当然还有别的方式,例如,当错误发生时让应用在降级模式下运行

复制管理和维护

配置复制一般来说不会是需要经常做的工作,除非有很多服务器。但是一旦配置了复制,监控和管理复制拓扑应该称为一项日常工作,不管有多少服务器。这些工作应该尽量自动化,但不一定需要自己写工具来实现.,可以借助第三方的工具或插件。

监控复制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

复制增加了MySQL监控的复杂性。尽管复制发生在主库和备库上,但大多数工作是在备库上完成的,这也正式最常出问题的地方。是否所有的备库都在工作?最慢的备库延迟是多大?MySQL本身提供了大量可以回答上述问题的信息,弹药实现自动化监控过程以及使复制更健壮还是需要用户做更多的工作。
在主库上,可以使用SHOW MASTER STATUS命令来查看当前主库的二进制日志位置和配置。还可以查看主库当前有哪些二进制日志在磁盘上的:

mysql>SHOW MASTER LOGS;

该命令用于给PURGE MASTER LOGS命令决定使用哪个参数。另外还可以通过SHOW BINLOG EVENTS来查看复制事件。例如,在运行前一个命令后,我们在另一个不曾使用过的服务器上创建一个表,因为知道这是唯一改变数据的语句,而且也知道语句在二进制日志中的偏移量是319,所以我们能看到如下内容:

测量备库延迟

一个比较普遍的问题是如何监控备库落后主库的延迟有多大。虽然SHOW SLAVE STATUS输出的Seconds_behind_master列理论上显示了备库的延时,但由于各种各样的原因,并不总是准确的:

  • 1.备库Seconds_behind_master值是通过讲服务器当前的时间戳与二进制日志中的事件的时间戳相对比得到的,所以只有在执行事件时才能报告延迟。
  • 2.如果备库复制线程没有运行,就会报延迟为NULL
  • 3.一些错误(例如主备的max_allowed_packet不匹配,或者网络不稳定)可能中断复制并且/或者停止复制线程,但Seconds_behind_master将显示为0而不是显示错误
  • 4.即使备库线程正在运行,备库有时候可能无法计算延时,如果法政这种情况,备库会报0或者NULL
  • 5.一个大事务可能会导致延迟波动,例如,有一个事务更新数据长达一个小时,最后提交。这条更新将比它实际发生时间要晚一个小时才记录到二进制日志中。当备库执行这条语句时,会临时地报告备库延迟为一个小时,然后又很快变成0
  • 6.如果分发主库落后了,并且其本身也有已经追赶上它的备库,备库的延迟将显示为0,而事实上和源主库之间是有延迟的。

解决这些问题的办法是忽略Seconds_behind_master的值,并使用一些可以直接观察和衡量的方式来监控备库延迟。最好的解决办法是使用heartbeat record,这是一个在主库上会每秒更新一次的时间戳。为了计算延时,可以直接用备库当前的时间戳减去心跳记录的值。这个方法能够解决刚刚我们提到的所有问题,另外一个额外的好处是我们还可以通过时间戳知道备库当前的复制状况。包含在Percona Toolkit里的pt-heartbeat脚本是"复制心跳"最流行的一种实现。心跳还有其他好处,记录在二进制日志中的心跳记录拥有多种用途,例如在一些很难解决的场景下可以用于灾难恢复。
刚刚所描述的几种延迟指标都不能表明备库需要多长时间才能赶上主库,这依赖于许多因素,例如备库的写入能力以及主库持续写入的次数。

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

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

相关文章

如何将现有系统逐步优化成微服务设计

目录 基础服务改造核心步骤准备阶段实施阶段 基础服务设计 本文诞生于学习架构实践专栏后的深思以及总结,结合公司之前“大泥球”的架构风格,改造服务设计的思维。 改造公司系统服务主要原因:1、代码类似“屎山”,牵一发而动全身&…

Freertos-----任务之间的消息传递(使用消息队列信号量方法)

这次来分享任务之间的数据传递的方法,方法有很多种,我展示2种,让大家对freertos有更深刻的印象 目录 消息队列 信号量 消息队列 首先直接打开普中的例程,然后在里面加上ADC的驱动代码,先初始化外设先,我…

亚足联官方公布18强赛抽签时间及规则,国足确认位列第五档,你们觉得国足能进世界杯吗?

亚足联官方公布18强赛抽签时间及规则,国足确认位列第五档,你们觉得国足能进世界杯吗? 今天亚足联官方宣布了世预赛18强赛分组抽签仪式时间,本次抽签仪式将于6月27日15点在马来西亚吉隆坡举行。除了抽签时间之外,足联还…

L55--- 257.二叉树的所有路径(深搜)---Java版

1.题目描述 2.思路 (1)因为是求二叉树的所有路径 (2)然后是带固定格式的 所以我们要把每个节点的整数数值换成字符串数值 (3)首先先考虑根节点,也就是要满足节点不为空 返回递归的形式dfs(根节…

Service方法增加@Asyn注解后导致bean无法找到 NoSuchBeanDefinitionException

Service方法增加Asyn注解后导致bean无法找到 NoSuchBeanDefinitionException 场景处理方法原因 场景 首先确认的是Service添加了Service或Component等注解,另外也增加了ComponentScan确定扫描的包路径是包含对应Service的,但就是无法找到这个bean。 通…

C51与MDK共存版本安装教程

目录 一、安装准备 1.1 新建文件夹 1.2 网盘链接-加Q 667198390 二、 双版本共存安装教程 2.1 安装Keil5 C51 2.2 安装Keil5 MDK 2.3 C51和MDK的共存 2.4 生成许可证 2.5 安装STM32Pack包 一、安装准备 1.1 新建文件夹 如下图: 在合适的网盘里&#xff08…

阿里云如何实现express的自动化部署(保姆级教程)

本篇文章将详细介绍一下阿里云如何实现express的自动化部署,作者本人总结的保姆级教程!!! 首先去阿里云官网 (阿里云-计算,为了无法计算的价值) 搜索函数计算fc 如果没有开通过选择免费开通,…

计算机组成原理 | 计算机系统概述

CPI:(Clockcycle Per Instruction),指每条指令的时钟周期数。 时钟周期:对CPU来说,在一个时钟周期内,CPU仅完成一个最基本的动作。时钟脉冲是计算机的基本工作脉冲,控制着计算机的工作节奏。时钟周期 是一个时钟脉冲所…

【第24章】Vue实战篇之用户信息展示

文章目录 前言一、准备1. 获取用户信息2. 存储用户信息3. 加载用户信息 二、用户信息1.昵称2.头像 三、展示总结 前言 这里我们来展示用户昵称和头像。 一、准备 1. 获取用户信息 export const userInfoService ()>{return request.get(/user/info) }2. 存储用户信息 i…

服装连锁实体店bC一体化运营方案

一、引言 随着互联网的快速发展和消费者购物习惯的变化,传统服装连锁实体店在面对新的市场环境下亟需转型升级。BC(Business to Consumer)一体化运营方案的实施将成为提升服装连锁实体店竞争力和顾客体验的关键举掖。商淘云详细介绍服装连锁…

深度学习论文: Depth Anything V2

深度学习论文: Depth Anything V2 Depth Anything V2 PDF: https://arxiv.org/pdf/2406.09414v1 代码:https://depth-anything-v2.github.io/ PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.com/shanglianlm0525/PyTorch-Networks …

黑神话悟空-吉吉国王版本【抢先版】

在中国的游戏市场中,一款名为“黑神话悟空”的游戏引起了广泛的关注。这款游戏以中国传统的神话故事“西游记”为背景,创造了一个令人震撼的虚拟世界。今天,我们要来介绍的是这款游戏的一种特殊版本,那就是吉吉国王版本。 在吉吉国…

Go微服务: redis分布式锁在集群中可能遇到的问题及其解决方案

概述 我们的 redis 一般都是集群来给我们程序提供服务的,单体的redis现在也不多见 看到上面是主节点redis和下面是6个重节点redis,主节点和重节点的通讯都是畅通没问题的这个时候,我们有 gorouting 写我们的数据,那它就会用到我们…

《沃趣 分手后霸道少爷宠爆我》盛大开机典礼

南京五聚文化传媒有限公司自豪地宣布,引人入胜的2024年度短剧巨作——《沃趣 分手后霸道少爷宠爆我》——今日正式开拍!在星辰下的华丽舞台上,我们汇集了业界的精英力量,准备讲述一个关于爱、错位与重生的故事。 典礼精彩亮点 1.…

openh264 宏块级码率控制源码分析

openh264 宏块级码率控制函数关系 宏块级核心函数分析 WelsRcMbInitGom函数 功能:openh264 码率控制框架中宏块级码率控制函数,根据是否启用GOM QP来决定如何设置宏块的QP值,以控制编码的质量和比特率。原理过程: 函数参数&…

高效管理:好用的项目管理工具推荐

在当今快速变化的商业环境中,高效的项目管理工具能够显著提升团队的生产力和项目的成功率,还能有效地跟踪项目进度。所以,一款优秀的项目管理工具首先要具备先进的项目管理理念,支持多种研发管理和项目管理方法论,才能…

“打造智能售货机系统,基于ruoyi微服务版本生成基础代码“

目录 # 开篇 1. 菜单 2. 字典配置 3. 表配置 3.1 导入表 3.2 区域管理 3.3 合作商管理 3.4 点位管理 4. 代码导入 4.1 后端代码生成 4.2 前端代码生成 5. 数据库代码执行 6. 点位管理菜单顺序修改 7. 页面展示 8. 附加设备表 8.1 新增设备管理菜单 8.2 创建字…

高效处理大数据:Kafka的13个核心概念详解

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是你们的小米!今天我们来深入探讨一下Kafka这个强大而复杂的数据流平台。Kafka被广泛应用于高吞吐量、低延迟的数据流应用场景中。那么,我…

wordpress站群搭建3api代码生成和swagger使用

海鸥技术下午茶-wordpress站群搭建3api代码生成和swagger使用 目标:实现api编写和swagger使用 0.本次需要使用到的脚手架命令 生成 http server 代码 goctl api go -api all.api -dir ..生成swagger文档 goctl api plugin -plugin goctl-swagger"swagger -filename st…

【算法训练记录——Day32】

Day32——贪心算法Ⅱ 1.leetcode122买卖股票的最佳时机II2.leetcode55跳跃游戏3.leetcode45跳跃游戏II4.eetcode1005K次取反后最大化的数组和 目标: leetcode122买卖股票的最佳时机IIleetcode55跳跃游戏leetcode45跳跃游戏IIleetcode1005K次取反后最大化的数组和 1…