当前位置: 首页 > news >正文

坚如磐石:TiDB 基于时间点的恢复(PiTR)特性优化之路丨6.5 新特性解析

本文介绍了 TiDB 数据库的基于时间点的恢复(PiTR)特性,该特性允许用户将数据库恢复到特定时间点,从而避免丢失重要数据。文章首先介绍了 PiTR 技术的基本概念和工作原理,接着探讨了 TiDB 对 PiTR 的优化,包括 PiTR 的技术指标,稳定性和性能提升。最后,文章展望了 TiDB PiTR 未来的改进方向,将持续探索备份恢复的更多可能性。

基于时间点恢复(PiTR)技术介绍

对于数据库产品而言,基于时间点的恢复是非常重要的基础能力,它允许用户根据需要,将数据库恢复到特定时间点,以帮助客户的数据库免受意外损坏或错误操作的影响。例如,数据库在某个时间点之后的数据遭受了意外的删除或损坏,则可以使用 PiTR 功能将数据库恢复到该时间点之前的状态,从而避免丢失重要数据。

由于 TiDB 数据库,每一次的数据改变都会产生对应的分布式日志,其中记录了数据库每一次变更的信息,包括事务 ID、时间戳和变更的具体内容。

当用户启用 PiTR 功能后,TiDB 会定期将分布式变更日志保存到外部存储(例如:AWS S3,Azure BloB 或 NFS 等)。如果在某个时间点之后的数据被意外删除或遭受了损坏,则可以使用 BR 工具将之前的数据库备份恢复回来,通过应用保存在外部存储上的数据改变到用户指定的时间点,从而达到定点恢复的目的。

1.png

上面的图示描述了 PiTR 特性的架构:当用户启动了日志备份之后,BR 工具会向 PD 注册一个备份任务。同时,某个 TiDB 节点会被选择成为日志备份的协调者,定期与 PD 进行交互,以便计算全局备份 checkpoint ts。同时,每个 TiKV 节点会运行定期向 PD 上报本节点的备份任务状态,并将数据变更日志发送到指定的外部存储上。

对于恢复过程,当用户发起了基于时间点的恢复命令之后,BR 工具会读取备份的元数据信息,并通知所有的 TiKV 节点启动恢复工作,TiKV 节点上的 Restore worker 会读取定点之前的变更日志并将其应用集群中,就可以得到指定时间点的 TiDB 集群。

PiTR 特性的工作机制

接下来,我们进一步看一下日志备份和恢复过程的工作机制。

下面的流程图说明了日志备份的主要工作机制

2.png

其中主要的交互流程如下:

1.BR 接收备份命令 br log start

解析日志备份任务的日志备份起始时间点和备份存储地址,并向 PD 注册日志备份任务 (log backup task)。

2.TiKV 定期监测新建/更新的日志备份任务

每个 TiKV 节点的日志备份 observer 监听 PD 中创建与更新日志备份任务,然后备份该节点上在备份时间范围内的变更数据日志。

3.TiKV 节点备份 KV 变更日志,并将本地备份进度上报到 TiDB

TiKV 节点中 observer 服务会持续地备份 KV 变更日志,联合从 PD 查询到的 global-checkpoint-ts 来生成备份元数据信息,并定期将日志备份数据和元信息上传到存储中,同时 observer 服务还会防止未备份完成的 MVCC 数据被 PD 回收。

4.TiDB 节点计算并持久化全局备份进度。

TiDB 协调者节点轮询所有 TiKV 节点,获取各个 Region 的备份进度 ,并根据各个节点的备份进度计算出整体日志备份的进度,然后上报给 PD。

对于恢复的过程,可以参考下面的流程图了解其工作机制

3.png

当用户发起“br restore ” 命令后,BR 工具会对全量数据和日志数据备份地址、需要恢复到的时间点,需要恢复的数据库对象等信息进行校验,确保信息有效后,开始进行恢复。BR 首先会将全量数据进行恢复,之后读取存在的日志备份数据,计算需要恢复的日志备份数据,并访问 PD 获得需要恢复的 Region 和 KV range 相关的信息,创建恢复日志请求,发送给对应的 TiKV 节点。 TiKV 节点在接收到恢复请求后,启动 restore worker,并从备份介质中下载相应的备份数据到本地,并将需要回复的数据改变恢复到对应的 region 当中。在恢复完成之后,将恢复的执行的结果返回给 BR 工具。

TiDB 对 PiTR 的优化

从上面的工作机制可以看到, 无论是日志备份还是恢复,其过程都是比较复杂的,所以 TiDB 在PiTR 发布之后,一直对这个特性进行优化,不断的提升 PiTR 的技术指标,稳定性和性能。

例如, 在最初的版本中日志备份会产生大量的小文件,给用户在使用期间带来很多的问题。在最新版本中,我们将日志备份文件聚合成为多个大小至少为128M的文件,很好的解决了这个问题。

对于大规模的 TiDB 集群,其全量备份往往需要运行很长时间,如果不支持断点续传功能的话,当备份过程中出现一些异常情况,导致备份任务中断的话,对用户来说是非常令人绝望的。在 6.5.0 版本中,我们支持了备份的断点续传能力,并且优化了备份的性能,目前单个 TiKV 的数据备份性能可以达到 100MB/s,日志备份对源集群的性能影响可以控制在 5% 左右,这些优化都极大的提升了大规模集群备份的用户体验和备份的成功率。

由于备份恢复通常都会被用户作为数据安全的最后一道防线,PiTR 的 RPO 和 RTO 指标也是很多用户所关心的。 我们在 PiTR 的稳定性上也做了很多的优化,其中包括:

  • 通过优化 BR 与 PD 和 TiKV 的通信机制,在绝大多数 TiDB 集群异常场景和 TiKV 滚动重启场景,PiTR 都可以保证 RPO 小于 5 分钟
  • 通过优化恢复性能,让 PiTR 在应用日志阶段的性能达到30 GB/h,从而降低降低 RTO 时间。

对于更多的备份恢复性能指标,请参考“TiDB 备份与恢复概述” 文档。

未来规划

接下来,我们会对 PiTR 这个特性进行更多的优化,不断的提升这个特性的稳定性和性能。并探索备份恢复的更多可能性,将 TiDB 的备份恢复特性打造成稳定可靠的高性能备份恢复解决方案。

相关文章:

坚如磐石:TiDB 基于时间点的恢复(PiTR)特性优化之路丨6.5 新特性解析

本文介绍了 TiDB 数据库的基于时间点的恢复(PiTR)特性,该特性允许用户将数据库恢复到特定时间点,从而避免丢失重要数据。文章首先介绍了 PiTR 技术的基本概念和工作原理,接着探讨了 TiDB 对 PiTR 的优化,包…...

【云原生】K8S中PV和PVC

前言 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。…...

24小时稳定性爆肝测试!国内外5款远程控制软件大盘点

本文目录前言一、ToDesk远程控制二、向日葵远程控制三、RayLink四、TeamViewer五、AnyDesk总结前言 不论你的职业是什么,从事互联网工作基本就离不开远程,从远程安装系统到远程搞设计,再到做服务器的调控,都需要靠远程来协助完成…...

【Java集合框架】篇三:List接口

1. List接口及主要实现类特点 List:有序、可重复(“动态”数组);因而常常使用List替换数组,因为List 的容量是动态的。 ArrayList:底层使用Object[]存储 线程不安全,添加、查找效率高 LinkedL…...

【算法经典题集】二分(持续更新~~~)

😽PREFACE🎁欢迎各位→点赞👍 收藏⭐ 评论📝📢系列专栏:算法经典题集🔊本专栏涉及到的知识点或者题目是算法专栏的补充与应用💪种一棵树最好是十年前其次是现在二分整数二分机器人…...

【c++】2023杭州月薪个税计算(chatGPT帮忙加注释)

参考信息 杭州市的个人所得税起征点是每月5000元。 个人所得税税率标准: 1、工资范围在1-5000元之间的,包括5000元,适用个人所得税税率为0%; 2、工资范围在5000-8000元之间的,包括8000元,适用个人所得税税率为3%; 3、工…...

【TypeScript】的上手学习指南!

目录TS简介TypeScript是什么?为什么要推荐使用TypeScript生态支持安装TypeScriptTS简介 TypeScript是什么? TypeScript官网 简介:TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript。TypeScript可以在任何浏览器、任何计…...

红黑树(Insert())

文章目录红黑树代码红黑树性质红黑树vsAVL树红黑树的实现Insert()情况一:如果我插入的新节点时红色的情况二:叔叔是黑色或者不存在情况三: cur红,p为红,g为黑,u不存在或者为黑-双旋检查erase()红黑树vsAVL树红黑树的应用:红黑树 二叉搜索树 …...

MOV指令使用

mov用于数据传送。之后分为目的操作数和源操作数,目的操作数必须是通用寄存器或者内存单元:源操作数可以是具有相同数据宽度的通用寄存器或者内存单元,还可以是立即数。传送指令只影响目的操作数内容,不改变源操作数内容。 如&am…...

解释一下RecyclerView的适配器内部方法

RecyclerView的适配器(Adapter) 是一个连接数据模型和RecyclerView的桥梁,它在RecyclerView中提供了数据和布局之间的连接。下面是RecyclerView适配器中常用的几个方法的解释: 1.onCreateViewHolder(ViewGroup parent, int view…...

集合框架及背后的数据结构

1.介绍: Java 集合框架,又被称为容器是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes 。 其主要表现为将多个元素置于一个单元中,用于对这些元素进行快速、便捷的存储、检索 、管理 ,即平时我们俗称的增删查改…...

【强化学习】强化学习数学基础:蒙特卡洛方法

强化学习数学方法:蒙特卡洛方法举个例子举个例子1:投掷硬币The simplest MC-based RL algorithm举个例子2:Episode lengthUse data more efficientlyMC without exploring starts总结内容来源将value iteration和policy iteration方法称为mod…...

BI分析工具软件有哪些

最近发现很多人讨论BI数据分析,今天给大家全面介绍下BI数据分析相关的信息。首先给大家科普一下,什么是BI分析。 BI分析其实是指通过BI分析工具,对企业内部和外部的大量数据进行收集、整理、处理和分析,以提供有价值的洞察&#x…...

2023爱分析·RPA软件市场厂商评估报告:容智信息

目录 1. 研究范围定义 2. RPA软件市场分析 3. 厂商评估:容智信息 4. 入选证书 1. 研究范围定义 RPA即Robotic Process Automation(机器人流程自动化),是一种通过模拟人与软件系统的交互过程,实现由软件机器人…...

设计模式之七大原则(二)——里氏替换原则、依赖倒转原则

1.里氏替换原则 里氏替换原则(Liskov Substitution Principle,LSP)由麻省理工学院计算机科学实验室的里斯科夫女士在 1987 年的“面向对象技术的高峰会议”(OOPSLA)上发表的一篇文章《数据抽象和层次》)里提…...

数据库日常实操优质文章分享(含Oracle、MySQL等) | 2023年2月刊

本文为大家整理了墨天轮数据社区2023年2月发布的优质技术文章,主题涵盖Oracle、MySQL、PostgreSQL等数据库的环境搭建、故障处理等日常实践操作,以及概念梳理、常用脚本等总结记录,分享给大家:Oracle优质技术文章概念梳理&基础…...

事件循环机制(Event Loop)和宏任务(macro-tast)微任务(micro-tast),详细讲解!!!

“事件循环机制” 和 “宏任务微任务” 也是前端面试中常考的面试题了。首先,要深刻理解这些概念的话,需要回顾一些知识点。知识点回顾1、进程与线程进程。 程序运行需要有它自己的专属内存空间,可以把这块内存空间简单的理解为进程每个应用至…...

mysql基础操作3

查询襄阳的员工姓名和性别,性别要求显示为 男 女SELECT ename,(CASE WHEN sexF THEN 女 ELSE 男 END)sexFROM empWHERE jiguan襄阳查询所有的订单,显示订单日期 订单数量 订单状态SELECT saleDate,salesQuantity,(CASE WHEN saleState1 THEN 新建 WHEN s…...

【Web安全】PHP安全

一、文件包含漏洞严格来说,文件包含就是代码注入的一种。代码注入,其原理就是注入一段用户能控制的脚本或代码并让服务器端执行。代码注入的典型代表就是文件包含。文件包含可能会出现在JSP、PHP、ASP等语言中,常见函数如下:PHP&a…...

双向链表+循环链表

循环链表双向链表 循环链表 循环链表是头尾相接的链表(即表中最后一个结点的指针域指向头结点,整个链表形成一个环)(circular linked list) **优点:**从表中任一结点出发均可访问全部结点 循环链表与单链表的主要差别当链表遍历时,判别当前…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

HTML 列表、表格、表单

1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Python如何给视频添加音频和字幕

在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦&#xff0…...