天天看點

5.1 Ceph概述

1 Ceph介紹

(1) 存儲根據其類型,可分為塊存儲,對象存儲和檔案存儲。在主流的分布式存儲技術中,HDFS/GPFS/GFS屬于檔案存儲,Swift屬于對象存儲,而
Ceph可支援塊存儲、對象存儲和檔案存儲,故稱為統一存儲。
(2) Ceph是一個分布式存儲系統,誕生于2004年,最早緻力于開發下一代高性能分布式檔案系統的項目。經過多年的發展之後,已得到衆多雲計算和
存儲廠商的支援,成為應用最廣泛的開源分布式存儲平台。随着雲計算的發展,ceph乘上了OpenStack的春風,進而成為了開源社群受關注較高的項目
之一。Ceph可以将多台伺服器組成一個超大叢集,把這些機器中的磁盤資源整合到一塊兒,形成一個大的資源池(PB級别),然後按需配置設定給應用使用。
(3) Ceph根據場景可分為對象存儲、塊裝置存儲和檔案存儲。Ceph相比其它分布式存儲技術,其優勢點在于,它不單是存儲,同時還充分利用了存儲節
點上的計算能力,在存儲每一個資料時,都會通過計算得出該資料存儲的位置,盡量将資料分布均衡。同時,由于采用了CRUSH、HASH等算法,使得它不
存在傳統的單點故障,且随着規模的擴大,性能并不會受到影響。      

ceph圖示:

​​

5.1 Ceph概述

​​

2 Ceph架構

圖示1:

​​

5.1 Ceph概述

​​​

圖示2:

​​​

5.1 Ceph概述

​​

(1) Ceph的最底層是RADOS(分布式對象存儲系統),它具有可靠、智能、分布式等特性,實作高可靠、高可拓展、高性能、高自動化等功能,并最終
存儲使用者資料。RADOS系統主要由兩部分組成,分别是OSD和Monitor。
(2) RADOS之上是LIBRADOS,LIBRADOS是一個庫,它允許應用程式通過通路該庫來與RADOS系統進行互動,支援多種程式設計語言,比如C、C++、Python
等。
(3) 基于LIBRADOS層開發的有三種接口,分别是RADOSGW、librbd和MDS。
(4) RADOSGW是一套基于目前流行的RESTFUL協定的網關,支援對象存儲,相容S3和Swift。
(5) librbd提供分布式的塊儲存設備接口,支援塊存儲。
(6) MDS提供相容POSIX的檔案系統,支援檔案存儲。      

3 Ceph的功能子產品

圖示1:

​​

5.1 Ceph概述

​​​

圖示2:

​​​

5.1 Ceph概述

​​

Ceph的核心元件包括Client用戶端、MON監控服務、MDS中繼資料服務、OSD存儲服務,各元件功能如下:
(1) Client用戶端
負責存儲協定的接入,節點負載均衡。
(2) MON監控服務
負責監控整個叢集,維護叢集的健康狀态,維護展示叢集狀态的各種圖表,如OSD Map、Monitor Map、PG Map和CRUSH Map,我們将這些Map統稱為
ClusterMap。
(3) MDS中繼資料服務
負責儲存檔案系統的中繼資料,管理目錄結構,适用于CephFS檔案存儲。
(4) OSD存儲服務
主要功能是存儲資料、複制資料、平衡資料、恢複資料,以及與其它OSD間進行心跳檢查等。一般情況下一塊硬碟對應一個OSD。      

4 Ceph的資源劃分

Ceph資源劃分示意圖:

​​

5.1 Ceph概述

​​

Ceph采用crush算法,在大規模叢集下,實作資料的快速、準确存放,同時能夠在硬體故障或擴充硬體裝置時,做到盡可能小的資料遷移,其原理如下:
(1) 當使用者要将資料存儲到Ceph叢集時,資料先被分割成多個object,(每個object一個object id,大小可設定,預設是4MB),object是Ceph存
儲的最小存儲單元。
(2) 由于object的數量很多,為了有效減少了Object到OSD的索引表、降低中繼資料的複雜度,使得寫入和讀取更加靈活,引入了pg(Placement Group
),PG用來管理object,每個object通過Hash,映射到某個pg中,一個pg可以包含多個object。
(3) Pg再通過CRUSH計算,映射到osd中。如果是三副本的,則每個pg都會映射到三個osd,保證了資料的備援。      

5 Ceph的資料寫入流程

(1) 資料通過負載均衡獲得節點動态IP位址;
(2) 通過塊、檔案、對象協定将檔案傳輸到節點上;
(3) 資料被分割成4M對象并取得對象ID;
(4) 對象ID通過HASH算法被配置設定到不同的PG;
(5) 不同的PG通過CRUSH算法被配置設定到不同的OSD      

6 Ceph的特點

(1) Ceph優點
1) Ceph支援對象存儲、塊存儲和檔案存儲服務,故稱為統一存儲。
2) 采用CRUSH算法,資料分布均衡,并行度高,不需要維護固定的中繼資料結構;
3) 資料具有強一緻,確定所有副本寫入完成才傳回确認,适合讀多寫少場景;
4) 去中心化,MDS之間地位相同,無固定的中心節點。

(2) Ceph存在的一些缺點
1) 去中心化的分布式解決方案,需要提前做好規劃設計,對技術團隊的要求能力比較高。
2) Ceph擴容時,由于其資料分布均衡的特性,會導緻整個存儲系統性能的下降。

(3) Ceph相比于其他存儲方案的優勢
1) CRUSH算法
Crush算法是ceph的兩大創新之一,簡單來說,Ceph摒棄了傳統的集中式存儲中繼資料尋址的方案,轉而使用CRUSH算法完成資料的尋址操作。CRUSH在一
緻性哈希基礎上很好的考慮了容災域的隔離,能夠實作各類負載的副本放置規則,例如跨機房、機架感覺等。Crush算法有相當強大的擴充性,理論上支援
數千個存儲節點。
2) 高可用
Ceph中的資料副本數量可以由管理者自行定義,并可以通過CRUSH算法指定副本的實體存儲位置以分隔故障域,支援資料強一緻性; Ceph可以忍受多種
故障場景并自動嘗試并行修複;Ceph支援多份強一緻性副本,副本能夠垮主機、機架、機房、資料中心存放。是以安全可靠。Ceph存儲節點可以自管理、
自動修複。無單點故障,容錯性強。
3) 高性能
因為是多個副本,是以在讀寫操作時候能夠做到高度并行化。理論上,節點越多,整個叢集的IOPS和吞吐量越高。另外一點Ceph用戶端讀寫資料直接與存
儲裝置(osd) 互動。在塊存儲和對象存儲中無需中繼資料伺服器。
4) 高擴充性
Ceph不同于Swift,用戶端所有的讀寫操作都要經過代理節點。一旦叢集并發量增大時,代理節點很容易成為單點瓶頸。Ceph本身并沒有主要節點,擴充
起來比較容易,并且理論上,它的性能會随着磁盤數量的增加而線性增長。Ceph擴容友善、容量大。能夠管理上千台伺服器、EB級的容量。
5) 特性豐富
Ceph支援三種調用接口,分别是對象存儲,塊存儲,檔案系統挂載,三種方式可以一同使用。在國内一些公司的雲環境中,通常會采用Ceph作openstack
的唯一後端存儲來提升資料轉發效率。Ceph是統一存儲,雖然它底層是一個分布式檔案系統,但由于在上層開發了支援對象和塊的接口,是以在開源存儲軟
件中,優勢很明顯。

(4) 使用
Ceph提供3種存儲方式分别是對象存儲,塊存儲和檔案系統,一般我們主要關心的還是塊存儲,推薦将虛拟機後端存儲從SAN過渡到Ceph。Ceph 現在是雲
計算、虛拟機部署的最火開源存儲解決方案,據統計大概有20%的OpenStack部署存儲用的都是Ceph的block storage。      

7 Ceph之RADOS說明

(1) RADOS (Reliable, Autonomic Distributed Object Store) 是Ceph的核心之一,作為Ceph分布式檔案系統的一個子項目,特别為Ceph
的需求設計,能夠在動态變化和異質結構的儲存設備機群之上提供一種穩定、可擴充、高性能的單一邏輯對象(Object)存儲接口和能夠實作節點的自适應
和自管理的存儲系統。在傳統分布式存儲架構中,存儲節點往往僅作為被動查詢對象來使用,随着存儲規模的增加,資料一緻性的管理會出現很多問題。而
新型的存儲架構傾向于将基本的塊配置設定決策和安全保證等操作交給存儲節點來做,然後通過提倡用戶端和存儲節點直接互動來簡化資料布局并減小io瓶頸。
(2) RADOS就是這樣一個可用于PB級規模資料存儲叢集的可伸縮的、可靠的對象存儲服務。它包含兩類節點:存儲節點、管理節點。它通過利用儲存設備
的智能性,将諸如一緻性資料通路、備援存儲、錯誤檢測、錯誤恢複分布到包含了上千存儲節點的叢集中,而不是僅僅依靠少數管理節點來處理。
(3) RADOS中的存儲節點被稱為OSD(object storage device),它可以僅由很普通的元件來構成,隻需要包含CPU、網卡、本地緩存和一個磁盤或
者RAID,并将傳統的塊存儲方式替換成面向對象的存儲。在PB級的存儲規模下,存儲系統一定是動态的,系統會随着新裝置的部署和舊裝置的淘汰而增長
或收縮,系統内的裝置會持續地崩潰和恢複,大量的資料被建立或者删除。
(4) RADOS通過 cluster map 來實作這些,cluster map 會被複制到叢集中的所有部分(存儲節點、控制節點,甚至是用戶端),并且通過怠惰地
傳播小增量更新而更新。Cluster map 中存儲了整個叢集的資料的分布以及成員。通過在每個存儲節點存儲完整的 Cluster map,儲存設備可以表現
的半自動化,通過peer-to-peer的方式(比如定義協定)來進行資料備份、更新,錯誤檢測、資料遷移等等操作。這無疑減輕了占少數的monitor
cluster(管理節點組成的叢集)的負擔。
(5) 一個RADOS系統包含大量的OSD和很少的用于管理OSD叢集成員的monitors。OSD的組成如簡介所說。而monitor是一些獨立的程序,以及少量的本
地存儲,monitor之間通過一緻性算法保證資料的一緻性。      

8 Ceph之Cluster Map

存儲節點叢集通過monitor叢集操作cluster map來實作成員的管理。cluster map描述了哪些OSD被包含進存儲叢集以及所有資料在存儲叢集中的分布。cluster map不僅存儲在monitor節點,它被複制到叢集中的每一個存儲節點,以及和叢集互動的client。當因為一些原因,比如裝置崩潰、資料
遷移等,cluster map的内容需要改變時,cluster map的版本号被增加,map的版本号可以使通信的雙方确認自己的map是否是最新的,版本舊的一
方會先将map更新成對方的map,然後才會進行後續操作。      

9 Ceph之Data Placement

(1) RADOS的存儲層次
RADOS中基本的存儲機關是對象,一般為2MB或4MB,當一個檔案要存入RADOS時,首先會被切分成大小固定的對象(最後一個對象大小可能不同),然後
将對象配置設定到一個PG(Placement Group)中,然後PG會複制幾份,會随機地派給不同的存儲節點。當新的存儲節點被加入叢集,會在已有資料中随機
抽取一部分資料遷移到新節點。這種機率平衡的分布方式可以保證裝置在潛在的高負載下正常工作。更重要的是,資料的分布過程僅需要做幾次随機映射,
不需要大型的集中式配置設定表。

(2) 對于每個層次的詳細說明
1) File
使用者需要存儲或者通路的檔案。
2) Object
RADOS的基本存儲單元。Object與上面提到的file的差別是,object的最大size由RADOS限定(通常為2MB或4MB),以便實作底層存儲的組織管理。
是以,當上層應用向RADOS存入size很大的file時,需要将file切分成統一大小的一系列object(最後一個的大小可以不同)進行存儲。
3) PG(Placement Group)
對object的存儲進行組織和位置映射。具體而言,一個PG負責組織若幹個object(可以為數千個甚至更多),但一個object隻能被映射到一個PG中,
即,PG和object之間是“一對多”映射關系。同時,一個PG會被映射到n個OSD上,而每個OSD上都會承載大量的PG,即,PG和OSD之間是“多對多”映射關
系。在實踐當中,n至少為3。一個OSD上的PG則可達到數百個。事實上,PG數量的設定牽扯到資料分布的均勻性問題。PG是一個邏輯概念,我們linux系
統中可以直接看到對象,但是無法直接看到PG。它在資料尋址時類似于資料庫中的索引,PG的數量是固定的,不會随着OSD的增加或者删除而改變,每個
對象都會固定映射進一個PG中,是以當我們要尋找一個對象時,隻需要先找到對象所屬的PG,然後周遊這個PG就可以了,無需周遊所有對象。而且在資料
遷移時,也是以PG作為基本機關進行遷移,ceph不會直接操作對象。
4) OSD
即object storage device,前文已經詳細介紹,此處不再展開。唯一需要說明的是,OSD的數量事實上也關系到系統的資料分布均勻性,是以其數量
不應太少。在實踐當中,至少也應該是數十上百個的量級才有助于Ceph系統的設計發揮其應有的優勢。

(3) 各層次之間的映射關系
1) file -> object
object的最大size是由RADOS配置的,當使用者要存儲一個file,需要将file切分成幾個object。
2) object -> PG
每個object都會被映射到一個PG中,然後以PG為機關進行備份以及進一步映射到具體的OSD上。
3) PG -> OSD
根據使用者設定的備援存儲的個數r,PG會最終存儲到r個OSD上,這個映射是通過一種僞随機的映射算法 CRUSH 來實作的,這個算法的特點是可以進行配
置。第一個osd節點即為主節點,其餘均為從節點。      

10 Ceph叢集維護

(1) 前面已經介紹了,由若幹個monitor共同負責整個RADOS叢集中所有OSD狀态的發現與記錄,并且共同形成cluster map的master版本,然後擴散
至全體OSD以及client。OSD使用Cluster map進行資料的維護,而client使用Cluster map進行資料的尋址。monitor并不主動輪詢各個OSD的目前
狀态。相反,OSD需要向monitor上報狀态資訊。常見的上報有兩種情況,一是新的OSD被加入叢集,二是某個OSD發現自身或者其他OSD發生異常。在收到
這些上報資訊後,monitor将更新cluster map資訊并加以擴散。

(2) Cluster map的實際内容包括
1) Epoch,即版本号
cluster map的epoch是一個單調遞增序列。epoch越大,則cluster map版本越新。是以,持有不同版本cluster map的OSD或client可以簡單地
通過比較epoch決定應該遵從誰手中的版本。而monitor手中必定有epoch最大、版本最新的cluster map。當任意兩方在通信時發現彼此epoch值不
同時,将預設先将cluster map同步至高版本一方的狀态,再進行後續操作。
2) 各個OSD的網絡位址
3) 各個OSD的狀态
OSD狀态的描述分為兩個次元,up或者down來表明OSD是否正常工作,in或者out來表明OSD是否在至少一個PG中。是以,對于任意一個OSD,共有四種如
下可能的狀态:
A、up且in   # 說明該OSD正常運作,且已經承載至少一個PG的資料。這是一個OSD的标準工作狀态。
B、up且out   # 說明該OSD正常運作,但并未承載任何PG,其中也沒有資料。一個新的OSD剛剛被加入Ceph叢集後,便會處于這一狀态。而一個出現故
障的OSD被修複後,重新加入Ceph叢集時,也是處于這一狀态。
C、down且in  # 說明該OSD發生異常,但仍然承載着至少一個PG,其中仍然存儲着資料。這種狀态下的OSD剛剛被發現存在異常,可能仍能恢複正常,
也可能會徹底無法工作。
D、down且out # 說明該OSD已經徹底發生故障,且已經不再承載任何PG。
4) CRUSH算法配置參數
表明了Ceph叢集的實體層級關系(cluster hierarchy),位置映射規則(placement rules)。
根據cluster map的定義可以看出,其版本變化通常隻會由"3)"和"4)"兩項資訊的變化觸發。而這兩者相比,"3"發生變化的機率更高一些。

(3) 一個新的OSD上線後,首先根據配置資訊與monitor通信。Monitor将其加入cluster map,并設定為up且out狀态,再将最新版本的cluster map
發給這個新OSD。收到monitor發來的cluster map之後,這個新OSD計算出自己所承載的PG(為簡化讨論,此處我們假定這個新的OSD開始隻承載一個
PG),以及和自己承載同一個PG的其他OSD。然後,新OSD将與這些OSD取得聯系。如果這個PG目前處于降級狀态(即承載該PG的OSD個數少于正常值,如正
常應該是3個,此時隻有2個或1個。這種情況通常是OSD故障所緻),則其他OSD将把這個PG内的所有對象和中繼資料複制給新OSD。資料複制完成後,新OSD
被置為up且in狀态。而cluster map内容也将據此更新。這事實上是一個自動化的failure recovery過程。當然,即便沒有新的OSD加入,降級的PG也
将計算出其他OSD實作failure recovery。

(4) 如果該PG目前一切正常,則這個新OSD将替換掉現有OSD中的一個(PG内将重新選出Primary OSD),并承擔其資料。在資料複制完成後,新OSD被
置為up且in狀态,而被替換的OSD将退出該PG(但狀态通常仍然為up且in,因為還要承載其他PG)。而cluster map内容也将據此更新。這事實上是一
個自動化的資料re-balancing過程。如果一個OSD發現和自己共同承載一個PG的另一個OSD無法聯通,則會将這一情況上報monitor。此外,如果一個OSD
deamon發現自身工作狀态異常,也将把異常情況主動上報給monitor。在上述情況下,monitor将把出現問題的OSD的狀态設為down且in。如果超過某一
預訂時間期限,該OSD仍然無法恢複正常,則其狀态将被設定為down且out。反之,如果該OSD能夠恢複正常,則其狀态會恢複為up且in。在上述這些狀态
變化發生之後,monitor都将更新cluster map并進行擴散。這事實上是自動化的failure detection過程。

(5) 對于一個RADOS叢集而言,即便由數千個甚至更多OSD組成,cluster map的資料結構大小也并不驚人。同時,cluster map的狀态更新并不會頻繁
發生。即便如此,Ceph依然對cluster map資訊的擴散機制進行了優化,以便減輕相關計算和通信壓力,首先,cluster map資訊是以增量形式擴散的。
如果任意一次通信的雙方發現其epoch不一緻,則版本更新的一方将把二者所擁有的cluster map的差異發送給另外一方。其次,cluster map資訊是以
異步且lazy的形式擴散的。也即,monitor并不會在每一次cluster map版本更新後都将新版本廣播至全體OSD,而是在有OSD向自己上報資訊時,将更
新回複給對方。類似的,各個OSD也是在和其他OSD通信時,将更新發送給版本低于自己的對方。

(6) 基于上述機制,Ceph避免了由于cluster map版本更新而引起的廣播風暴。這雖然是一種異步且lazy的機制,但對于一個由n個OSD組成的Ceph集
群,任何一次版本更新能夠在O(log(n))時間複雜度内擴散到叢集中的任何一個OSD上。

(7) 一個可能被問到的問題
既然這是一種異步和lazy的擴散機制,則在版本擴散過程中,系統必定出現各個OSD看到的cluster map不一緻的情況,這是否會導緻問題?答案是:不
會。事實上,如果一個client和它要通路的PG内部的各個OSD看到的cluster map狀态一緻,則通路操作就可以正确進行。而如果這個client或者PG中的
某個OSD和其他幾方的cluster map不一緻,則根據Ceph的機制設計,這幾方将首先同步cluster map至最新狀态,并進行必要的資料re-balancing操
作,然後即可繼續正常通路。      

11 Ceph基本程序說明

(1) Ceph主要有四個基本程序
1) OSD
用于叢集中所有資料與對象的存儲。處理叢集資料的複制、恢複、回填、再均衡。并向其他osd守護程序發送心跳,然後向Mon提供一些監控資訊。當Ceph
存儲叢集設定資料有兩個副本時(一共存兩份),則至少需要兩個OSD守護程序即兩個OSD節點,叢集才能達到active+clean狀态。
2) MDS(可選)
為Ceph檔案系統提供中繼資料計算、緩存與同步。在ceph中,中繼資料也是存儲在osd節點中的,mds類似于中繼資料的代理緩存伺服器。MDS程序并不是必須的程序,隻有需要使用CEPHFS時,才需要配置MDS節點。
3) Monitor
監控整個叢集Cluster map的狀态,維護叢集的cluster MAP二進制表,保證叢集資料的一緻性。ClusterMAP描述了對象塊存儲的實體位置,以及一個
将裝置聚合到實體位置的桶清單。
4) MGR
MGR是Ceph L版本新增加的元件,主要作用是分擔和擴充monitor的部分功能,減輕monitor的負擔。建議每台monitor節點都部署一個mgr,以實作相
同級别的高可用。

(2) 程序說明
1) OSD
通常來說,一塊磁盤和該磁盤對應的守護程序稱為一個OSD。守護程序的作用是從該磁盤讀取和寫入資料。該磁盤可以是一個硬碟或者SSD盤或者RAID,總
之是一個邏輯磁盤。如果一個節點隻有一個守護程序和對應的磁盤,那麼該OSD就成了一個節點。通常一個節點有多個OSD守護程序和多個磁盤,是以通常
來說OSD不是一個節點。
2) MDS(可選)
MDS是可選的,隻有需要使用Ceph FS的時候才需要配置MDS節點。在Ceph中,中繼資料也是存放在OSD中的,MDS隻相當于中繼資料的緩存伺服器。
3) Monitor
Ceph要求必須是奇數個Monitor監控節點,一般建議至少是3個(如果是自己私下測試玩玩的話,可以是1個,但是生産環境絕不建議1個)用于維護和監
控整個叢集的狀态,每個Monitor都有一個Cluster Map,隻要有這個Map,就能夠清楚知道每個對象存儲在什麼位置了。用戶端會先tcp連接配接Monitor,
從中擷取Cluster Map,并在用戶端進行計算,當知道對象的位置後,再直接與OSD通信(去中心化的思想)。OSD節點平常會向Monitor節點發送簡單
心跳,隻有當添加、删除或者出現異常狀況時,才會自動上報資訊給Monitor。
4) MGR
主要作用是分擔和擴充monitor的部分功能,減輕monitor的負擔。

(3) 資料一緻性
在Ceph中,如果要寫資料,隻能向主OSD寫,然後再由主OSD向從OSD同步地寫,隻有當從OSD傳回結果給主OSD後,主OSD才會向用戶端報告寫入完成的
消息。如果要讀資料,不會使用讀寫分離,而是也需要先向主OSD發請求,以保證資料的強一緻性。      

12 Ceph三種存儲類型

(1) 塊存儲 (RBD)
1) 優點
通過Raid與LVM等手段,對資料提供了保護;多塊廉價的硬碟組合起來,提高容量;多塊磁盤組合出來的邏輯盤,存儲速度較快
2) 缺點
采用SAN架構組網時,光纖交換機,造價成本高,不支援共享存儲
3) 應用場景
docker容器、虛拟機磁盤存儲配置設定;
4) 典型裝置
硬碟、Raid

(2) 檔案存儲(CephFS)
1) 優點
支援共享存儲
2) 缺點
需要經過作業系統處理再轉為塊存儲,讀寫速率低,傳輸速率慢
3) 應用場景
檔案共享,多台伺服器共享使用同一個存儲
4) 典型裝置
FTP、NFS,其它有目錄結構的檔案存儲

(3) 對象存儲(Object 适合更新變動較少的資料)
1) 優點
具備塊存儲的讀寫性能和檔案存儲的共享特性
2) 缺點
作業系統不能直接通路,隻能通過應用程式級别的API通路
3) 應用場景
圖檔存儲,視訊存儲
4) 典型裝置
阿裡雲OSS,騰訊雲COS,aws雲S3      

13 小結

(1) Ceph核心概念
1) RADOS
全稱Reliable Autonomic Distributed Object Store,即可靠的、自動化的、分布式對象存儲系統。RADOS是Ceph叢集的精華,使用者實作資料
配置設定、Failover等叢集操作。
2) Librados
Rados提供庫,因為RADOS是協定很難直接通路,是以上層的RBD、RGW和CephFS都是通過librados通路的,目前提供PHP、Ruby、Java、Python、
C和C++支援。
3) Crush
Crush算法是Ceph的兩大創新之一,通過Crush算法的尋址操作,Ceph得以摒棄了傳統的集中式存儲中繼資料尋址方案。而Crush算法在一緻性哈希基礎
上很好的考慮了容災域的隔離,使得Ceph能夠實作各類負載的副本放置規則,例如跨機房、機架感覺等。同時,Crush算法有相當強大的擴充性,理論
上可以支援數千個存儲節點,這為Ceph在大規模雲環境中的應用提供了先天的便利。
4) Pool
Pool是存儲對象的邏輯分區,它規定了資料備援的類型和對應的副本分布政策,支援兩種類型,副本(replicated)和 糾删碼( Erasure Code)。
5) PG
PG(placement group)是一個放置政策組,它是對象的集合,該集合裡的所有對象都具有相同的放置政策,簡單點說就是相同PG内的對象都會放到
相同的硬碟上,PG是ceph的邏輯概念,服務端資料均衡和恢複的最小粒度就是PG,一個PG包含多個OSD。引入PG這一層其實是為了更好的配置設定資料和
定位資料。
6) Object
簡單來說塊存儲讀寫快,不利于共享,檔案存儲讀寫慢,利于共享。能否弄一個讀寫快,利于共享的出來呢。于是就有了對象存儲。最底層的存儲單元,包
含中繼資料和原始資料。

(2) Ceph核心元件
1) OSD
OSD是負責實體存儲的程序,一般配置成和磁盤一 一對應,一塊磁盤啟動一個OSD程序。主要功能是存儲資料、複制資料、平衡資料、恢複資料,以及與其
它OSD間進行心跳檢查,負責響應用戶端請求傳回具體資料的程序等。
2) pool、object、PG、OSD之間的關系
一個Pool裡有很多PG。
一個PG裡包含一堆對象,一個對象隻能屬于一個PG。
PG有主從之分,一個PG分布在不同的OSD上(針對三副本類型)。
3) Monitor
一個Ceph叢集需要多個Monitor組成的小叢集,它們通過Paxos同步資料,用來儲存OSD的中繼資料。負責堅實整個Ceph叢集運作的Map視圖(如OSD Map
、Monitor Map、PG Map和CRUSH Map),維護叢集的健康狀态,維護展示叢集狀态的各種圖表,管理叢集用戶端認證與授權。
4) MDS
MDS全稱Ceph Metadata Server,是CephFS服務依賴的中繼資料服務。負責儲存檔案系統的中繼資料,管理目錄結構。對象存儲和塊裝置存儲不需要元數
據服務。
5) Mgr
ceph 官方開發了 ceph-mgr,主要目标實作 ceph 叢集的管理,為外界提供統一的入口。例如cephmetrics、zabbix、calamari、promethus。
6) RGW
RGW全稱RADOS gateway,是Ceph對外提供的對象存儲服務,接口與S3和Swift相容。
7) Admin
Ceph常用管理接口通常都是指令行工具,如rados、ceph、rbd等指令,另外Ceph還有可以有一個專用的管理節點,在此節點上面部署專用的管理工具
來實作近乎叢集的一些管理工作,如叢集部署,叢集元件管理等。      

pool、object、pg、osd的關系圖:

​​

5.1 Ceph概述

​​