這裏有一個ceph的原則,就是全部存儲的無論是塊設備、對象存儲、文件存儲最後都轉化成了底層的對象object,這個object包含3個元素data,xattr,omap。data是保存對象的數據,xattr是保存對象的擴展屬性,每一個對象文件均可以設置文件的屬性,這個屬性是一個key/value值對,可是受到文件系統的限制,key/value對的個數和每一個value的大小都進行了限制。若是要設置的對象的key/value不能存儲在文件的擴展屬性中,還存在另一種方式保存omap,omap其實是保存到了key/vaule 值對的數據庫levelDB中,在這裏value的值限制要比xattr中好的多。算法
一開始不太明白 key/value是作什麼的?在ceph中起到什麼做用? 這裏要說明的是這些key/value是保存對象的元數據相關信息,這些元數據相關信息是能夠單首創建和設置的,等於對象存儲的擴展,支持屬性的值對存儲。這個做用就是提供給ceph內部使用,暫時用處不大。數據庫
1、塊存儲設備元數據管理spa
對於塊存儲,在存儲的過程當中主要是塊的相關信息。塊的元數據信息管理,建立一個塊設備後會建立一個默認的rbd的元數據文件。對象
0001:這裏首先建立一個塊設備,該塊設備的大小爲100M。擴展
0002:使用命令查詢這個rbd的詳細信息。object
0008:這裏會有一個叫作rbd1.rbd的對象,他不是用來存儲數據的,並且用來保存元數據信息。真實的元數據信息不會保存在這個文件中,而是保存在這個文件的xattr或者omap中。meta
0010:這裏有個叫作rbd_directory的對象,該對象中會保存全部建立的塊設備名字。map
2、對象存儲的元數據管理im
對象存儲存在數據
0001:列出當前pool中存儲的對象。在對象存儲中仍是封裝一層叫作bucket,由bucket隔離object對象。
0006:查看一個objectone對象的狀態信息,包含名字、建立時間、size。
0008:本身建立一個objectone對象的屬性,該屬性key爲owner、value爲xyj。
0009:查詢一個objectone對象的全部屬性,發現這時只有剛剛建立的owner。
0011:查詢objectone對象的owner屬性值,這裏能夠顯示出剛剛設置的xyj。
3、文件系統cephfs:
這裏cephfs就很少說了,由於目前廣大羣衆都說cephfs在生產環境中存在一些問題。cephfs 有一個叫作mds的節點,該節點負責管理namespace,可是數據塊的映射則交給了crush算法,cephfs的元數據一樣會以對象的方式存儲在rados中,有一個叫作meta的文件夾中。一樣這些頂層的對象,能夠經過key/value存儲來自文件系統設置的屬性集。