◆王勝杰 徐 龍
一種Ceph分布式塊存儲的持續數據保護方法
◆王勝杰 徐 龍
(四川大學計算機學院 四川 610065)
本文針對目前Ceph分布式塊存儲快照只能保護周期時間點的歷史數據,不能夠保護任意時間點歷史數據的問題,提出一種適用于Ceph分布式塊存儲的持續數據保護(Continuous Data Protection,CDP)方法。通過對每次塊存儲設備寫操作的監控,先拷貝將要被該寫操作覆蓋的數據至歷史數據塊設備,再執行本次正常寫操作,最后記錄該過程至日志塊設備。數據恢復過程則按照日志記錄逆時序回寫歷史數據即可。通過實驗驗證所提出的數據持續保護方法能夠將塊存儲恢復至任意時間點的歷史數據狀態。
Ceph分布式塊存儲;快照;持續數據保護(CDP)
隨著云計算技術的興起和普及,云計算基石云存儲系統受到業界的重視。Ceph[1-2]分布式存儲系統以其穩定、高可用、可擴展的特性,迅速成為最熱門的開源云Openstack的后端存儲系統。Ceph中的分布式塊存儲系統[3]可為云上虛擬機提供塊設備,采用多副本策略保證塊設備的高可靠性,但對塊設備歷史數據的保護方法只有快照。快照是塊設備在某個特定時間點的一份只讀副本,通過寫時拷貝(Copy-On-Write,COW)的快照方法對塊設備的歷史數據進行有效的備份和恢復。然而,快照僅能對周期時間點的塊設備數據進行周期保護,連續兩次相鄰的快照之間的數據將會丟失。在傳統容災系統中,通過持續數據保護(CDP)技術來降低關鍵數據丟失的風險,解決快照存在的問題。全球網絡存儲工業協會(SNIA)對CDP的定義是:一種能獨立對主要數據進行持續捕捉或跟蹤數據修改,并保存變化,從而實現從過去的任何非預設點恢復的方法[4]。目前CDP主要應用于傳統遠程災難備份領域,在主流分布式存儲系統中幾乎都沒有提供CDP技術的實現。所以,本文提出了一種適用于Ceph分布式塊存儲的CDP方法,該方法通過在Ceph塊存儲客戶端加入CDP監控和管理模塊,實現對塊設備寫操作的監控,完成歷史數據的備份.數據變化過程的記錄和控制塊設備數據的恢復。相比快照方法,本文提出的CDP方法能夠完成任意時間點歷史數據的保護,極大降低數據丟失的風險。
1.1 Ceph分布式塊存儲的快照方法
Ceph分布式塊存儲的快照框架如圖1所示。

圖1 Ceph分布式塊存儲的快照框架
Ceph分布式塊存儲RBD的快照,是服務端實現的,分布式對象存儲RADOS支持的,基于OSD存儲服務器的COW基礎實現的。
RBD快照的創建基本有兩個步驟:(1)向Monitor監控集群獲取一個最新快照序號;(2)把本次快照信息保存到RBD的元數據中。整個過程并不觸發OSD端的數據操作,所以速度非常快。每間隔一定時間對塊設備進行快照的方法是一種提高歷史數據可靠性的有效方法,但無法避免歷史數據的丟失。例如正當圖1中所示塊設備(源塊設備)和其快照(源塊設備快照)的狀態,此時源塊設備映射對象1`的歷史數據對象1已被拷貝至源塊設備快照,若在下一次快照周期到了之前,又有新數據寫入對象1`位置,對象1`變為對象1``,則對象1`這個歷史數據將永久性丟失。
1.2 Ceph分布式塊存儲的CDP方法
本文提出的Ceph分布式塊存儲CDP框架如圖2所示:

圖2 Ceph分布式塊存儲CDP框架
圖2 中源塊設備為用戶直接使用的數據塊設備,用戶可以對其完成正常的RBD塊設備操作。源塊設備在RADOS內映射為對象,每個對象根據所在存儲池的存儲策略,存儲多個副本于不同的OSD,這些OSD可以在不同的服務器、機架、機房、甚至數據中心,以此來保持源塊設備的數據高可靠性。針對每個開啟CDP的源塊設備增加兩個輔助塊設備:(1)歷史塊設備,用于存儲歷史數據,每次存入將被新數據覆蓋的舊數據,而不是存儲整個新數據所在對象,總大小可根據需求動態變化;(2)日志塊設備,用于存儲每次數據變化的記錄信息,記錄信息包括:數據變化時間,源塊設備偏移量、歷史塊設備偏移量、變化數據大小。兩個輔助塊設備映射的object所在存儲池的存儲策略設置副本數為1,以此來減小CDP過程對存儲的消耗。
1.3 CDP寫流程
本文借鑒傳統CDP實現技術中的復制參考數據模式[5],在librbd的API中增加對CDP的支持,實現源塊設備的監控模塊。寫請求依據源塊設備是否支持CDP來進行分流。不支持的寫請求按照原有流程下發,完成正常寫操作。支持CDP的寫請求執行流程:
(1)根據寫入位置和大小,讀取源塊設備舊數據。
(2)新數據寫入源塊設備,舊數據寫入歷史塊設備的上次寫入數據的尾部,本次數據變化記錄信息寫入日志塊設備的上次寫入日志的尾部。
(3)等待所有寫操作完成后,將寫結果返回給用戶,寫過程完成。

圖3 CDP寫流程
1.4 CDP恢復流程
塊設備恢復是實現Ceph塊存儲CDP的關鍵,其過程也較為復雜。CDP恢復流程如圖4:

圖4 CDP恢復流程
CDP恢復具體流程:
(1)用戶指定塊設備需要恢復到的任意時間點。
(2)判斷恢復時間點是否合法,即是否在CDP保護的時間范圍內(啟動CDP和終止CDP時間段內)。合法則進入下一流程,不合法則恢復失敗,需要重選恢復時間點。
(3)對源塊設備打一個快照,用于保存當前源塊設備的數據狀態。
(4)逆序讀取日志設備中的記錄信息,記錄信息所占存儲空間較小,可一次讀取大量日志。
(5)根據每條日志信息,判斷恢復時間點是否小于或等于日志時間點。若是,則進入下一步;若否,則表示恢復完成。
(6)根據日志信息,讀取歷史塊設備數據,寫入源塊設備,返回至(4)。
本實驗驗證本文方法能夠實現對Ceph塊存儲設備任意時間點的保護,對比周期性快照能減小歷史數據的丟失風險,從而得出在保護關鍵數據方面,本文方法比快照更有優勢。
2.1 實驗環境
由于本實驗主要目的是驗證本文方法實現的功能,故只在一臺服務器上完成Ceph分布式塊存儲系統、KVM/qemu虛擬化平臺的部署,服務器配置為:Intel Pentium E6600 3.3GHz CPU、8G內存、1塊500G SATA硬盤、CentOS-7-x86_64-minimal操作系統。將Ceph分布式塊存儲系統與KVM/qemu虛擬化平臺集成,創建一臺KVM虛擬機,1核CPU,2G內存,操作系統為CentOS-7-x86_64-minimal。
2.2 實驗方法
創建一個10G的Ceph塊設備,掛載至虛擬機。虛擬機內部為該塊設備構建xfs文件系統,掛載該塊設備至測試目錄/test。此時,啟動物理服務器上周期性創建塊設備快照的腳本,周期設置為10分鐘,啟動塊設備CDP。同時,虛擬機內執行測試腳本,該腳本功能是每隔1秒刪除/test目錄下所有文件,獲取當前時間作為文件名創建文件至/test,并向文件內寫入當前時間。1小時后停止所有腳本和CDP,觀察快照和CDP恢復后的塊設備數據。
2.3 實驗結果與分析
實驗獲得6個時間點的快照,而CDP恢復時間可以任意取,故隨意選擇部分時間點,觀察快照和CDP所能恢復的測試文件,如表1所示。

表1 實驗結果
表1中,周期快照僅在10分鐘的整數倍時間點上有數據,其他任意時間點上數據狀態均無法恢復,而CDP恢復的塊設備在任意時間點有數據,由于數據寫入要經過多級緩存和網絡傳輸才能完成最終落盤,所以恢復文件時間點與恢復選擇時間點略有差異,屬于正常現象,可通過微調恢復時間獲得想要恢復的數據。由此實驗結果可知,本文提出的CDP方法對每次塊設備的寫操作都完成了監控,每一次數據變化都被備份和記錄,恢復過程將備份按照記錄逆時序回寫至塊設備即可,這就驗證了本文提出的CDP可以保證對任意時間點的數據進行有效保護。
本文針對Ceph分布式塊存儲系統中周期性快照無法保護任意時間點數據,導致歷史數據丟失的問題,通過監控塊設備的寫操作,備份數據并記錄變化,利用備份數據和記錄日志可恢復塊設備至CDP期間任意時間點的數據狀態。通過實驗驗證了本文提出的Ceph分布式塊存儲CDP實現方法能夠保證任意時間點數據的安全。
[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].計算機時間報,2006.
[5]劉建毅.持續數據保護技術[J].中興通訊技術,2010.