新聞中心
AnalyticDB PostgreSQL 教你實現(xiàn)分布式一致性備份恢復
作者:佚名 2021-08-13 11:50:23
網(wǎng)絡
分布式
PostgreSQL ADB PG 是采用MPP水平擴展架構(gòu)的分布式數(shù)據(jù)庫。ADB PG實例由一個或多個協(xié)調(diào)節(jié)點(Master)和多個計算節(jié)點(Compute Node)組成,協(xié)調(diào)節(jié)點負責接收用戶請求,制定分布式執(zhí)行計劃并下發(fā)至計算節(jié)點,收集執(zhí)行結(jié)果并返回給客戶端;計算節(jié)點負責并行計算分析與數(shù)據(jù)存儲。

成都創(chuàng)新互聯(lián):于2013年開始為各行業(yè)開拓出企業(yè)自己的“網(wǎng)站建設”服務,為成百上千公司企業(yè)提供了專業(yè)的成都做網(wǎng)站、網(wǎng)站建設、網(wǎng)頁設計和網(wǎng)站推廣服務, 按需求定制網(wǎng)站由設計師親自精心設計,設計的效果完全按照客戶的要求,并適當?shù)奶岢龊侠淼慕ㄗh,擁有的視覺效果,策劃師分析客戶的同行競爭對手,根據(jù)客戶的實際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。
一、背景
AnalyticDB PostgreSQL版(簡稱ADB PG)是阿里云數(shù)據(jù)庫團隊基于PostgreSQL內(nèi)核(簡稱PG)打造的一款云原生數(shù)據(jù)倉庫產(chǎn)品。在數(shù)據(jù)實時交互式分析、HTAP、ETL、BI報表生成等業(yè)務場景,ADB PG都有著獨特的技術(shù)優(yōu)勢。
作為一款企業(yè)級數(shù)據(jù)倉庫產(chǎn)品,數(shù)據(jù)安全的重要性不言而喻。備份恢復功能是保障數(shù)據(jù)安全的基本手段,也是ADB PG應對突發(fā)狀況進行數(shù)據(jù)庫恢復的重要保障。備份恢復,顧名思義,是對數(shù)據(jù)庫進行數(shù)據(jù)備份,以便在必要時進行數(shù)據(jù)的恢復,防范于未然。當前,ADB PG的備份恢復功能已經(jīng)應用在以下各個用戶場景中:
由于系統(tǒng)故障、人為誤操作造成數(shù)據(jù)被破壞或?qū)嵗豢捎脮r,基于備份數(shù)據(jù)對實例進行恢復。
用戶需要基于已有實例,快速克隆出一個完全相同的實例。
在節(jié)點數(shù)不變的前提下,用戶需要更改源實例的規(guī)格。
本文將介紹ADB PG備份恢復的原理與使用方法。
二、簡介
ADB PG 是采用MPP水平擴展架構(gòu)的分布式數(shù)據(jù)庫。ADB PG實例由一個或多個協(xié)調(diào)節(jié)點(Master)和多個計算節(jié)點(Compute Node)組成,協(xié)調(diào)節(jié)點負責接收用戶請求,制定分布式執(zhí)行計劃并下發(fā)至計算節(jié)點,收集執(zhí)行結(jié)果并返回給客戶端;計算節(jié)點負責并行計算分析與數(shù)據(jù)存儲。數(shù)據(jù)在計算節(jié)點之間可以隨機、哈希、復制分布。下圖ADB PG的架構(gòu)圖:
ADB PG的物理備份恢復功能,基于集群的基礎備份和日志備份,可以在分布式數(shù)據(jù)庫繼續(xù)提供服務的同時備份各個節(jié)點的數(shù)據(jù),并保證數(shù)據(jù)的一致性。在需要時,可以將分布式數(shù)據(jù)庫恢復至備份的時刻。
基礎備份是指對數(shù)據(jù)庫所有數(shù)據(jù)進行的一個完全拷貝?;A備份會將集群全量數(shù)據(jù)快照壓縮后存儲在其它離線存儲介質(zhì),集群在基礎備份期間不會阻塞用戶的讀寫,因此,備份期間產(chǎn)生的日志也會被備份來保證基礎備份的完整性。
日志備份(也稱為增量備份),是指將集群產(chǎn)生的日志文件備份至其他離線存儲介質(zhì)。日志文件記錄了用戶對數(shù)據(jù)庫的DML與DDL操作。通過一個完整的基礎備份以及連續(xù)的日志備份,可以將新集群恢復到某一歷史事件點,保證了這段時間的數(shù)據(jù)安全性。
ADB PG可保障最小RPO為10分鐘的備份恢復。
三、原理
在完整地介紹ADB PG的備份恢復原理之前,先簡要地介紹單機PG的PITR(Point in Time Recovery)備份恢復機制。ADB PG的備份恢復機制基于單機PG的PITR原理,并加入了分布式數(shù)據(jù)一致性的保障機制。
(一)單機PG的PITR機制
WAL日志:
PostgreSQL數(shù)據(jù)庫會將事務對數(shù)據(jù)的所有更改(包括DDL、DML等操作)記錄在WAL(Write Ahead Log)日志文件中。WAL日志文件可以看作是一個無限增長的只追加文件,PG會將日志數(shù)據(jù)按固定大小切分成多個文件存儲。事務的每次修改數(shù)據(jù)的操作都會被追加記錄至WAL文件中,并賦予一個唯一的LSN序號(Log Sequence Number),在事務提交時,會保證WAL日志已持久化。
這些日志文件的作用是為了讓數(shù)據(jù)庫在需要恢復時,可以通過“重放”WAL日志來恢復數(shù)據(jù)庫崩潰時還未持久化,但對應事務已提交的數(shù)據(jù)。
恢復點:
有了WAL日志可以進行“重放”操作,那么還有一個問題:需要重放到什么時候呢?這就需要恢復點(restore point)來解決。
恢復點相當于WAL日志中寫入的一個標記,它標記了一個日志的位置。當PG對日志進行重放時,通過檢查是否已經(jīng)到達這個標記點,來決定是否需要停止"重放"的操作。
以下SQL可以在WAL日志文件中創(chuàng)建一個名為t1的標志點:
- 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)
當數(shù)據(jù)庫順序回放WAL日志時,會檢查當前日志包含此恢復點名稱,若已包含,則停止重放。另外,PG還支持恢復至指定的任意時間點,事務號,LSN序號等操作。
基礎備份與增量備份:
基礎備份是對數(shù)據(jù)庫數(shù)據(jù)的一份完整拷貝??梢允褂胮g_basebackup工具對單機PG進行一次基礎備份,備份數(shù)據(jù)可保存至本地,也可存儲在其他離線存儲介質(zhì)(OSS)中。
- $ pg_basebackup -D pg_data_dir/ -p 6000NOTICE: pg_stop_backup complete, all required WAL segments have been a
增量備份是指對產(chǎn)生的WAL日志文件進行備份。在PG中,可通過數(shù)據(jù)庫參數(shù)archive_command來指定如何備份WAL日志數(shù)據(jù)。當PG生成一個WAL日志文件時,會通過執(zhí)行archive_command的命令來嘗試備份歸檔該日志文件。比如,如下命令會將日志文件發(fā)送至指定的OSS。
archive_command="ossutil cp %p oss://bucket/path/%f"
單機PG的全量備份與增量備份
需要注意的是,基礎備份期間并不會阻塞數(shù)據(jù)庫的讀寫,因此備份期間的數(shù)據(jù)更新對應的WAL日志也需要備份,以備恢復時保證數(shù)據(jù)的一致性。
PITR恢復:
當需要恢復數(shù)據(jù)庫時,首先下載基礎備份數(shù)據(jù),然后使用基礎備份開啟集群,再下載日志文件備份,“重放”至指定的恢復點即可進行數(shù)據(jù)庫的恢復。在單機PG中, 指定的恢復點的目標可以是事務號、時間戳、WAL序號(LSN)以及某個恢復點名稱。
(二)ADB PG的分布式一致性備份恢復機制
ADB PG 作為分布式數(shù)據(jù)庫,使用兩階段事務提交來管理分布式事務。如果照搬單機PG的PITR機制,會造成數(shù)據(jù)的不一致。比如如下場景:分布式事務按照A、B、C時間順序分配,但由于種種原因(如網(wǎng)絡延時、節(jié)點負載、顯式提交等),分布式模式下事務的提交的順序在各個節(jié)點可能各不相同,如下圖所示:
Master 按照 A、B、C順序提交
Compute Node 1 按照 A、C、B順序提交
Compute Node 2 按照 B、C、A順序提交
如果在此過程中,創(chuàng)建了恢復點,當恢復時如果指定恢復至該恢復點,顯而易見,恢復后集群中各個節(jié)點所處的狀態(tài)是不一致的。
兩階段事務提交鎖與一致性恢復點:
為了解決上述的問題,我們引入了兩階段事務提交鎖。分布式事務提交會以SHARED模式獲得該鎖,而創(chuàng)建恢復點都需要以EXCLUSIVE模式獲得該鎖。于是在集群中如果有分布式事務正在等待各個節(jié)點上提交,那么集群創(chuàng)建恢復點的動作必須等待所有節(jié)點上的分布式事務提交完后,才能進行。
這從根本上解決了上述這就解決了在分布式事務還在提交的同時創(chuàng)建恢復點而造成恢復時數(shù)據(jù)不一致的問題。引入了兩階段提交鎖機制之后,我們可以保證創(chuàng)建的恢復點所對應的各節(jié)點狀態(tài)是一致的,因此我們將ADB PG中創(chuàng)建的恢復點稱為一致性恢復點。
分布式備份與恢復過程:
有了事務提交鎖與一致性恢復點之后,我們就可以放心地對ADB PG各個節(jié)點進行備份和創(chuàng)建一致性恢復點,而無需擔心節(jié)點狀態(tài)不一致的問題。
ADB PG的備份也分為基礎備份和日志備份(也稱為增量備份)?;A備份是對集群每個節(jié)點進行的一次完整拷貝,ADB PG會對計算節(jié)點和協(xié)調(diào)節(jié)點并發(fā)地進行備份,將備份數(shù)據(jù)流式保存至離線存儲(如OSS)。在進行基礎備份的期間,不會阻塞集群的讀寫服務。因此,如果在基礎備份期間,用戶有寫入和更新的數(shù)據(jù),也需要將數(shù)據(jù)更改對應的WAL日志進行備份。如下圖所示, ADB PG會對每個節(jié)點并行地進行一次數(shù)據(jù)拷貝,將數(shù)據(jù)流式上傳至OSS。
ADB PG基礎備份過程
ADB PG的日志備份是對集群中的計算節(jié)點和協(xié)調(diào)節(jié)點產(chǎn)生的WAL日志的備份。各個節(jié)點會將自己生成的WAL日志轉(zhuǎn)儲至離線存儲(如OSS)。同時,集群會定時地創(chuàng)建一致性恢復點,并將包含一致性恢復點的WAL日志進行備份。
當需要恢復新的集群時,需要同時使用基礎備份與日志備份,并首先創(chuàng)建一個節(jié)點數(shù)和原實例相同的恢復實例。各個節(jié)點并行拉取指定的基礎備份至本地。之后,每個節(jié)點自己拉取自己所需的WAL日志備份文件,在本地重放,直到重放至指定的一致性恢復點而停止。最終,我們就能得到一個新的集群,并保證數(shù)據(jù)和狀態(tài)與源實例在一致性恢復點對應的數(shù)據(jù)與狀態(tài)一致?;謴偷倪^程如下圖所示:
四、使用
(1)控制臺備份相關(guān)信息
查看基礎備份集
用戶在實例控制臺的“備份恢復”頁面,可以查看數(shù)據(jù)庫的基礎備份數(shù)據(jù)。目前基礎備份數(shù)據(jù)保存在OSS上,默認保留天數(shù)為7天。
表格中每一行表示一份基礎備份數(shù)據(jù),并記錄了備份的開始時間,結(jié)束時間,備份狀態(tài)(成功/失敗),備份數(shù)據(jù)大小以及一致性時間點。一致性時間點表示此基礎備份數(shù)據(jù)可以將集群恢復至該歷史時間點,并使數(shù)據(jù)庫處于一致性狀態(tài)。
查看一致性恢復點
一致性恢復點是指集群可以恢復到的某個歷史時間點。用戶在備份恢復頁面的“恢復點”頁可以查看當前實例的所有恢復點。
表格中每一行表示一個一致性恢復點,并記錄了恢復點的時間戳,表示該恢復點可以讓集群恢復至此歷史時間點。
查看日志文件列表
日志文件記錄了數(shù)據(jù)庫的所有更改,在集群恢復時會使用相應的日志文件將集群恢復至一致性狀態(tài),當前用戶集群恢復的日志文件都保存在OSS上。用戶在備份恢復頁面的"日志備份"中可查看日志文件列表。
查看備份策略
備份策略是指實例進行備份的周期與時間段,創(chuàng)建一致性恢復點的頻率,以及數(shù)據(jù)備份的保留天數(shù)等等。
用戶可在備份恢復的“備份設置”中查看和修改備份策略。
修改備份策略
點擊“修改備份配置”按鈕,可以對備份策略進行修改。
(2)實例恢復步驟
首先查看源實例上的數(shù)據(jù)
進入恢復頁面
用戶可以在控制臺的實例列表,數(shù)據(jù)備份列表或恢復點列表點擊恢復進入實例恢復頁面;
恢復頁面如下:
恢復實例的售賣頁面與購買實例的頁面大體一致,但多了如下限制:
1.當前恢復實例是master數(shù)量必須選擇1個
2.選擇的實例segment(computer node)數(shù)量必須與源實例保持一致
3.選擇的實例存儲空間必須大于或等于源實例
選擇恢復時間點
在恢復頁面的"克隆源備份集"的下拉框中選擇需要恢復實例到哪一個歷史時間點,即指定一個一致性恢復點。
點擊購買
用戶點擊購買后,與購買新實例的流程一樣,需要等待實例創(chuàng)建完成后,可在控制臺看到新恢復出的實例。
恢復的新實例
查看恢復的新實例上的數(shù)據(jù),可以看到數(shù)據(jù)與源實例完全一致。
五、總結(jié)
備份恢復對ADB PG保障數(shù)據(jù)安全的具有很重要的價值。當前備份恢復功能已經(jīng)應用多個用戶場景,并保障了最少為10分鐘的RPO。未來ADB PG備份恢復功能會繼續(xù)優(yōu)化備份恢復性能,支持差異化備份,支持更多的存儲介質(zhì),提高用戶使用體驗,為用戶提供更多的功能、性能和成本優(yōu)化。
網(wǎng)站欄目:AnalyticDBPostgreSQL教你實現(xiàn)分布式一致性備份恢復
網(wǎng)站URL:http://m.fisionsoft.com.cn/article/djijeej.html


咨詢
建站咨詢
