PolarDB-X 存储引擎核心技术 | Lizard 无锁备份

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 本文重点要介绍全量备份的设计,作为承担在线数据存储的 DN 节点,按照数据保护和容灾的需求,DN 需要支持灵活定制周期策略的备份策略。同时,PolarDB-X 能够处理和存储庞大的数据规模,备份这些数据量(例如高达 20TB 大小的数据集),如果想在更短的时间内完成备份(比如 3~4 小时),这样的备份 SLA 需要在在线业务影响、并行策略上有更多的优化。

作者:攒叶

备份背景

PolarDB-X 分布式数据库,采用集中式和分布式一体化的架构,Data Node 节点可以按照业务的发展和规模的扩大,逐步从集中式,在线平滑的进行水平拆分,扩展到分布式,以线性扩展容量。

数据库的备份恢复,承当了重要的数据安全的保障,按照数据保护和容灾的需求,PolarDB-X 提供了多样化的能力,支持任意时间点的备份恢复(简称 PITR),更多技术细节可以访问:《PolarDB-X 数据库的备份恢复》。


如上图所示,展示了 PolarDB-X 在 PITR 恢复的情况,通过全量备份 + 增量的 binlog 组合可以满足任意时间点的恢复诉求。

另外,PolarDB-X 的数据节点 DN 作为多副本架构,日常的主机运维动作,也会触发副本的动态搬迁、重建等,此时需要依赖备库重搭技术,先通过主库做一次全量备份,通过多副本 Consensus Log 来增量追平副本数据。

本文重点要介绍全量备份的设计,作为承担在线数据存储的 DN 节点,按照数据保护和容灾的需求,DN 需要支持灵活定制周期策略的备份策略。同时,PolarDB-X 能够处理和存储庞大的数据规模,备份这些数据量(例如高达 20TB 大小的数据集),如果想在更短的时间内完成备份(比如 3~4 小时),这样的备份 SLA 需要在在线业务影响、并行策略上有更多的优化。

传统 MySQL 生态的备份挑战

开源 MySQL, 采用 InnoDB 存储引擎保存数据,基于传统的 WAL 架构,其使用 redo log 物理日志来记录数据变更。 Server 层采用 Binary log 作为逻辑日志,记录了数据库实例的变更日志,包括事务型数据修改,非事务型数据修改,结构修改等所有数据库变化,其承担了三个重要的作用:

1.两阶段提交协调日志

MySQL多存储引擎的结构,Binlog 承担了2PC的 coordinator 的职责,参与两阶段提交和恢复流程。

2.数据变更日志

Binlog 记录了数据库实例的所有变更,可以通过变更日志replay一个逻辑 image,构建多类型 cluster。

3.执行集合日志

Binlog 记录了变更的唯一标识 Global Transaction Identifier 即 GTID,用于构建 Executed 集合。

如何确保 Binary log 和 InnoDB 存储引擎的备份一致性,构成了挑战。由于最终要维护 Binlog 和存储引擎参与方的一致性,导致需要一个逻辑时间点,而一般逻辑时间点需要全局 global lock 来实现,这会严重影响在线实例的运行,继而影响用户业务。

Lizard 无锁全量备份设计

PolarDB-X 存储引擎,自研了 Lizard 分布式事务系统,来替换传统的 InnoDB 单机事务系统。针对 InnoDB 事务系统的弊端,Lizard 事务系统,分别设计了 SCN 单机事务系统和 GCN 分布式事务系统来解决这些弊端,有效的支撑分布式数据库能力。

同时,PolarDB-X 在 Lizard 事务引擎的基础上,相比于传统 MySQL 的物理备份的局限性,引入新设计的 Lizard 无锁备份,让备份过程对用户业务透明,真正做到无感。

Lizard 无锁备份的核心,即放弃物理备份过程中的 Binlog 备份,只保留存储引擎参与方的备份,而 Binlog 的三个最重要的职责:

1.两阶段提交协调日志

所有一阶段 prepare 状态的存储引擎参与方,统一按照 rollback 处理。

2.变更日志

DN 在使用备份集恢复新实例的时候,强制以 follower 或者 learner 角色加入 cluster,接收由集群 leader 使用 X-Paxos 协议发送的 Binlog 日志。

3.执行集合

PolarDB-X DN 新引入了一个组件,即 Lizard Transaction Slot (LTS),作为一个新的强制的参与方引擎,参与到MySQL 所有的变更,包括事务型,非事务型,结构变化等,Gtid Executed 执行集合由 LTS 来维护,以实现幂等控制。

通过以上的替代,覆盖 Binlog 所承担的职责,实现 Lizard 无锁全量备份能力。

Lizard 无锁全量备份架构

Lizard 无锁全量备份引入了一个新的重要组件 Transaction Slot,其作为一个持久化结构,用于记录数据库的变化,其架构图如下:

Transaction Slot 组件

Transaction Slot 作为一个持久化的结构,记录了数据库的事务型变化,其包括:

1.事务状态

通过 state 字段,记录事务的状态,包括active,prepare,commit,rollback等状态,在恢复过程中,通过 state 字段,所有 active 或者 prepare 状态的 transaction 都统一进行 rollback。

2.事务提交版本

通过 SCN 字段,记录事务提交或者回滚的内部版本号,即 System Commit Number。

3.事务全局标记

通过 GTID 字段,记录事务提交或者回滚的唯一标识,即 Global Transaction Identifier 。为了保证记录的完整性,对于数据库的所有变化包括:

  1. 数据操作语言(DML)
  2. 数据定义语言(DDL)
  3. 数据控制语言(DCL)

都强制分配了 Tranaction Slot,以便记录所有的 GTID,从而保证实例恢复后,应用 Binlog 的幂等性。

Lizard 一致性恢复

通过 Transaction Slot 组件, PolarDB-X 存储引擎 DN 节点不再通过 global lock 获取位点,实现了无锁全量备份,而针对全量备份集进行 recovery 过程中,需要处理的三个核心位点,即: Recovery 恢复位点,Consensus 传输位点,Apply 应用位点,无锁全量备份进行了松散处理,并保证了最终一致性。

1.Recovery 恢复位点

物理恢复的位点,按照物理备份中 redo log copy 到的最后日志位置,作为恢复的最终位置,备份过程,copy了从checkpoint 位置之后的所有 redo log,在恢复的时候,重新应用这些 redo log,并回滚所有active/prepare状态的事务。

2.Consensus 传输位点

由于 DN 节点采用 X-Paxos 一致性协议, 其核心是在提交过程中,进行多数派达成,所以在备份结束之前,获取一个多数派 Binary Log 的位点,作为 Consensus 传输位点,在实例恢复过程中,以 Learner 的角色重新加入集群中,从这个位点开始接收 Binary Log。

3.Apply 应用位点

由于没有 Global Lock 的保护,无法获取 Binary Log 和存储引擎一致的应用位点,所以在备份完成之前,获取了一个已经 Applied 位点,在实例恢复后,apply 过程中,通过 Transaction Slot 构建的 GTID executed 集合,进行幂等控制,最终追上集群的位点。

通过上述位点的获取和应用逻辑,保证了备份集在接入到原始集群后,能够整合协议层、复制层和数据层,最终实现系统各部分之间的严格一致性。

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
3月前
|
存储 缓存 调度
性能提升利器|PolarDB- X 超详细列存查询技术解读
本文将深入探讨 PolarDB-X 列存查询引擎的分层缓存解决方案,以及其在优化 ORC 列存查询性能中的关键作用。
380 24
|
3月前
|
存储 关系型数据库 分布式数据库
PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称
PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称。本文深入解析PolarStore的内部机制及优化策略,包括合理调整索引、优化数据分布、控制事务规模等,旨在最大化其性能优势,提升数据存储与访问效率。
47 5
|
6月前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
131 5
|
6月前
|
存储 SQL Cloud Native
揭秘!PolarDB-X存储引擎如何玩转“时间魔术”?Lizard多级闪回技术让你秒回数据“黄金时代”!
【8月更文挑战第25天】PolarDB-X是一款由阿里巴巴自主研发的云原生分布式数据库,以其高性能、高可用性和出色的可扩展性著称。其核心竞争力之一是Lizard存储引擎的多级闪回技术,能够提供高效的数据恢复与问题诊断能力。本文通过一个电商公司的案例展示了一级与二级闪回技术如何帮助快速恢复误删的大量订单数据,确保业务连续性不受影响。一级闪回通过维护最近时间段内历史数据版本链,支持任意时间点查询;而二级闪回则通过扩展数据保留时间并采用成本更低的存储方式,进一步增强了数据保护能力。多级闪回技术的应用显著提高了数据库的可靠性和灵活性,为企业数据安全保驾护航。
73 1
|
6月前
|
C# UED 定位技术
WPF控件大全:初学者必读,掌握控件使用技巧,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,控件是实现用户界面交互的关键元素。WPF提供了丰富的控件库,包括基础控件(如`Button`、`TextBox`)、布局控件(如`StackPanel`、`Grid`)、数据绑定控件(如`ListBox`、`DataGrid`)等。本文将介绍这些控件的基本分类及使用技巧,并通过示例代码展示如何在项目中应用。合理选择控件并利用布局控件和数据绑定功能,可以提升用户体验和程序性能。
160 0
|
6月前
|
数据库 Windows
超详细步骤解析:从零开始,手把手教你使用 Visual Studio 打造你的第一个 Windows Forms 应用程序,菜鸟也能轻松上手的编程入门指南来了!
【8月更文挑战第31天】创建你的第一个Windows Forms (WinForms) 应用程序是一个激动人心的过程,尤其适合编程新手。本指南将带你逐步完成一个简单WinForms 应用的开发。首先,在Visual Studio 中创建一个“Windows Forms App (.NET)”项目,命名为“我的第一个WinForms 应用”。接着,在空白窗体中添加一个按钮和一个标签控件,并设置按钮文本为“点击我”。然后,为按钮添加点击事件处理程序`button1_Click`,实现点击按钮后更新标签文本为“你好,你刚刚点击了按钮!”。
459 0
|
9月前
|
安全 druid Java
Seata 1.8.0 正式发布,支持达梦和 PolarDB-X 数据库
Seata 1.8.0 正式发布,支持达梦和 PolarDB-X 数据库
Seata 1.8.0 正式发布,支持达梦和 PolarDB-X 数据库
|
9月前
|
存储 DataWorks 监控
DataWorks,一个 polar db 有上万个数据库,解决方案
DataWorks,一个 polar db 有上万个数据库,解决方案
|
SQL 存储 Web App开发
PolarDB-X 分布式数据库中的外键
外键是关系型数据库中非常便利的一种功能,它通过一个或多个列为两张表建立连接,从而允许跨表交叉引用相关数据。外键通过约束来保持数据的一致性,通过级联来同步数据在多表间的更新和删除。在关系数据库系统中,大多数表都遵循外键的概念。
|
7月前
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。

相关产品

  • 云原生分布式数据库 PolarDB-X