◆王勝杰 徐 龍
一種Ceph分布式塊存儲的持續(xù)數(shù)據(jù)保護(hù)方法
◆王勝杰 徐 龍
(四川大學(xué)計算機(jī)學(xué)院 四川 610065)
本文針對目前Ceph分布式塊存儲快照只能保護(hù)周期時間點的歷史數(shù)據(jù),不能夠保護(hù)任意時間點歷史數(shù)據(jù)的問題,提出一種適用于Ceph分布式塊存儲的持續(xù)數(shù)據(jù)保護(hù)(Continuous Data Protection,CDP)方法。通過對每次塊存儲設(shè)備寫操作的監(jiān)控,先拷貝將要被該寫操作覆蓋的數(shù)據(jù)至歷史數(shù)據(jù)塊設(shè)備,再執(zhí)行本次正常寫操作,最后記錄該過程至日志塊設(shè)備。數(shù)據(jù)恢復(fù)過程則按照日志記錄逆時序回寫歷史數(shù)據(jù)即可。通過實驗驗證所提出的數(shù)據(jù)持續(xù)保護(hù)方法能夠?qū)K存儲恢復(fù)至任意時間點的歷史數(shù)據(jù)狀態(tài)。
Ceph分布式塊存儲;快照;持續(xù)數(shù)據(jù)保護(hù)(CDP)
隨著云計算技術(shù)的興起和普及,云計算基石云存儲系統(tǒng)受到業(yè)界的重視。Ceph[1-2]分布式存儲系統(tǒng)以其穩(wěn)定、高可用、可擴(kuò)展的特性,迅速成為最熱門的開源云Openstack的后端存儲系統(tǒng)。Ceph中的分布式塊存儲系統(tǒng)[3]可為云上虛擬機(jī)提供塊設(shè)備,采用多副本策略保證塊設(shè)備的高可靠性,但對塊設(shè)備歷史數(shù)據(jù)的保護(hù)方法只有快照??煺帐菈K設(shè)備在某個特定時間點的一份只讀副本,通過寫時拷貝(Copy-On-Write,COW)的快照方法對塊設(shè)備的歷史數(shù)據(jù)進(jìn)行有效的備份和恢復(fù)。然而,快照僅能對周期時間點的塊設(shè)備數(shù)據(jù)進(jìn)行周期保護(hù),連續(xù)兩次相鄰的快照之間的數(shù)據(jù)將會丟失。在傳統(tǒng)容災(zāi)系統(tǒng)中,通過持續(xù)數(shù)據(jù)保護(hù)(CDP)技術(shù)來降低關(guān)鍵數(shù)據(jù)丟失的風(fēng)險,解決快照存在的問題。全球網(wǎng)絡(luò)存儲工業(yè)協(xié)會(SNIA)對CDP的定義是:一種能獨立對主要數(shù)據(jù)進(jìn)行持續(xù)捕捉或跟蹤數(shù)據(jù)修改,并保存變化,從而實現(xiàn)從過去的任何非預(yù)設(shè)點恢復(fù)的方法[4]。目前CDP主要應(yīng)用于傳統(tǒng)遠(yuǎn)程災(zāi)難備份領(lǐng)域,在主流分布式存儲系統(tǒng)中幾乎都沒有提供CDP技術(shù)的實現(xiàn)。所以,本文提出了一種適用于Ceph分布式塊存儲的CDP方法,該方法通過在Ceph塊存儲客戶端加入CDP監(jiān)控和管理模塊,實現(xiàn)對塊設(shè)備寫操作的監(jiān)控,完成歷史數(shù)據(jù)的備份.數(shù)據(jù)變化過程的記錄和控制塊設(shè)備數(shù)據(jù)的恢復(fù)。相比快照方法,本文提出的CDP方法能夠完成任意時間點歷史數(shù)據(jù)的保護(hù),極大降低數(shù)據(jù)丟失的風(fēng)險。
1.1 Ceph分布式塊存儲的快照方法
Ceph分布式塊存儲的快照框架如圖1所示。
圖1 Ceph分布式塊存儲的快照框架
Ceph分布式塊存儲RBD的快照,是服務(wù)端實現(xiàn)的,分布式對象存儲RADOS支持的,基于OSD存儲服務(wù)器的COW基礎(chǔ)實現(xiàn)的。
RBD快照的創(chuàng)建基本有兩個步驟:(1)向Monitor監(jiān)控集群獲取一個最新快照序號;(2)把本次快照信息保存到RBD的元數(shù)據(jù)中。整個過程并不觸發(fā)OSD端的數(shù)據(jù)操作,所以速度非???。每間隔一定時間對塊設(shè)備進(jìn)行快照的方法是一種提高歷史數(shù)據(jù)可靠性的有效方法,但無法避免歷史數(shù)據(jù)的丟失。例如正當(dāng)圖1中所示塊設(shè)備(源塊設(shè)備)和其快照(源塊設(shè)備快照)的狀態(tài),此時源塊設(shè)備映射對象1`的歷史數(shù)據(jù)對象1已被拷貝至源塊設(shè)備快照,若在下一次快照周期到了之前,又有新數(shù)據(jù)寫入對象1`位置,對象1`變?yōu)閷ο?``,則對象1`這個歷史數(shù)據(jù)將永久性丟失。
1.2 Ceph分布式塊存儲的CDP方法
本文提出的Ceph分布式塊存儲CDP框架如圖2所示:
圖2 Ceph分布式塊存儲CDP框架
圖2 中源塊設(shè)備為用戶直接使用的數(shù)據(jù)塊設(shè)備,用戶可以對其完成正常的RBD塊設(shè)備操作。源塊設(shè)備在RADOS內(nèi)映射為對象,每個對象根據(jù)所在存儲池的存儲策略,存儲多個副本于不同的OSD,這些OSD可以在不同的服務(wù)器、機(jī)架、機(jī)房、甚至數(shù)據(jù)中心,以此來保持源塊設(shè)備的數(shù)據(jù)高可靠性。針對每個開啟CDP的源塊設(shè)備增加兩個輔助塊設(shè)備:(1)歷史塊設(shè)備,用于存儲歷史數(shù)據(jù),每次存入將被新數(shù)據(jù)覆蓋的舊數(shù)據(jù),而不是存儲整個新數(shù)據(jù)所在對象,總大小可根據(jù)需求動態(tài)變化;(2)日志塊設(shè)備,用于存儲每次數(shù)據(jù)變化的記錄信息,記錄信息包括:數(shù)據(jù)變化時間,源塊設(shè)備偏移量、歷史塊設(shè)備偏移量、變化數(shù)據(jù)大小。兩個輔助塊設(shè)備映射的object所在存儲池的存儲策略設(shè)置副本數(shù)為1,以此來減小CDP過程對存儲的消耗。
1.3 CDP寫流程
本文借鑒傳統(tǒng)CDP實現(xiàn)技術(shù)中的復(fù)制參考數(shù)據(jù)模式[5],在librbd的API中增加對CDP的支持,實現(xiàn)源塊設(shè)備的監(jiān)控模塊。寫請求依據(jù)源塊設(shè)備是否支持CDP來進(jìn)行分流。不支持的寫請求按照原有流程下發(fā),完成正常寫操作。支持CDP的寫請求執(zhí)行流程:
(1)根據(jù)寫入位置和大小,讀取源塊設(shè)備舊數(shù)據(jù)。
(2)新數(shù)據(jù)寫入源塊設(shè)備,舊數(shù)據(jù)寫入歷史塊設(shè)備的上次寫入數(shù)據(jù)的尾部,本次數(shù)據(jù)變化記錄信息寫入日志塊設(shè)備的上次寫入日志的尾部。
(3)等待所有寫操作完成后,將寫結(jié)果返回給用戶,寫過程完成。
圖3 CDP寫流程
1.4 CDP恢復(fù)流程
塊設(shè)備恢復(fù)是實現(xiàn)Ceph塊存儲CDP的關(guān)鍵,其過程也較為復(fù)雜。CDP恢復(fù)流程如圖4:
圖4 CDP恢復(fù)流程
CDP恢復(fù)具體流程:
(1)用戶指定塊設(shè)備需要恢復(fù)到的任意時間點。
(2)判斷恢復(fù)時間點是否合法,即是否在CDP保護(hù)的時間范圍內(nèi)(啟動CDP和終止CDP時間段內(nèi))。合法則進(jìn)入下一流程,不合法則恢復(fù)失敗,需要重選恢復(fù)時間點。
(3)對源塊設(shè)備打一個快照,用于保存當(dāng)前源塊設(shè)備的數(shù)據(jù)狀態(tài)。
(4)逆序讀取日志設(shè)備中的記錄信息,記錄信息所占存儲空間較小,可一次讀取大量日志。
(5)根據(jù)每條日志信息,判斷恢復(fù)時間點是否小于或等于日志時間點。若是,則進(jìn)入下一步;若否,則表示恢復(fù)完成。
(6)根據(jù)日志信息,讀取歷史塊設(shè)備數(shù)據(jù),寫入源塊設(shè)備,返回至(4)。
本實驗驗證本文方法能夠?qū)崿F(xiàn)對Ceph塊存儲設(shè)備任意時間點的保護(hù),對比周期性快照能減小歷史數(shù)據(jù)的丟失風(fēng)險,從而得出在保護(hù)關(guān)鍵數(shù)據(jù)方面,本文方法比快照更有優(yōu)勢。
2.1 實驗環(huán)境
由于本實驗主要目的是驗證本文方法實現(xiàn)的功能,故只在一臺服務(wù)器上完成Ceph分布式塊存儲系統(tǒng)、KVM/qemu虛擬化平臺的部署,服務(wù)器配置為:Intel Pentium E6600 3.3GHz CPU、8G內(nèi)存、1塊500G SATA硬盤、CentOS-7-x86_64-minimal操作系統(tǒng)。將Ceph分布式塊存儲系統(tǒng)與KVM/qemu虛擬化平臺集成,創(chuàng)建一臺KVM虛擬機(jī),1核CPU,2G內(nèi)存,操作系統(tǒng)為CentOS-7-x86_64-minimal。
2.2 實驗方法
創(chuàng)建一個10G的Ceph塊設(shè)備,掛載至虛擬機(jī)。虛擬機(jī)內(nèi)部為該塊設(shè)備構(gòu)建xfs文件系統(tǒng),掛載該塊設(shè)備至測試目錄/test。此時,啟動物理服務(wù)器上周期性創(chuàng)建塊設(shè)備快照的腳本,周期設(shè)置為10分鐘,啟動塊設(shè)備CDP。同時,虛擬機(jī)內(nèi)執(zhí)行測試腳本,該腳本功能是每隔1秒刪除/test目錄下所有文件,獲取當(dāng)前時間作為文件名創(chuàng)建文件至/test,并向文件內(nèi)寫入當(dāng)前時間。1小時后停止所有腳本和CDP,觀察快照和CDP恢復(fù)后的塊設(shè)備數(shù)據(jù)。
2.3 實驗結(jié)果與分析
實驗獲得6個時間點的快照,而CDP恢復(fù)時間可以任意取,故隨意選擇部分時間點,觀察快照和CDP所能恢復(fù)的測試文件,如表1所示。
表1 實驗結(jié)果
表1中,周期快照僅在10分鐘的整數(shù)倍時間點上有數(shù)據(jù),其他任意時間點上數(shù)據(jù)狀態(tài)均無法恢復(fù),而CDP恢復(fù)的塊設(shè)備在任意時間點有數(shù)據(jù),由于數(shù)據(jù)寫入要經(jīng)過多級緩存和網(wǎng)絡(luò)傳輸才能完成最終落盤,所以恢復(fù)文件時間點與恢復(fù)選擇時間點略有差異,屬于正?,F(xiàn)象,可通過微調(diào)恢復(fù)時間獲得想要恢復(fù)的數(shù)據(jù)。由此實驗結(jié)果可知,本文提出的CDP方法對每次塊設(shè)備的寫操作都完成了監(jiān)控,每一次數(shù)據(jù)變化都被備份和記錄,恢復(fù)過程將備份按照記錄逆時序回寫至塊設(shè)備即可,這就驗證了本文提出的CDP可以保證對任意時間點的數(shù)據(jù)進(jìn)行有效保護(hù)。
本文針對Ceph分布式塊存儲系統(tǒng)中周期性快照無法保護(hù)任意時間點數(shù)據(jù),導(dǎo)致歷史數(shù)據(jù)丟失的問題,通過監(jiān)控塊設(shè)備的寫操作,備份數(shù)據(jù)并記錄變化,利用備份數(shù)據(jù)和記錄日志可恢復(fù)塊設(shè)備至CDP期間任意時間點的數(shù)據(jù)狀態(tài)。通過實驗驗證了本文提出的Ceph分布式塊存儲CDP實現(xiàn)方法能夠保證任意時間點數(shù)據(jù)的安全。
[1]Sage A Weil,Scott A Brandt,Ethan L Miller,and Carlors Maltzahn.Crush:Controlled,scalable,decentralized placement of replicated data.In Proceedings of the 2006 ACM/IEEE conference on Supercomputing,.ACM,2006.
[2]Home Ceph.http://www.ceph.com/,2016.
[3]Ceph Block Device.http://docs.ceph.com/docs/master/r bd/rbd/,2016.
[4]顏 軍.CDP帶來的存儲新氣象[N].計算機(jī)時間報,2006.
[5]劉建毅.持續(xù)數(shù)據(jù)保護(hù)技術(shù)[J].中興通訊技術(shù),2010.