目錄
- ceph
- 組件
- 存儲類型
- 塊存儲
- 文件存儲
- 對象存儲
- 存儲過程
ceph
Ceph(分布式存儲系統)是一個開源的分布式存儲系統,設計用于提供高性能、高可靠性和可擴展性的存儲服務,可以避免單點故障,支持塊存儲、對象存儲以及文件系統存儲應用。使用C++語言開發。ceph能夠通過網絡將數據分散存儲在多臺獨立設備上
ceph具有可擴展性:
-
水平擴展,新的節點加入集群后只需要和原有集群連接到同一網絡,無需對現有節點進行重大修改或中斷
-
節點擴展后,舊數據會自動遷移到新節點,實現負載均衡,避免單點過熱的情況
-
使用crush算法來確定數據在存儲集群中的位置
組件
-
OSD: OSD(Object Storage Daemon)用于集群中所有對象與數據的存儲,處理集群數據的復制、恢復、負載均衡。也能夠自動檢測存儲磁盤的監控狀況,定期向Monitor節點報告自身的狀態和性能指標
讀取數據時,多臺OSD會同時對外傳輸數據,于是傳輸的速度會比較塊
當ceph集群設定數據有兩個副本時,至少需要兩個OSD進程即OSD節點,集群才能達到active+clean狀態
-
MON: MON(Monitor)負責維護Ceph存儲集群的狀態信息、配置信息和監控信息,維護集群的cluster MAP二進制表,保證集群數據的一致性,cluster MAP描述了對象塊存儲的物理位置,以及一個將設備聚合到物理位置的桶列表
-
MDS: MDS(Metadata Server)元數據服務器,提供元數據計算,緩存與同步。在ceph中,元數據也是存儲在osd節點中的,mds類似于元數據的代理緩存服務器。mds是 CephFS(Ceph 文件系統)的組成部分,cep塊設備和ceph對象存儲不使用mds
-
Manager: ceph-mgr,用于收集ceph集群狀態、性能指標、配置信息。
manager通過RESTful API和Web-based Dashboard向外提供信息
ceph結構包含兩個部分
ceph client,訪問ceph底層服務或組件,對外提供各種接口
ceph node,底層服務提端,也就是ceph存儲集群
存儲類型
塊存儲
塊存儲(RBD - RADOS Block Device),存儲數據以塊為單位,可被映射為塊設備,適用于直接附加到虛擬機或物理服務器。類似于傳統的硬盤
塊存儲通過Raid與LVM等手段,對數據提供了保護,多塊磁盤組合可以提高容量,也可以做邏輯盤,提高讀寫效率
但主機之間無法共享數據
塊存儲應用于docker容器、虛擬機磁盤分配;日志存儲;文件存儲
文件存儲
文件存儲(CephFS)可以克服塊存儲無法共享的問題。如FTP、NFS服務器
文件存儲允許多個節點通過標準文件系統接口訪問相同的文件和目錄。它支持文件的讀寫、權限控制等 POSIX 文件系統語義
對象存儲
一個文件具有屬性metadata,也稱元數據,包含該文件的大小、修改時間、存儲路徑等
在對象存儲(RADOS)中,數據以對象的形式存儲,每個對象都有唯一的標識符。它會將文件的元數據獨立出來,控制節點叫元數據服務器(服務器+對象存儲管理軟件),主要負責存儲對象的屬性。文件的數據部分主要由OSD存儲
當用戶訪問對象時,會首先訪問元數據服務器,元數據服務器反饋對象存儲在哪些OSD,用戶再去訪問那些OSD讀取數據
對象存儲主要用于存儲大量非結構化數據,如圖像、音頻、視頻、日志等
存儲過程
- 用戶訪問一個文件File,其存儲的數據會被切分成多個對象Objects,Objects的大小可以由管理員調整
- 每個對象都有一個唯一的oid,這個iod由文件file的id,ino,和分片objects的編號ono組成。oid可以唯一標識每個不同的對象,并存儲了對象與文件的存儲關系
- PG,placement group歸置組是一個邏輯概念,它在數據尋址時相當于數據庫中的索引,每個對象都會固定映射進一個PG中。所以當需要尋找一個對象時,只需要先找到對象所屬的PG,然后遍歷這個PG,無需遍歷所有對象。并且在遷移數據時,也是以PG作為基本單位遷移
- 對象映射進PG,首先會對oid做hash取出特征碼,用特征碼與PG的數量去模,得到序號pgid
- 最后PG會根據管理員設置的副本數量進行復制,通過crush算法存儲到不同的OSD節點上,第一個OSD為主節點,其余均為從節點