【北亞企安數(shù)據(jù)恢復(fù)】Ceph存儲過程&Ceph數(shù)據(jù)恢復(fù)流程

Ceph存儲基本架構(gòu):
Ceph存儲可分為塊存儲,對象存儲和文件存儲。Ceph基于對象存儲,對外提供三種存儲接口,故稱為統(tǒng)一存儲。
Ceph的底層是RADOS(分布式對象存儲系統(tǒng)),RADOS由兩部分組成:OSD和MON。
MON負(fù)責(zé)監(jiān)控整個集群,維護(hù)集群的健康狀態(tài),維護(hù)展示集群狀態(tài)的各種圖表,如OSDMap、MonitorMap、PGMap和CRUSHMap。
OSD負(fù)責(zé)存儲數(shù)據(jù)、復(fù)制數(shù)據(jù)、平衡數(shù)據(jù)、恢復(fù)數(shù)據(jù),與其它OSD間進(jìn)行心跳檢查等。通常情況下一塊硬盤對應(yīng)一個OSD。

Ceph數(shù)據(jù)的存儲過程:
無論使用哪種存儲方式(對象、塊、文件),存儲的數(shù)據(jù)都會被切分成對象(Objects)。
存儲池:
不同用戶因為不同的目的把對象存儲在不同的存儲池里,這些對象分布于OSD上。
對象保存在不同的存儲池(Pool)中,是對象存儲的邏輯組,對應(yīng)不同的用戶。存儲池管理著歸置組數(shù)量、副本數(shù)量、和存儲池規(guī)則集。
歸置組:
歸置組(PGPlacementGroup)是對象池的片段,Ceph根據(jù)對象的Oid和一些其他信息做計算操作,映射到歸置組,無數(shù)的對象被劃分到不同的歸置組。PG是一個邏輯概念,它在數(shù)據(jù)尋址時類似于數(shù)據(jù)庫中的索引。
每個對象都會固定映射進(jìn)一個PG中,所以當(dāng)我們要尋找一個對象時,只需要先找到對象所屬的PG,然后遍歷這個PG就可以了,無需遍歷所有對象。而且在數(shù)據(jù)遷移時,也是以PG作為基本單位進(jìn)行遷移。
OSD:
最后PG會根據(jù)管理員設(shè)置的副本數(shù)量進(jìn)行復(fù)制,然后通過crush算法存儲到不同的OSD節(jié)點上,最終把PG中的所有對象存儲到OSD節(jié)點上。
BlueStore:
新版本中,Ceph默認(rèn)以Bluestore存儲引擎,作為RADOS中OSD的ObjectStore存儲底層實現(xiàn)BlueStore整體架構(gòu)。
存儲空間:
BlueStore將整個存儲空間分為3個部分:WAL,DB,SLOW
慢速(Slow)空間:主要用于存儲對象數(shù)據(jù),由BlueStore管理。
高速(DB)空間:存儲blufs和rocksdb產(chǎn)生的數(shù)據(jù),由BlueFS直接管理,如果不存在或者DB設(shè)備空間不足,則選擇Slow類型設(shè)備空間。
超高速(WAL)空間:主要存儲RocksDB的WAL(即.log)文件,由BlueFS直接管理,如果不存在或者WAL設(shè)備空間不足,則逐級降級選擇DB、SLOW分區(qū)。
Rocksdb:
BlueStore使用Rocksdb作為自己元數(shù)據(jù)存儲的底層實現(xiàn),將各種元數(shù)據(jù)以kv型記錄的方式存在數(shù)據(jù)庫中。
寫入機(jī)制:任何元數(shù)據(jù)的寫入都會先寫到WAL,然后再寫入MemoryTable(Memtable)。
當(dāng)一個Memtable寫滿了之后,就會變成immutable的Memtable,RocksDB在后臺會通過一個flush線程將這個Memtableflush到磁盤,生成一個SortedStringTable(SST)文件。
BlueFS:
BlueFS與通用文件系統(tǒng)不同,是Bluestore專為Rocksdb所設(shè)計的精簡文件系統(tǒng)。
BlueFS的文件和目錄的元數(shù)據(jù)以日志事務(wù)的形式保存在日志文件中,在上電過程中,replay日志文件中的事務(wù),就可以加載所有的元數(shù)據(jù)到內(nèi)存中。

北亞企安針對Ceph的數(shù)據(jù)恢復(fù)流程:
1、制作磁盤鏡像,用于數(shù)據(jù)提取和備份。
2、提取BlueFS中數(shù)據(jù)庫文件。從磁盤鏡像的分區(qū)獲取超級塊,得到日志的節(jié)點信息?;胤耪麄€日志中的事務(wù),得到目錄結(jié)構(gòu)和數(shù)據(jù)庫文件節(jié)點信息,根據(jù)數(shù)據(jù)庫文件節(jié)點信息提取數(shù)據(jù)庫文件。提取從每個OSD提取出來的數(shù)據(jù)庫中的object記錄。
3、對于損壞的數(shù)據(jù)庫,根據(jù)文件格式提取數(shù)據(jù)庫完好文件中的object記錄。
4、解析object記錄,從各鏡像上提取對應(yīng)的object數(shù)據(jù)。
5、根據(jù)object的id按序組合卷文件的所有object數(shù)據(jù)塊,還原整個卷數(shù)據(jù)。
6、修復(fù)卷的文件系統(tǒng)和其中文件。
對于損壞缺失程度不高的卷文件系統(tǒng),嘗試修復(fù)損壞的卷,得到卷中的文件。
對于有固定格式的文件,嘗試修復(fù)損壞文件。
