Ceph分布式存儲詳述


存儲發展史

企業中使用存儲按照其功能,使用場景,一直在持續發展和迭代,大體上可以分為四個階段:

  • DAS:Direct Attached Storage,即直連存儲,第一代存儲系統,通過SCSI總線擴展至一個外部的存儲,磁帶整列,作為服務器擴展的一部分;
  • NAS:Network Attached Storage,即網絡附加存儲,通過網絡協議如NFS遠程獲取后端文件服務器共享的存儲空間,將文件存儲單獨分離出來;
  • SAN:Storage Area Network,即存儲區域網絡,分為IP-SAN和FC-SAN,即通過TCP/IP協議和FC(Fiber Channel)光纖協議連接到存儲服務器;
  • Object Storage:即對象存儲,隨着大數據的發展,越來越多的圖片,視頻,音頻靜態文件存儲需求,動仄PB以上的存儲空間,需無限擴展。

存儲的發展,根據不同的階段誕生了不同的存儲解決方案,每一種存儲都有它當時的歷史誕生的環境以及應用場景,解決的問題和優缺點。

區別如下

DAS 直連存儲服務器使用 SCSI 或 FC 協議連接到存儲陣列、通過 SCSI 總線和 FC 光纖協議類型進行數據傳輸;例如一塊有空間大小的裸磁盤:/dev/sdb。DAS存儲雖然組網簡單、成本低廉但是可擴展性有限、無法多主機實現共享、目前已經很少使用了。

NAS網絡存儲服務器使用TCP網絡協議連接至文件共享存儲、常見的有NFS、CIFS協議等;通過網絡的方式映射存儲中的一個目錄到目標主機,如/data。NAS網絡存儲使用簡單,通過IP協議實現互相訪問,多台主機可以同時共享同一個存儲。但是NAS網絡存儲的性能有限,可靠性不是很高。

SAN存儲區域網絡服務器使用一個存儲區域網絡IP或FC連接到存儲陣列、常見的SAN協議類型有IP-SAN和FC-SAN。SAN存儲區域網絡的性能非常好、可擴展性強;但是成本特別高、尤其是FC存儲網絡:因為需要用到HBA卡、FC交換機和支持FC接口的存儲。

Object Storage對象存儲通過網絡使用API訪問一個無限擴展的分布式存儲系統、兼容於S3風格、原生PUT/GET等協議類型。表現形式就是可以無限使用存儲空間,通過PUT/GET無限上傳和下載。可擴展性極強、使用簡單,但是只使用於靜態不可編輯文件,無法為服務器提供塊級別存儲。

綜上、企業中不同場景使用的存儲,使用表現形式無非是這三種:磁盤(塊存儲設備),掛載至目錄像本地文件一樣使用(文件共享存儲),通過API向存儲系統中上傳PUT和下載GET文件(對象存儲)。

什么是Ceph

Ceph能夠提供企業中三種常見的存儲需求:塊存儲、文件存儲和對象存儲,正如Ceph官方所定義的一樣“Ceph uniquely delivers object, block, and file storage in one unified system.”,Ceph在一個統一的存儲系統中同時提供了對象存儲、塊存儲和文件存儲,即Ceph是一個統一存儲,能夠將企業企業中的三種存儲需求統一匯總到一個存儲系統中,並提供分布式、橫向擴展,高度可靠性的存儲系統,Ceph存儲提供的三大存儲接口:

上圖詳見官方文檔:http://docs.ceph.org.cn/

1、CEPH OBJECT STORE對象存儲,包含功能,特性如下:

  • RESTful Interface RESTful風格接口;
  • S3- and Swift-compliant APIs 提供兼容於S3和Swfit風格API;
  • S3-style subdomains S3風格的目錄風格;
  • Unified S3/Swift namespace 統一扁平的S3/Swift命名空間,即所有的對象存放在同一個平面上;
  • User management 提供用戶管理認證接入;
  • Usage tracking 使用情況追蹤;
  • Striped objects 對象切割,將一個大文件切割為多個小文件(objects);
  • Cloud solution integration 雲計算解決方案即成,可以與Swfit對象存儲即成;
  • Multi-site deployment 多站點部署,保障可靠性;
  • Multi-site replication 多站點復制,提供容災方案。

2、CEPH BLOCK DEVICE塊存儲,包含功能,特性如下:

  • Thin-provisioned 瘦分配,即先分配特定存儲大小,隨着使用實際使用空間的增長而占用存儲空間,避免空間占用;
  • Images up to 16 exabytes 耽擱景象最大能支持16EB;
  • Configurable striping 可配置的切片,默認是4M;
  • In-memory caching 內存緩存;
  • Snapshots 支持快照,將當時某個狀態記錄下載;
  • Copy-on-write cloning Copy-on-write克隆復制功能,即制作某個鏡像實現快速克隆,子鏡像依賴於母鏡像;
  • Kernel driver support 內核驅動支持,即rbd內核模塊;
  • KVM/libvirt support 支持KVM/libvirt,實現與雲平台如openstack,cloudstack集成的基礎;
  • Back-end for cloud solutions 雲計算多后端解決方案,即為openstack,kubernetes提供后端存儲;
  • Incremental backup 增量備份;
  • Disaster recovery (multisite asynchronous replication) 災難恢復,通過多站點異步復制,實現數據鏡像拷貝。

3、CEPH FILE SYSTEM文件存儲,包含功能,特性如下:

  • POSIX-compliant semantics POSIX風格接口;
  • Separates metadata from data 元數據metadata和數據data分開存儲;
  • Dynamic rebalancing 動態數據均衡;
  • Subdirectory snapshots 子目錄快照;
  • Configurable striping 可配置切割大小;
  • Kernel driver support 內核驅動支持,即CephFS;
  • FUSE support 支持FUSE風格;
  • NFS/CIFS deployable 支持NFS/CIFS形式部署;
  • Use with Hadoop (replace HDFS) 可支持與Hadoop繼承,替換HDFS存儲。

通俗點講:Ceph提供了三種存儲接口:塊存儲RBD,對象存儲RGW和文件存儲CephFS,每種存儲都有其相應的功能和特性。

Ceph存儲架構

Ceph 獨一無二地用統一的系統提供了對象、塊、和文件存儲功能,它可靠性高、管理簡便、並且是自由軟件。 Ceph 的強大足以改變貴公司的 IT 基礎架構、和管理海量數據的能力。Ceph 可提供極大的伸縮性——供成千用戶訪問 PB 乃至 EB 級的數據。 Ceph 節點以普通硬件和智能守護進程作為支撐點, Ceph 存儲集群組織起了大量節點,它們之間靠相互通訊來復制數據、並動態地重分布數據。

Ceph分布式集群是建立在RADOS算法之上的,RADOS是一個可擴展性,高可靠的存儲服務算法,是Ceph的實現的基礎。Ceph有兩個重要的組件組成:Ceph Monitors(Ceph監視器)和Ceph OSDs(Ceph OSD 守護進程)。

其中Ceph Monitor作為集群中的控制中心,擁有整個集群的狀態信息,各個組件如OSDs將自己的狀態信息報告給Ceph Monitor這個總司令,由此可以可知,Ceph Monitor這個總司令肩負起整個集群協調工作;同時Ceph Monitor還負責將集群的指揮工作,將集群的狀態同步給客戶端,客戶端根據Ceph Monitor發送的集群狀態信息可以獲取到集群的狀態,當集群狀態有變化如OSD增加或故障時,Ceph Monitor會負責更新集群狀態並下發給客戶端。Ceph Monitor的重要不言而喻,為了保障集群的可用性,需要部署高可用,一般需要部署2n+1個節點,如3個或5個Ceph Monitor節點。

什么是集群的狀態呢? Ceph Monitor中保存的集群狀態根據其功能角色的不同,分為以下幾個map狀態表:

  • Monitor Maps,集群Ceph Monitor集群的節點狀態,通過ceph mon dump可以獲取;
  • OSD Maps,集群數據存儲節點的狀態表,記錄集群中OSD狀態變化,通過ceph osd dump可以獲取;
  • PGs Maps,PGs即placement group,表示在OSD中的分布式方式,通過ceph pg dump可以獲取;
  • Crush Maps,Crush包含資源池pool在存儲中的映射路徑方式,即數據是如何分布的;
  • MDS Maps,CephFS依賴的MDS管理組件,可通過ceph mds dump獲取,用於追蹤MDS狀態。

除了Ceph Monitor之外,還有一個重要的組件是OSD,集群中通常有多個OSD組成,OSD即Object Storage Daemon,負責Ceph集群中真正數據存儲的功能,也就是我們的數據最終都會寫入到OSD中。除了Monitor之外,根據Ceph提供的不同功能,還有其他組件,包括:

  • Ceph Monitors(ceph-mon);Ceph OSDs(ceph-osd);
  • Ceph MDS(ceph-mds),用於提供CephFS文件存儲,提供文件存儲所需元數據管理;
  • Ceph RGW(ceph-rgw),用於提供Ceph對象存儲網關,提供存儲網關接入;
  • Ceph Manager(ceph-mgr),提供集群狀態監控和性能監控。

注:Ceph Monitor監視器維護着集群運行圖的主副本。一個監視器集群確保了當某個監視器失效時的高可用性。存儲集群客戶端向 Ceph Monitor 監視器索取集群運行圖的最新副本。而Ceph OSD 守護進程檢查自身狀態、以及其它 OSD 的狀態,並報告給監視器們。存儲集群的客戶端和各個 Ceph OSD 守護進程使用 CRUSH 算法高效地計算數據位置,而不是依賴於一個中心化的查詢表。它的高級功能包括:基於 librados的原生存儲接口、和多種基於 librados 的服務接口。

Ceph數據的存儲

從一個最基本的的概念入手:Ceph中一切皆對象,不管是RBD塊存儲接口,RGW對象存儲接口還是文件存儲CephFS接口,其存儲如到Ceph中的數據均可以看作是一個對象,一個文件需要切割為多個對象(object),然后將object存儲到OSD中,如下圖:

注:Ceph 存儲集群從 Ceph 客戶端接收數據——不管是來自 Ceph 塊設備、 Ceph 對象存儲、 Ceph 文件系統、還是基於 librados 的自定義實現——並存儲為對象。每個對象是文件系統中的一個文件,它們存儲在對象存儲設備上。由 Ceph OSD 守護進程處理存儲設備上的讀/寫操作。

那么,這些切割后的object怎么選擇到對應的OSD存儲節點呢,這需要依賴於Ceph的智能調度算法CRUSH,通過CRUSH算法將object調度到合適的OSD節點上,不管是客戶端還是OSD,均使用CRUSH算法來計算object在集群中OSD的位置信息,同時保障object的副本能落到合適的OSD節點上。

Ceph OSD 在扁平的命名空間內把所有數據存儲為對象(也就是沒有目錄層次)。對象包含一個標識符、二進制數據、和由名字/值對組成的元數據,元數據語義完全取決於 Ceph 客戶端。例如, CephFS 用元數據存儲文件屬性,如文件所有者、創建日期、最后修改日期等等。

object調度到OSD節點上,如果一個文件發生了變動或OSD出現了異常,以一個100G的文件為例,每個object默認為4M,將會切割為25600個object,如果Ceph集群需要正對每個object都進行調度的話,可想而知,在一個大規模集群中,crush的調度將會變得異常的繁重。因此,Ceph引入了另外一個概念PG,PG是Place Group即放置組,可以簡單理解為一個裝載object的容器,object將映射到PG中,PG最終會調度到某個具體的OSD上,因此CRUSH由object調度轉為PG的調度,而PG的數量是相對固定的,因此集群分布時調度相對沒有那么繁重,同時,當某個OSD異常時,CRUSH調度算法只需將其上的PG調度至其他OSD上(而不是將其上的object進行調度)。Ceph的整個數據調度寫入流程如下圖:

  • 一個文件將會切割為多個object(如1G文件每個object為4M將切割為256個),每個object會由一個由innode(ino)和object編號(ono)組成oid,即object id,oid是真個集群唯一,唯一標識object對象;
  • 針對object id做hash並做取模運算,從而獲取到pgid,即place group id,通過hash+mask獲取到PGs ID,PG是存儲object的容器;
  • Ceph通過CRUSH算法,將pgid進行運算,找到當前集群最適合存儲PG的OSD節點,如osd1和osd2(假設為2個副本);
  • PG的數據最終寫入到OSD節點,完成數據的寫入過程,當然這里會涉及到多副本,一份數據寫多副本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM