数据库误操作后悔药来了:AnalyticDB PostgreSQL教你实现分布式一致性备份恢复

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
简介: 本文将介绍AnalyticDB PostgreSQL版备份恢复的原理与使用方法。

一、背景


AnalyticDB PostgreSQL版(简称ADB PG)是阿里云数据库团队基于PostgreSQL内核(简称PG)打造的一款云原生数据仓库产品。在数据实时交互式分析、HTAP、ETL、BI报表生成等业务场景,ADB PG都有着独特的技术优势。


作为一款企业级数据仓库产品,数据安全的重要性不言而喻。备份恢复功能是保障数据安全的基本手段,也是ADB PG应对突发状况进行数据库恢复的重要保障。备份恢复,顾名思义,是对数据库进行数据备份,以便在必要时进行数据的恢复,防范于未然。当前,ADB PG的备份恢复功能已经应用在以下各个用户场景中:


  • 由于系统故障、人为误操作造成数据被破坏或实例不可用时,基于备份数据对实例进行恢复。
  • 用户需要基于已有实例,快速克隆出一个完全相同的实例。
  • 在节点数不变的前提下,用户需要更改源实例的规格。


本文将介绍ADB PG备份恢复的原理与使用方法。


二、简介


ADB PG 是采用MPP水平扩展架构的分布式数据库。ADB PG实例由一个或多个协调节点(Master)和多个计算节点(Compute Node)组成,协调节点负责接收用户请求,制定分布式执行计划并下发至计算节点,收集执行结果并返回给客户端;计算节点负责并行计算分析与数据存储。数据在计算节点之间可以随机、哈希、复制分布。下图ADB PG的架构图:


1.jpg


ADB PG的物理备份恢复功能,基于集群的基础备份和日志备份,可以在分布式数据库继续提供服务的同时备份各个节点的数据,并保证数据的一致性。在需要时,可以将分布式数据库恢复至备份的时刻。


基础备份是指对数据库所有数据进行的一个完全拷贝。基础备份会将集群全量数据快照压缩后存储在其它离线存储介质,集群在基础备份期间不会阻塞用户的读写,因此,备份期间产生的日志也会被备份来保证基础备份的完整性。


日志备份(也称为增量备份),是指将集群产生的日志文件备份至其他离线存储介质。日志文件记录了用户对数据库的DML与DDL操作。通过一个完整的基础备份以及连续的日志备份,可以将新集群恢复到某一历史事件点,保证了这段时间的数据安全性。


ADB PG可保障最小RPO为10分钟的备份恢复。


三、原理


在完整地介绍ADB PG的备份恢复原理之前,先简要地介绍单机PG的PITR(Point in Time Recovery)备份恢复机制。ADB PG的备份恢复机制基于单机PG的PITR原理,并加入了分布式数据一致性的保障机制。


(一)单机PG的PITR机制


WAL日志:

PostgreSQL数据库会将事务对数据的所有更改(包括DDL、DML等操作)记录在WAL(Write Ahead Log)日志文件中。WAL日志文件可以看作是一个无限增长的只追加文件,PG会将日志数据按固定大小切分成多个文件存储。事务的每次修改数据的操作都会被追加记录至WAL文件中,并赋予一个唯一的LSN序号(Log Sequence Number),在事务提交时,会保证WAL日志已持久化。


这些日志文件的作用是为了让数据库在需要恢复时,可以通过“重放”WAL日志来恢复数据库崩溃时还未持久化,但对应事务已提交的数据。


恢复点:

有了WAL日志可以进行“重放”操作,那么还有一个问题:需要重放到什么时候呢?这就需要恢复点(restore point)来解决。


恢复点相当于WAL日志中写入的一个标记,它标记了一个日志的位置。当PG对日志进行重放时,通过检查是否已经到达这个标记点,来决定是否需要停止"重放"的操作。

以下SQL可以在WAL日志文件中创建一个名为t1的标志点:


postgres=# select pg_create_restore_point('t1');
LOG:  restore point "t1" created at 0/2205780
STATEMENT:  select pg_create_restore_point('t1');
 pg_create_restore_point
-------------------------
 0/2205780
(1 row)


当数据库顺序回放WAL日志时,会检查当前日志包含此恢复点名称,若已包含,则停止重放。另外,PG还支持恢复至指定的任意时间点,事务号,LSN序号等操作。


基础备份与增量备份:


基础备份是对数据库数据的一份完整拷贝。可以使用pg_basebackup工具对单机PG进行一次基础备份,备份数据可保存至本地,也可存储在其他离线存储介质(OSS)中。

$ pg_basebackup -D pg_data_dir/ -p 6000
NOTICE:  pg_stop_backup complete, all required WAL segments have been a


增量备份是指对产生的WAL日志文件进行备份。在PG中,可通过数据库参数archive_command来指定如何备份WAL日志数据。当PG生成一个WAL日志文件时,会通过执行archive_command的命令来尝试备份归档该日志文件。比如,如下命令会将日志文件发送至指定的OSS。


archive_command="ossutil cp %p oss://bucket/path/%f"


2.jpg

单机PG的全量备份与增量备份


需要注意的是,基础备份期间并不会阻塞数据库的读写,因此备份期间的数据更新对应的WAL日志也需要备份,以备恢复时保证数据的一致性。


PITR恢复:

当需要恢复数据库时,首先下载基础备份数据,然后使用基础备份开启集群,再下载日志文件备份,“重放”至指定的恢复点即可进行数据库的恢复。在单机PG中, 指定的恢复点的目标可以是事务号、时间戳、WAL序号(LSN)以及某个恢复点名称。


3.jpg


(二)ADB PG的分布式一致性备份恢复机制


ADB PG 作为分布式数据库,使用两阶段事务提交来管理分布式事务。如果照搬单机PG的PITR机制,会造成数据的不一致。比如如下场景:分布式事务按照A、B、C时间顺序分配,但由于种种原因(如网络延时、节点负载、显式提交等),分布式模式下事务的提交的顺序在各个节点可能各不相同,如下图所示:


  • Master 按照 A、B、C顺序提交
  • Compute Node 1 按照 A、C、B顺序提交
  • Compute Node 2 按照 B、C、A顺序提交


4.jpg


如果在此过程中,创建了恢复点,当恢复时如果指定恢复至该恢复点,显而易见,恢复后集群中各个节点所处的状态是不一致的。


两阶段事务提交锁与一致性恢复点:


为了解决上述的问题,我们引入了两阶段事务提交锁。分布式事务提交会以SHARED模式获得该锁,而创建恢复点都需要以EXCLUSIVE模式获得该锁。于是在集群中如果有分布式事务正在等待各个节点上提交,那么集群创建恢复点的动作必须等待所有节点上的分布式事务提交完后,才能进行。


5.jpg

这从根本上解决了上述这就解决了在分布式事务还在提交的同时创建恢复点而造成恢复时数据不一致的问题。引入了两阶段提交锁机制之后,我们可以保证创建的恢复点所对应的各节点状态是一致的,因此我们将ADB PG中创建的恢复点称为一致性恢复点。

分布式备份与恢复过程:


有了事务提交锁与一致性恢复点之后,我们就可以放心地对ADB PG各个节点进行备份和创建一致性恢复点,而无需担心节点状态不一致的问题。


ADB PG的备份也分为基础备份和日志备份(也称为增量备份)。基础备份是对集群每个节点进行的一次完整拷贝,ADB PG会对计算节点和协调节点并发地进行备份,将备份数据流式保存至离线存储(如OSS)。在进行基础备份的期间,不会阻塞集群的读写服务。因此,如果在基础备份期间,用户有写入和更新的数据,也需要将数据更改对应的WAL日志进行备份。如下图所示, ADB PG会对每个节点并行地进行一次数据拷贝,将数据流式上传至OSS。


6.jpg

ADB PG基础备份过程


ADB PG的日志备份是对集群中的计算节点和协调节点产生的WAL日志的备份。各个节点会将自己生成的WAL日志转储至离线存储(如OSS)。同时,集群会定时地创建一致性恢复点,并将包含一致性恢复点的WAL日志进行备份。


1.jpg

当需要恢复新的集群时,需要同时使用基础备份与日志备份,并首先创建一个节点数和原实例相同的恢复实例。各个节点并行拉取指定的基础备份至本地。之后,每个节点自己拉取自己所需的WAL日志备份文件,在本地重放,直到重放至指定的一致性恢复点而停止。最终,我们就能得到一个新的集群,并保证数据和状态与源实例在一致性恢复点对应的数据与状态一致。恢复的过程如下图所示:


2.jpg


四、使用


(1)控制台备份相关信息


  • 查看基础备份集

用户在实例控制台的“备份恢复”页面,可以查看数据库的基础备份数据。目前基础备份数据保存在OSS上,默认保留天数为7天。

image.gif

3.jpg


表格中每一行表示一份基础备份数据,并记录了备份的开始时间,结束时间,备份状态(成功/失败),备份数据大小以及一致性时间点。一致性时间点表示此基础备份数据可以将集群恢复至该历史时间点,并使数据库处于一致性状态。


  • 查看一致性恢复点

一致性恢复点是指集群可以恢复到的某个历史时间点。用户在备份恢复页面的“恢复点”页可以查看当前实例的所有恢复点。


4.jpg


表格中每一行表示一个一致性恢复点,并记录了恢复点的时间戳,表示该恢复点可以让集群恢复至此历史时间点。

查看日志文件列表


日志文件记录了数据库的所有更改,在集群恢复时会使用相应的日志文件将集群恢复至一致性状态,当前用户集群恢复的日志文件都保存在OSS上。用户在备份恢复页面的"日志备份"中可查看日志文件列表。

5.jpg

  • 查看备份策略


备份策略是指实例进行备份的周期与时间段,创建一致性恢复点的频率,以及数据备份的保留天数等等。


用户可在备份恢复的“备份设置”中查看和修改备份策略。


1.jpg


  • 修改备份策略


点击“修改备份配置”按钮,可以对备份策略进行修改。


1.jpg

(2)实例恢复步骤


首先查看源实例上的数据


2.jpg

  • 进入恢复页面


用户可以在控制台的实例列表,数据备份列表或恢复点列表点击恢复进入实例恢复页面;


3.jpgimage.gif1.jpg

2.jpgimage.gif


恢复页面如下:


1.jpg


恢复实例的售卖页面与购买实例的页面大体一致,但多了如下限制:


1.当前恢复实例是master数量必须选择1个

2.选择的实例segment(computer node)数量必须与源实例保持一致

3.选择的实例存储空间必须大于或等于源实例


  • 选择恢复时间点


在恢复页面的"克隆源备份集"的下拉框中选择需要恢复实例到哪一个历史时间点,即指定一个一致性恢复点。

image.gif

2.jpg


  • 点击购买


用户点击购买后,与购买新实例的流程一样,需要等待实例创建完成后,可在控制台看到新恢复出的实例。


  • 恢复的新实例


查看恢复的新实例上的数据,可以看到数据与源实例完全一致。


3.jpg


五、总结


备份恢复对ADB PG保障数据安全的具有很重要的价值。当前备份恢复功能已经应用多个用户场景,并保障了最少为10分钟的RPO。未来ADB PG备份恢复功能会继续优化备份恢复性能,支持差异化备份,支持更多的存储介质,提高用户使用体验,为用户提供更多的功能、性能和成本优化。


相关阅读:

阿里最强offer|神秘的“阿里星”是一群怎么样的人

数澜科技全面集成阿里云AnalyticDB数据仓库 打造轻量级数据中台

对话李飞飞,揭秘国际体育赛事风“云”背后的黑科技

第三届数据库大赛创新上云性能挑战赛

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
3月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
4月前
|
消息中间件 缓存 监控
如何保证缓存和数据库的一致性?
保证缓存和数据库的一致性的做法
|
5月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
21天前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
52 15
|
3月前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
441 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
2月前
|
消息中间件 缓存 算法
分布式系列第一弹:分布式一致性!
分布式系列第一弹:分布式一致性!
|
2月前
|
算法 Java 关系型数据库
漫谈分布式数据复制和一致性!
漫谈分布式数据复制和一致性!
|
4月前
|
关系型数据库 Serverless 分布式数据库
揭秘PolarDB Serverless:大促洪峰秒级应对,无感伸缩见证科技魔法!一探云数据库管理的颠覆性革新,强一致性的守护神来了!
【8月更文挑战第13天】在云计算背景下,阿里巴巴的云原生数据库PolarDB Serverless针对弹性伸缩与高性能一致性提供了出色解决方案。本文通过一个电商平台大促活动的真实案例全面测评PolarDB Serverless的表现。面对激增流量,PolarDB Serverless能秒级自动扩展资源,如通过调用`pd_add_reader`快速增加读节点分摊压力;其无感伸缩确保服务平滑运行,不因扩展中断;强一致性模型则保障了数据准确性,即便在高并发写操作下也确保库存等数据的同步一致性。PolarDB Serverless简化了数据库管理,提升了系统效能,是追求高效云数据库管理企业的理想选择。
100 7
|
4月前
|
存储 算法 NoSQL
(七)漫谈分布式之一致性算法下篇:一文从根上儿理解大名鼎鼎的Raft共识算法!
Raft通过一致性检查,能在一定程度上保证集群的一致性,但无法保证所有情况下的一致性,毕竟分布式系统各种故障层出不穷,如何在有可能发生各类故障的分布式系统保证集群一致性,这才是Raft等一致性算法要真正解决的问题。
115 11
|
4月前
|
存储 算法 索引
(六)漫谈分布式之一致性算法上篇:用二十六张图一探Raft共识算法奥妙之处!
现如今,大多数分布式存储系统都投向了Raft算法的怀抱,而本文就来聊聊大名鼎鼎的Raft算法/协议!
123 8

热门文章

最新文章

相关产品

  • 云原生数据仓库AnalyticDB MySQL版
  • 云原生数据仓库 AnalyticDB PostgreSQL版