偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

AnalyticDB PostgreSQL 教你實現(xiàn)分布式一致性備份恢復(fù)

網(wǎng)絡(luò) 分布式 PostgreSQL
ADB PG 是采用MPP水平擴展架構(gòu)的分布式數(shù)據(jù)庫。ADB PG實例由一個或多個協(xié)調(diào)節(jié)點(Master)和多個計算節(jié)點(Compute Node)組成,協(xié)調(diào)節(jié)點負(fù)責(zé)接收用戶請求,制定分布式執(zhí)行計劃并下發(fā)至計算節(jié)點,收集執(zhí)行結(jié)果并返回給客戶端;計算節(jié)點負(fù)責(zé)并行計算分析與數(shù)據(jù)存儲。

 一、背景

AnalyticDB PostgreSQL版(簡稱ADB PG)是阿里云數(shù)據(jù)庫團隊基于PostgreSQL內(nèi)核(簡稱PG)打造的一款云原生數(shù)據(jù)倉庫產(chǎn)品。在數(shù)據(jù)實時交互式分析、HTAP、ETL、BI報表生成等業(yè)務(wù)場景,ADB PG都有著獨特的技術(shù)優(yōu)勢。

作為一款企業(yè)級數(shù)據(jù)倉庫產(chǎn)品,數(shù)據(jù)安全的重要性不言而喻。備份恢復(fù)功能是保障數(shù)據(jù)安全的基本手段,也是ADB PG應(yīng)對突發(fā)狀況進(jìn)行數(shù)據(jù)庫恢復(fù)的重要保障。備份恢復(fù),顧名思義,是對數(shù)據(jù)庫進(jìn)行數(shù)據(jù)備份,以便在必要時進(jìn)行數(shù)據(jù)的恢復(fù),防范于未然。當(dāng)前,ADB PG的備份恢復(fù)功能已經(jīng)應(yīng)用在以下各個用戶場景中:

由于系統(tǒng)故障、人為誤操作造成數(shù)據(jù)被破壞或?qū)嵗豢捎脮r,基于備份數(shù)據(jù)對實例進(jìn)行恢復(fù)。
用戶需要基于已有實例,快速克隆出一個完全相同的實例。
在節(jié)點數(shù)不變的前提下,用戶需要更改源實例的規(guī)格。
本文將介紹ADB PG備份恢復(fù)的原理與使用方法。

二、簡介

ADB PG 是采用MPP水平擴展架構(gòu)的分布式數(shù)據(jù)庫。ADB PG實例由一個或多個協(xié)調(diào)節(jié)點(Master)和多個計算節(jié)點(Compute Node)組成,協(xié)調(diào)節(jié)點負(fù)責(zé)接收用戶請求,制定分布式執(zhí)行計劃并下發(fā)至計算節(jié)點,收集執(zhí)行結(jié)果并返回給客戶端;計算節(jié)點負(fù)責(zé)并行計算分析與數(shù)據(jù)存儲。數(shù)據(jù)在計算節(jié)點之間可以隨機、哈希、復(fù)制分布。下圖ADB PG的架構(gòu)圖:

ADB PG的物理備份恢復(fù)功能,基于集群的基礎(chǔ)備份和日志備份,可以在分布式數(shù)據(jù)庫繼續(xù)提供服務(wù)的同時備份各個節(jié)點的數(shù)據(jù),并保證數(shù)據(jù)的一致性。在需要時,可以將分布式數(shù)據(jù)庫恢復(fù)至備份的時刻。

基礎(chǔ)備份是指對數(shù)據(jù)庫所有數(shù)據(jù)進(jìn)行的一個完全拷貝。基礎(chǔ)備份會將集群全量數(shù)據(jù)快照壓縮后存儲在其它離線存儲介質(zhì),集群在基礎(chǔ)備份期間不會阻塞用戶的讀寫,因此,備份期間產(chǎn)生的日志也會被備份來保證基礎(chǔ)備份的完整性。

日志備份(也稱為增量備份),是指將集群產(chǎn)生的日志文件備份至其他離線存儲介質(zhì)。日志文件記錄了用戶對數(shù)據(jù)庫的DML與DDL操作。通過一個完整的基礎(chǔ)備份以及連續(xù)的日志備份,可以將新集群恢復(fù)到某一歷史事件點,保證了這段時間的數(shù)據(jù)安全性。

ADB PG可保障最小RPO為10分鐘的備份恢復(fù)。

三、原理

在完整地介紹ADB PG的備份恢復(fù)原理之前,先簡要地介紹單機PG的PITR(Point in Time Recovery)備份恢復(fù)機制。ADB PG的備份恢復(fù)機制基于單機PG的PITR原理,并加入了分布式數(shù)據(jù)一致性的保障機制。

(一)單機PG的PITR機制

WAL日志:

PostgreSQL數(shù)據(jù)庫會將事務(wù)對數(shù)據(jù)的所有更改(包括DDL、DML等操作)記錄在WAL(Write Ahead Log)日志文件中。WAL日志文件可以看作是一個無限增長的只追加文件,PG會將日志數(shù)據(jù)按固定大小切分成多個文件存儲。事務(wù)的每次修改數(shù)據(jù)的操作都會被追加記錄至WAL文件中,并賦予一個唯一的LSN序號(Log Sequence Number),在事務(wù)提交時,會保證WAL日志已持久化。

這些日志文件的作用是為了讓數(shù)據(jù)庫在需要恢復(fù)時,可以通過“重放”WAL日志來恢復(fù)數(shù)據(jù)庫崩潰時還未持久化,但對應(yīng)事務(wù)已提交的數(shù)據(jù)。

恢復(fù)點:

有了WAL日志可以進(jìn)行“重放”操作,那么還有一個問題:需要重放到什么時候呢?這就需要恢復(fù)點(restore point)來解決。

恢復(fù)點相當(dāng)于WAL日志中寫入的一個標(biāo)記,它標(biāo)記了一個日志的位置。當(dāng)PG對日志進(jìn)行重放時,通過檢查是否已經(jīng)到達(dá)這個標(biāo)記點,來決定是否需要停止"重放"的操作。

以下SQL可以在WAL日志文件中創(chuàng)建一個名為t1的標(biāo)志點:

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

當(dāng)數(shù)據(jù)庫順序回放WAL日志時,會檢查當(dāng)前日志包含此恢復(fù)點名稱,若已包含,則停止重放。另外,PG還支持恢復(fù)至指定的任意時間點,事務(wù)號,LSN序號等操作。

基礎(chǔ)備份與增量備份:

基礎(chǔ)備份是對數(shù)據(jù)庫數(shù)據(jù)的一份完整拷貝??梢允褂胮g_basebackup工具對單機PG進(jìn)行一次基礎(chǔ)備份,備份數(shù)據(jù)可保存至本地,也可存儲在其他離線存儲介質(zhì)(OSS)中。

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

增量備份是指對產(chǎn)生的WAL日志文件進(jìn)行備份。在PG中,可通過數(shù)據(jù)庫參數(shù)archive_command來指定如何備份WAL日志數(shù)據(jù)。當(dāng)PG生成一個WAL日志文件時,會通過執(zhí)行archive_command的命令來嘗試備份歸檔該日志文件。比如,如下命令會將日志文件發(fā)送至指定的OSS。

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

單機PG的全量備份與增量備份

需要注意的是,基礎(chǔ)備份期間并不會阻塞數(shù)據(jù)庫的讀寫,因此備份期間的數(shù)據(jù)更新對應(yīng)的WAL日志也需要備份,以備恢復(fù)時保證數(shù)據(jù)的一致性。

PITR恢復(fù):

當(dāng)需要恢復(fù)數(shù)據(jù)庫時,首先下載基礎(chǔ)備份數(shù)據(jù),然后使用基礎(chǔ)備份開啟集群,再下載日志文件備份,“重放”至指定的恢復(fù)點即可進(jìn)行數(shù)據(jù)庫的恢復(fù)。在單機PG中, 指定的恢復(fù)點的目標(biāo)可以是事務(wù)號、時間戳、WAL序號(LSN)以及某個恢復(fù)點名稱。

(二)ADB PG的分布式一致性備份恢復(fù)機制

ADB PG 作為分布式數(shù)據(jù)庫,使用兩階段事務(wù)提交來管理分布式事務(wù)。如果照搬單機PG的PITR機制,會造成數(shù)據(jù)的不一致。比如如下場景:分布式事務(wù)按照A、B、C時間順序分配,但由于種種原因(如網(wǎng)絡(luò)延時、節(jié)點負(fù)載、顯式提交等),分布式模式下事務(wù)的提交的順序在各個節(jié)點可能各不相同,如下圖所示:

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

如果在此過程中,創(chuàng)建了恢復(fù)點,當(dāng)恢復(fù)時如果指定恢復(fù)至該恢復(fù)點,顯而易見,恢復(fù)后集群中各個節(jié)點所處的狀態(tài)是不一致的。

兩階段事務(wù)提交鎖與一致性恢復(fù)點:

為了解決上述的問題,我們引入了兩階段事務(wù)提交鎖。分布式事務(wù)提交會以SHARED模式獲得該鎖,而創(chuàng)建恢復(fù)點都需要以EXCLUSIVE模式獲得該鎖。于是在集群中如果有分布式事務(wù)正在等待各個節(jié)點上提交,那么集群創(chuàng)建恢復(fù)點的動作必須等待所有節(jié)點上的分布式事務(wù)提交完后,才能進(jìn)行。

這從根本上解決了上述這就解決了在分布式事務(wù)還在提交的同時創(chuàng)建恢復(fù)點而造成恢復(fù)時數(shù)據(jù)不一致的問題。引入了兩階段提交鎖機制之后,我們可以保證創(chuàng)建的恢復(fù)點所對應(yīng)的各節(jié)點狀態(tài)是一致的,因此我們將ADB PG中創(chuàng)建的恢復(fù)點稱為一致性恢復(fù)點。

分布式備份與恢復(fù)過程:

有了事務(wù)提交鎖與一致性恢復(fù)點之后,我們就可以放心地對ADB PG各個節(jié)點進(jìn)行備份和創(chuàng)建一致性恢復(fù)點,而無需擔(dān)心節(jié)點狀態(tài)不一致的問題。

ADB PG的備份也分為基礎(chǔ)備份和日志備份(也稱為增量備份)。基礎(chǔ)備份是對集群每個節(jié)點進(jìn)行的一次完整拷貝,ADB PG會對計算節(jié)點和協(xié)調(diào)節(jié)點并發(fā)地進(jìn)行備份,將備份數(shù)據(jù)流式保存至離線存儲(如OSS)。在進(jìn)行基礎(chǔ)備份的期間,不會阻塞集群的讀寫服務(wù)。因此,如果在基礎(chǔ)備份期間,用戶有寫入和更新的數(shù)據(jù),也需要將數(shù)據(jù)更改對應(yīng)的WAL日志進(jìn)行備份。如下圖所示, ADB PG會對每個節(jié)點并行地進(jìn)行一次數(shù)據(jù)拷貝,將數(shù)據(jù)流式上傳至OSS。

ADB PG基礎(chǔ)備份過程

ADB PG的日志備份是對集群中的計算節(jié)點和協(xié)調(diào)節(jié)點產(chǎn)生的WAL日志的備份。各個節(jié)點會將自己生成的WAL日志轉(zhuǎn)儲至離線存儲(如OSS)。同時,集群會定時地創(chuàng)建一致性恢復(fù)點,并將包含一致性恢復(fù)點的WAL日志進(jìn)行備份。

當(dāng)需要恢復(fù)新的集群時,需要同時使用基礎(chǔ)備份與日志備份,并首先創(chuàng)建一個節(jié)點數(shù)和原實例相同的恢復(fù)實例。各個節(jié)點并行拉取指定的基礎(chǔ)備份至本地。之后,每個節(jié)點自己拉取自己所需的WAL日志備份文件,在本地重放,直到重放至指定的一致性恢復(fù)點而停止。最終,我們就能得到一個新的集群,并保證數(shù)據(jù)和狀態(tài)與源實例在一致性恢復(fù)點對應(yīng)的數(shù)據(jù)與狀態(tài)一致?;謴?fù)的過程如下圖所示:

四、使用

(1)控制臺備份相關(guān)信息

查看基礎(chǔ)備份集
用戶在實例控制臺的“備份恢復(fù)”頁面,可以查看數(shù)據(jù)庫的基礎(chǔ)備份數(shù)據(jù)。目前基礎(chǔ)備份數(shù)據(jù)保存在OSS上,默認(rèn)保留天數(shù)為7天。

表格中每一行表示一份基礎(chǔ)備份數(shù)據(jù),并記錄了備份的開始時間,結(jié)束時間,備份狀態(tài)(成功/失敗),備份數(shù)據(jù)大小以及一致性時間點。一致性時間點表示此基礎(chǔ)備份數(shù)據(jù)可以將集群恢復(fù)至該歷史時間點,并使數(shù)據(jù)庫處于一致性狀態(tài)。

查看一致性恢復(fù)點

一致性恢復(fù)點是指集群可以恢復(fù)到的某個歷史時間點。用戶在備份恢復(fù)頁面的“恢復(fù)點”頁可以查看當(dāng)前實例的所有恢復(fù)點。

表格中每一行表示一個一致性恢復(fù)點,并記錄了恢復(fù)點的時間戳,表示該恢復(fù)點可以讓集群恢復(fù)至此歷史時間點。

查看日志文件列表

日志文件記錄了數(shù)據(jù)庫的所有更改,在集群恢復(fù)時會使用相應(yīng)的日志文件將集群恢復(fù)至一致性狀態(tài),當(dāng)前用戶集群恢復(fù)的日志文件都保存在OSS上。用戶在備份恢復(fù)頁面的"日志備份"中可查看日志文件列表。

查看備份策略

備份策略是指實例進(jìn)行備份的周期與時間段,創(chuàng)建一致性恢復(fù)點的頻率,以及數(shù)據(jù)備份的保留天數(shù)等等。

用戶可在備份恢復(fù)的“備份設(shè)置”中查看和修改備份策略。

修改備份策略

點擊“修改備份配置”按鈕,可以對備份策略進(jìn)行修改。

(2)實例恢復(fù)步驟

首先查看源實例上的數(shù)據(jù)

進(jìn)入恢復(fù)頁面

用戶可以在控制臺的實例列表,數(shù)據(jù)備份列表或恢復(fù)點列表點擊恢復(fù)進(jìn)入實例恢復(fù)頁面;

恢復(fù)頁面如下:

恢復(fù)實例的售賣頁面與購買實例的頁面大體一致,但多了如下限制:

1.當(dāng)前恢復(fù)實例是master數(shù)量必須選擇1個

2.選擇的實例segment(computer node)數(shù)量必須與源實例保持一致

3.選擇的實例存儲空間必須大于或等于源實例

選擇恢復(fù)時間點
在恢復(fù)頁面的"克隆源備份集"的下拉框中選擇需要恢復(fù)實例到哪一個歷史時間點,即指定一個一致性恢復(fù)點。

點擊購買

用戶點擊購買后,與購買新實例的流程一樣,需要等待實例創(chuàng)建完成后,可在控制臺看到新恢復(fù)出的實例。

恢復(fù)的新實例

查看恢復(fù)的新實例上的數(shù)據(jù),可以看到數(shù)據(jù)與源實例完全一致。

五、總結(jié)

備份恢復(fù)對ADB PG保障數(shù)據(jù)安全的具有很重要的價值。當(dāng)前備份恢復(fù)功能已經(jīng)應(yīng)用多個用戶場景,并保障了最少為10分鐘的RPO。未來ADB PG備份恢復(fù)功能會繼續(xù)優(yōu)化備份恢復(fù)性能,支持差異化備份,支持更多的存儲介質(zhì),提高用戶使用體驗,為用戶提供更多的功能、性能和成本優(yōu)化。

 

責(zé)任編輯:梁菲 來源: 阿里云云棲號
相關(guān)推薦

2019-10-11 23:27:19

分布式一致性算法開發(fā)

2019-09-05 08:43:34

微服務(wù)分布式一致性數(shù)據(jù)共享

2021-11-22 16:30:30

分布式一致性分布式系統(tǒng)

2017-09-21 10:59:36

分布式系統(tǒng)線性一致性測試

2024-11-28 10:56:55

2021-07-28 08:39:25

分布式架構(gòu)系統(tǒng)

2022-06-07 12:08:10

Paxos算法

2021-06-03 15:27:31

RaftSOFAJRaft

2025-06-09 08:00:37

分布式文件系統(tǒng)

2024-01-31 09:54:51

Redis分布式

2021-06-06 12:45:41

分布式CAPBASE

2024-06-04 10:58:30

2017-09-22 12:08:01

數(shù)據(jù)庫分布式系統(tǒng)互聯(lián)網(wǎng)

2020-10-28 11:15:24

EPaxos分布式性算法

2023-11-06 09:06:54

分布式一致性數(shù)據(jù)

2023-08-15 09:31:01

分布式緩存

2021-06-16 08:33:02

分布式事務(wù)ACID

2020-05-11 10:30:57

2PC分布式協(xié)議

2018-03-19 09:50:50

分布式存儲系統(tǒng)

2025-03-14 08:00:00

分布式系統(tǒng)服務(wù)器一致性
點贊
收藏

51CTO技術(shù)棧公眾號