一、架構
Ceph在一個統一的系統中獨特地提供對象,塊和文件存儲。 Ceph高度可靠,易於管理且免費。 Ceph的強大功能可以改變您公司的IT基礎架構以及管理大量數據的能力。 Ceph提供了非凡的可擴展性 - 成千上萬的客戶端訪問數PB到數十億的數據。 Ceph節點利用商用硬件和智能守護進程,Ceph存儲集群可容納大量節點,這些節點相互通信以動態地復制和重新分配數據。
二、RADOS-ceph存儲集群
Ceph提供基於RADOS的無限可擴展Ceph存儲集群,您可以在RADOS中閱讀 - 一個可擴展,可靠的存儲服務,用於PB級存儲集群。(https://ceph.com/wp-content/uploads/2016/08/weil-rados-pdsw07.pdf)
Ceph存儲集群由兩種類型的守護進程組成:
Ceph Monitor維護集群映射的主副本。 Ceph監視器集群可確保監視器守護程序失敗時的高可用性。 存儲群集客戶端從Ceph Monitor檢索群集映射的副本。
Ceph OSD守護進程檢查自己的狀態和其他OSD的狀態,並向監視器報告。
存儲集群客戶端和每個Ceph OSD守護程序使用CRUSH算法有效地計算有關數據位置的信息,而不必依賴於中央查找表。 Ceph的高級功能包括通過librados為Ceph存儲集群提供本機接口,以及在librados之上構建的許多服務接口。
三、存儲數據過程
Ceph存儲集群從Ceph客戶端接收數據 - 無論是通過Ceph塊設備,Ceph對象存儲,Ceph文件系統還是使用librados創建的自定義實現 - 它都將數據存儲為對象。 每個對象對應於文件系統中的文件,該文件存儲在對象存儲設備上。 Ceph OSD Daemons處理存儲磁盤上的讀/寫操作。
Ceph OSD守護進程將所有數據作為對象存儲在平面命名空間中(例如,沒有目錄層次結構)。 對象具有標識符,二進制數據和由一組名稱/值對組成的元數據。 語義完全取決於Ceph客戶端。 例如,CephFS使用元數據來存儲文件屬性,例如文件所有者,創建日期,上次修改日期等。
注意:對象ID在整個群集中是唯一的,而不僅僅是本地文件系統。
四、可擴展性和高可用性
在傳統架構中,客戶端與集中式組件(例如,網關,代理,API,外觀等)通信,該集中式組件充當復雜子系統的單個入口點。 這對性能和可擴展性施加了限制,同時引入單點故障(即,如果集中式組件發生故障,整個系統也會出現故障)。
Ceph消除了集中式網關,使客戶端能夠直接與Ceph OSD Daemons進行交互。 Ceph OSD Daemons在其他Ceph節點上創建對象副本,以確保數據安全性和高可用性。 Ceph還使用一組監視器來確保高可用性。 為了消除集中化,Ceph使用一種名為CRUSH的算法。
1.CRUSH 介紹
Ceph客戶端和Ceph OSD守護進程都使用CRUSH算法有效地計算有關對象位置的信息,而不必依賴於中央查找表。 與舊方法相比,CRUSH提供了更好的數據管理機制,並通過將工作干凈地分發到群集中的所有客戶端和OSD守護進程來實現大規模擴展。 CRUSH使用智能數據復制來確保彈性,這更適合超大規模存儲。 以下部分提供了有關CRUSH如何工作的其他詳細信息。 有關CRUSH的詳細討論,請參閱CRUSH - 受控,可擴展,分散的復制數據放置(https://ceph.com/wp-content/uploads/2016/08/weil-crush-sc06.pdf)。
2.集群map
Ceph依賴於Ceph客戶端和Ceph OSD守護進程,他們了解集群拓撲結構,其中包括5個映射,統稱為“集群映射”:
監視器映射:包含集群 fsid,每個監視器的位置,名稱地址和端口。它還指示當前時間點,創建映射的時間以及上次更改的時間。要查看監視器映射,請執行ceph mon dump。
OSD映射:包含集群fsid,創建映射的時間和上次修改映射的時間,包括池列表,副本大小,PG數量,OSD列表及其狀態(例如up,in)。要查看OSD映射,請執行ceph osd dump。
PG 映射:包含PG版本,時間戳,最后一個OSD映射時間點,完整比率以及每個放置組的詳細信息,例如PG ID,Up Set,Acting Set,PG的狀態(例如,active + clean),以及每個池的數據使用情況統計信息。
CRUSH 映射:包含存儲設備的列表,故障域層次結構(例如,設備,主機,機架,行,房間等),以及用於在存儲數據時遍歷層次結構的規則。要查看CRUSH映射,請執行ceph osd getcrushmap -o {filename};然后,通過執行crushtool -d {comp-crushmap-filename} -o {decomp-crushmap-filename}對其進行反編譯。您可以在文本編輯器中或使用cat查看反編譯的映射。
MDS 映射:包含當前MDS映射時間點,創建映射的時間以及上次更改時間。它還包含用於存儲元數據的池,元數據服務器列表以及啟動和運行的元數據服務器。要查看MDS映射,請執行ceph fs dump。
每個映射都保持其運行狀態變化的迭代歷史。 Ceph監視器維護集群映射的主副本,包括集群成員,狀態,更改以及Ceph存儲集群的整體運行狀況。
3.高可用監視器
在Ceph客戶端可以讀取或寫入數據之前,他們必須聯系Ceph Monitor以獲取群集映射的最新副本。 Ceph存儲集群可以使用單個監視器進行操作; 然而,這引入了單點故障(即,如果監視器發生故障,Ceph客戶端無法讀取或寫入數據)。
為了增加可靠性和容錯能力,Ceph支持一組監視器。 在監視器群集中,延遲和其他故障可能導致一個或多個監視器落后於群集的當前狀態。 因此,Ceph必須在各種監視器實例之間就集群狀態達成一致。 Ceph總是使用大多數監視器(例如,1,2:3,3:5,4:6等)和Paxos算法在監視器之間建立關於群集當前狀態的一致意見。
有關配置監視器的詳細信息,請參閱“監視器配置參考”(https://docs.ceph.com/docs/master/rados/configuration/mon-config-ref)。
4.高可用性認證
為了識別用戶並防止中間人攻擊,Ceph提供了cephx身份驗證系統來驗證用戶和守護進程。
Cephx使用共享密鑰進行身份驗證,這意味着客戶端和監控集群都擁有客戶端密鑰的副本。認證協議使得雙方能夠彼此證明他們具有密鑰的副本而不實際揭示密鑰。這提供了相互身份驗證,這意味着群集確保用戶擁有密鑰,並且用戶確信群集具有密鑰的副本。
Ceph的一個關鍵可擴展性功能是避免Ceph對象存儲的集中接口,這意味着Ceph客戶端必須能夠直接與OSD交互。為了保護數據,Ceph提供了cephx身份驗證系統,該系統對運行Ceph客戶端的用戶進行身份驗證。 cephx協議以類似於Kerberos的行為運行。
用戶/ actor調用Ceph客戶端來聯系監視器。與Kerberos不同,每個監視器都可以對用戶進行身份驗證並分發密鑰,因此使用cephx時沒有單點故障或瓶頸。監視器返回一個類似於Kerberos票證的驗證數據結構,該票證包含用於獲取Ceph服務的會話密鑰。此會話密鑰本身使用用戶的永久密鑰加密,因此只有用戶可以從Ceph監視器請求服務。然后,客戶端使用會話密鑰從監視器請求其所需的服務,並且監視器向客戶端提供將向客戶端驗證實際處理數據的OSD的票證。 Ceph監視器和OSD共享一個秘密,因此客戶端可以使用監視器提供的票證與群集中的任何OSD或元數據服務器。與Kerberos一樣,cephx票證到期,因此攻擊者無法使用過期獲得的過期票證或會話密鑰。這種形式的身份驗證將阻止訪問通信介質的攻擊者在其他用戶的身份下創建虛假消息或者更改其他用戶的合法消息,只要用戶的密鑰在到期之前未泄露即可。
注意:client.admin用戶必須以安全的方式向用戶提供用戶標識和密鑰。
要通過監視器進行身份驗證,客戶端會將用戶名傳遞給監視器,監視器會生成會話密鑰並使用與用戶名關聯的密鑰對其進行加密。 然后,監視器將加密的票證發送回客戶端。 然后,客戶端用共享密鑰解密有效載荷以檢索會話密鑰。 會話密鑰標識當前會話的用戶。 然后,客戶端代表由會話密鑰簽名的用戶請求票證。 監視器生成票證,使用用戶的密鑰對其進行加密,然后將其發送回客戶端。 客戶端對票證進行解密,並使用它對整個群集中的OSD和元數據服務器的請求進行簽名。
cephx協議驗證客戶端計算機和Ceph服務器之間正在進行的通信。 在初始身份驗證之后,客戶端和服務器之間發送的每條消息都使用監視器,OSD和元數據服務器可以使用其共享密鑰驗證的故障單進行簽名。
此身份驗證提供的保護是在Ceph客戶端和Ceph服務器主機之間。 身份驗證不會超出Ceph客戶端。 如果用戶從遠程主機訪問Ceph客戶端,則Ceph身份驗證不會應用於用戶主機和客戶端主機之間的連接。
有關配置詳細信息,請參閱Cephx配置指南(https://docs.ceph.com/docs/master/rados/configuration/auth-config-ref)。 有關用戶管理的詳細信息,請參閱用戶管理(https://docs.ceph.com/docs/master/rados/operations/user-management)
5.SMART DAEMONS可以實現超級高效
在許多集群體系結構中,集群成員資格的主要目的是使集中式接口知道它可以訪問哪些節點。 然后,集中式接口通過雙重調度向客戶端提供服務 - 這是PB級到EB級的巨大瓶頸。
Ceph消除了瓶頸:Ceph的OSD守護進程和Ceph客戶端是群集感知的。 與Ceph客戶端一樣,每個Ceph OSD守護進程都知道集群中的其他Ceph OSD守護進程。 這使得Ceph OSD守護進程能夠與其他Ceph OSD守護進程和Ceph監視器直接交互。 此外,它使Ceph客戶端能夠直接與Ceph OSD守護進程交互。
Ceph客戶端,Ceph監視器和Ceph OSD守護進程相互交互的能力意味着Ceph OSD守護進程可以利用Ceph節點的CPU和RAM輕松執行會使中央服務器陷入困境的任務。 利用此計算能力的能力帶來幾個主要好處:
直接OSD服務客戶端:由於任何網絡設備都可以支持並發連接數限制,因此集中式系統在高規模時具有較低的物理限制。通過使Ceph客戶端直接聯系Ceph OSD守護進程,Ceph可同時提高性能和總系統容量,同時消除單點故障。 Ceph客戶端可以在需要時維護會話,並使用特定的Ceph OSD守護進程而不是集中式服務器。
(1) OSD成員資格和狀態:Ceph OSD守護進程加入群集並報告其狀態。在最低級別,Ceph OSD守護程序狀態向上或向下,反映它是否正在運行並能夠為Ceph客戶端請求提供服務。如果Ceph OSD守護程序關閉並且在Ceph存儲群集中,此狀態可能表示Ceph OSD守護程序失敗。如果Ceph OSD守護進程未運行(例如,它崩潰),Ceph OSD守護進程無法通知Ceph Monitor它已關閉。 OSD定期向Ceph監視器發送消息(MPGStats預發光,新的MOSDBeacon發光)。如果Ceph Monitor在一段可配置的時間后沒有看到該消息,那么它會將OSD標記為關閉。但是,這種機制是一種故障保護。通常,Ceph OSD守護進程將確定相鄰OSD是否已關閉並將其報告給Ceph Monitor。這確保了Ceph Monitors是輕量級的過程。有關其他詳細信息,請參閱監視OSD和心跳。
(2) 數據清理:作為維護數據一致性和清潔度的一部分,Ceph OSD守護進程可以清理放置組中的對象。也就是說,Ceph OSD守護進程可以將一個放置組中的對象元數據與存儲在其他OSD上的放置組中的副本進行比較。清理(通常每天執行)可以捕獲錯誤或文件系統錯誤。 Ceph OSD守護進程還通過逐位比較對象中的數據來執行更深層次的清理。深度擦洗(通常每周執行一次)發現驅動器上的壞扇區在輕度擦洗中不明顯。有關配置清理的詳細信息,請參閱數據清理。
(3) 復制:與Ceph客戶端一樣,Ceph OSD守護進程使用CRUSH算法,但Ceph OSD守護進程使用它來計算應存儲對象副本的位置(以及重新平衡)。在典型的寫入方案中,客戶端使用CRUSH算法計算存儲對象的位置,將對象映射到池和放置組,然后查看CRUSH映射以標識放置組的主OSD。
(4) 客戶端將對象寫入主OSD中的標識的放置組。然后,具有其自己的CRUSH映射副本的主OSD識別用於復制目的的二級和三級OSD,並將該對象復制到二級和三級OSD中的適當放置組(與另外的副本一樣多的OSD),並響應客戶端確認對象已成功存儲后。
憑借執行數據復制的能力,Ceph OSD Daemons可以減輕Ceph客戶的負擔,同時確保高數據可用性和數據安全性。
6.動態集群管理
在可伸縮性和高可用性部分,我們解釋了Ceph如何使用CRUSH,集群感知和智能守護進程來擴展和維護高可用性。 Ceph設計的關鍵是自主,自我修復和智能的Ceph OSD守護進程。 讓我們深入了解CRUSH如何使現代雲存儲基礎架構能夠放置數據,重新平衡集群並動態恢復故障。
關於池
Ceph存儲系統支持“池”的概念,“池”是用於存儲對象的邏輯分區。
Ceph客戶端從Ceph監視器檢索集群映射,並將對象寫入池。 池的大小或副本數量,CRUSH規則和放置組的數量決定了Ceph將如何放置數據。
池至少設置以下參數:
所有權/對象訪問權限
放置組數量
CRUSH使用規則。
有關詳細信息,請參閱設置池值(https://docs.ceph.com/docs/master/rados/operations/pools#set-pool-values)
映射PGS 到 OSDS
每個池都有許多放置組。 CRUSH動態地將PG映射到OSD。 當Ceph客戶端存儲對象時,CRUSH會將每個對象映射到一個放置組。
將對象映射到放置組會在Ceph OSD守護進程和Ceph客戶端之間創建一個間接層。 Ceph存儲集群必須能夠在動態存儲對象的地方增長(或收縮)和重新平衡。 如果Ceph客戶端“知道”哪個Ceph OSD守護進程具有哪個對象,那么這將在Ceph客戶端和Ceph OSD守護進程之間產生緊密耦合。 相反,CRUSH算法將每個對象映射到一個放置組,然后將每個放置組映射到一個或多個Ceph OSD守護進程。 這個間接層允許Ceph在新的Ceph OSD守護進程和基礎OSD設備聯機時動態重新平衡。 下圖描述了CRUSH如何將對象映射到放置組,以及將放置組映射到OSD。
通過群集映射和CRUSH算法的副本,客戶端可以精確計算在讀取或寫入特定對象時要使用的OSD。
回頭參考Smart Daemons Enable Hyperscale中的圖表,我們沒有專門命名Ceph OSD守護進程(例如,osd.0,osd.1等),而是將它們稱為Primary,Secondary等。按照慣例,主要是代理集中的第一個OSD,負責協調每個放置組的對等過程,它作為主要用戶,並且是唯一可以接受客戶端發起的對象寫入的OSD。給定位置組,它充當主要位置。
當一系列OSD負責放置組,即該系列OSD時,我們將它們稱為代理集。代理集可以指當前負責放置組的Ceph OSD守護進程,或者是指某個時代的特定放置組負責的Ceph OSD守護進程。
作為代理集的一部分的Ceph OSD守護進程可能並不總是正常運行。當代理集中的OSD啟動時,它是Up Set的一部分。 Up Set是一個重要的區別,因為當OSD失敗時,Ceph可以將PG重新映射到其他Ceph OSD守護進程。

有關配置清理的詳細信息,請參閱數據清理。(https://docs.ceph.com/docs/master/rados/configuration/osd-config-ref#scrubbing)
例如,創建一個擦除編碼池以使用五個OSD(K + M = 5)並維持其中兩個(M = 2)的丟失。
閱讀和編寫已編碼的CHUNKS
當包含ABCDEFGHI的對象NYAN被寫入池中時,擦除編碼功能僅通過將內容分成三個來將內容分成三個數據塊:第一個包含ABC,第二個DEF和最后一個GHI。如果內容長度不是K的倍數,則內容將被填充。該函數還創建兩個編碼塊:第四個用YXY,第五個用QGC。每個塊存儲在動作集中的OSD中。塊存儲在具有相同名稱(NYAN)但位於不同OSD上的對象中。必須保留創建塊的順序,並將其存儲為對象的屬性(shard_t),以及其名稱。塊1包含ABC並存儲在OSD5上,而塊4包含YXY並存儲在OSD3上。

當從擦除編碼池中讀取對象NYAN時,解碼功能讀取三個塊:包含ABC的塊1,包含GHI的塊3和包含YXY的塊4。 然后,它重建對象ABCDEFGHI的原始內容。 解碼功能被通知組塊2和5丟失(它們被稱為“擦除”)。 由於OSD4不在,因此無法讀取塊5。 一旦讀取了三個塊,就可以調用解碼功能:OSD2是最慢的,並且沒有考慮其塊。
在下圖中,創建了一個刪除編碼的放置組,其中K = 2 + M = 1,並由三個OSD支持,兩個用於K,一個用於M.放置組的作用集由OSD 1,OSD組成 對象已被編碼並存儲在OSD中:塊D1v1(即數據塊號1,版本1)在OSD 1上,D2v1在OSD 2上和C1v1上(即編碼塊號1,版本1) 在OSD上。每個OSD上的放置組登錄是相同的(即1,1,對於紀元1,版本1)。

OSD 1是主要的並且從客戶端接收WRITE FULL,這意味着有效載荷將完全替換對象而不是覆蓋其中的一部分。創建對象的版本2(v2)以覆蓋版本1(v1)。 OSD 1將有效載荷編碼為三個塊:D1v2(即數據塊編號1版本2)將在OSD 1上,在OSD 2上為D2v2,在OSD 3上為C1v2(即編碼塊編號1版本2)。每個塊將被發送到目標OSD,包括主OSD,除了處理寫操作和維護放置組日志的權威版本之外,還負責存儲塊。當OSD收到指示其寫入塊的消息時,它還會在放置組日志中創建新條目以反映更改。例如,一旦OSD 3存儲C1v2,它就將條目1,2(即時期1,版本2)添加到其日志中。由於OSD以異步方式工作,因此某些塊可能仍在運行(例如D2v2),而其他塊則在磁盤上(例如C1v1和D1v1)被確認。
如果一切順利,則在動作集中的每個OSD上確認塊,並且日志的last_complete指針可以從1,1移動到1,2。

最后,可以刪除用於存儲先前版本對象的塊的文件:OSD 1上的D1v1,OSD 2上的D2v1和OSD 3上的C1v1。
但事故發生了。 如果OSD 1在D2v2仍處於運行狀態時關閉,則對象的版本2將被部分寫入:OSD 3有一個塊,但這還不足以恢復。 它丟失了兩個塊:D1v2和D2v2以及擦除編碼參數K = 2,M = 1要求至少有兩個塊可用於重建第三個塊。 OSD 4成為新的主要內容,並發現last_complete日志條目(即,此條目之前的所有對象在前一個動作集中的所有OSD上都可用)是1,1並且將成為新權威日志的頭部。
在OSD 3上找到的日志條目1,2與OSD 4提供的新權威日志不同:它被丟棄並且包含C1v2塊的文件被刪除。 在擦除期間利用擦除編碼庫的解碼功能重建D1v1塊並將其存儲在新的主OSD4上。

有關其他詳細信息,請參閱緩存分層。(https://docs.ceph.com/docs/master/rados/operations/cache-tiering)
在寫入時,Ceph Classes可以調用本機或類方法,對入站數據執行任何一系列操作,並生成Ceph將以原子方式應用的結果寫入事務。
在讀取時,Ceph Classes可以調用本機或類方法,對出站數據執行任何一系列操作並將數據返回給客戶端。
用於呈現特定大小和寬高比的圖片的內容管理系統的Ceph類可以采用入站位圖圖像,將其裁剪為特定寬高比,調整其大小並嵌入不可見的版權或水印以幫助保護知識產權; 然后,將生成的位圖圖像保存到對象庫。
Ceph存儲集群是一個動態的生物有機體。 然而,許多存儲設備沒有充分利用典型商品服務器的CPU和RAM,Ceph確實如此。 從心跳到對等,再到重新平衡集群或從故障中恢復,Ceph從客戶端(以及Ceph架構中不存在的集中式網關)卸載工作,並使用OSD的計算能力來執行工作。 在參考硬件建議(https://docs.ceph.com/docs/master/start/hardware-recommendations)和網絡配置參考(https://docs.ceph.com/docs/master/rados/configuration/network-config-ref)時,要了解上述概念,以了解Ceph如何利用計算資源。

本地協議和庫
現代應用程序需要具有異步通信功能的簡單對象存儲接口。 Ceph存儲集群提供了一個具有異步通信功能的簡單對象存儲接口。 該接口提供對整個群集中對象的直接並行訪問。
池操作
快照和寫時復制克隆
讀/寫對象 - 創建或刪除 - 整個對象或字節范圍 - 追加或截斷
創建/設置/獲取/刪除XATTR
創建/設置/獲取/刪除鍵/值對
復合運算和雙重ack語義
對象類
對象手表/通知
客戶端可以向對象注冊持久興趣並保持與主OSD的會話打開。 客戶端可以向所有觀察者發送通知消息和有效負載,並在觀察者收到通知時接收通知。 這使客戶端能夠將任何對象用作同步/通信通道。

數據條帶化
存儲設備具有吞吐量限制,這會影響性能和可伸縮性。因此,存儲系統通常支持在多個存儲設備上條帶化存儲連續的信息 - 以提高吞吐量和性能。最常見的數據條帶化形式來自RAID。與Ceph條帶化最相似的RAID類型是RAID 0或“條帶卷”。 Ceph的條帶化提供了RAID 0條帶化的吞吐量,n路RAID鏡像的可靠性和更快的恢復。
Ceph提供三種類型的客戶端:Ceph Block Device,Ceph Filesystem和Ceph Object Storage。 Ceph客戶端將其數據從其提供給其用戶的表示格式(塊設備映像,RESTful對象,CephFS文件系統目錄)轉換為對象,以便存儲在Ceph存儲集群中。
提示Ceph存儲集群中Ceph存儲的對象不是條帶化的。 Ceph對象存儲,Ceph塊設備和Ceph文件系統將其數據分散到多個Ceph存儲集群對象上。 Ceph通過librados直接寫入Ceph存儲集群的客戶端必須為自己執行條帶化(並行I / O)以獲得這些好處。
最簡單的Ceph條帶化格式涉及1個對象的條帶計數。 Ceph客戶端將條帶單元寫入Ceph存儲集群對象,直到對象達到其最大容量,然后為其他數據條帶創建另一個對象。對於小塊設備映像,S3或Swift對象和CephFS文件,最簡單的條帶化形式可能就足夠了。但是,這種簡單的形式並沒有最大限度地利用Ceph在布局組之間分配數據的能力,因此不會極大地提高性能。下圖描繪了最簡單的條帶形式:

如果您預期大圖像大小,大型S3或Swift對象(例如視頻)或大型CephFS目錄,則可以通過在對象集內的多個對象上條帶化客戶端數據來看到相當大的讀/寫性能改進。當客戶端將條帶單元並行寫入其對應的對象時,會發生顯着的寫入性能。由於對象被映射到不同的放置組並進一步映射到不同的OSD,因此每次寫入以最大寫入速度並行發生。對單個磁盤的寫入將受到磁頭移動(例如每次搜索6ms)和該一個設備的帶寬(例如100MB / s)的限制。通過將該寫入分布在多個對象(映射到不同的放置組和OSD)上,Ceph可以減少每個驅動器的搜索次數,並結合多個驅動器的吞吐量來實現更快的寫入(或讀取)速度。
注意條帶化與對象副本無關。由於CRUSH跨OSD復制對象,因此條帶會自動復制。
在下圖中,客戶端數據在包含4個對象的對象集(下圖中的對象集1)中進行條帶化,其中第一個條帶單元是對象0中的條帶單元0,第四個條帶單元是條帶單元3對象3.寫入第四個條帶后,客戶端確定對象集是否已滿。如果對象集未滿,則客戶端開始再次將條帶寫入第一個對象(下圖中的對象0)。如果對象集已滿,則客戶端創建一個新對象集(下圖中的對象集2),並開始寫入新對象集中第一個對象中的第一個條帶(條帶單元16)(對象4中的對象集)下圖)。
三個重要變量決定了Ceph條紋數據的方式:
對象大小:Ceph存儲集群中的對象具有最大可配置大小(例如,2MB,4MB等)。對象大小應足夠大以容納許多條帶單元,並且應該是條帶單元的倍數。
條紋寬度:條紋具有可配置的單位大小(例如,64kb)。 Ceph客戶端將它將寫入對象的數據划分為大小相等的條帶單元,最后一個條帶單元除外。條帶寬度應該是對象大小的一部分,以便對象可以包含許多條帶單元。
條帶計數:Ceph客戶端在由條帶計數確定的一系列對象上寫入一系列條帶單元。該系列對象稱為對象集。在Ceph客戶端寫入對象集中的最后一個對象后,它將返回到對象集中的第一個對象。
重要信息在將群集投入生產之前,請測試條帶化配置的性能。條帶化數據並將其寫入對象后,您無法更改這些條帶化參數。
一旦Ceph客戶端將條帶數據條帶化並將條帶單元映射到對象,Ceph的CRUSH算法將對象映射到放置組,並將放置組映射到Ceph OSD守護進程,然后將對象作為文件存儲在存儲磁盤上。
CEPH客戶端
Ceph客戶端包括許多服務接口。 這些包括:
塊設備:Ceph塊設備(a.k.a.,RBD)服務提供可調整大小,精簡配置的塊設備,具有快照和克隆功能。 Ceph在整個集群中對塊設備進行條帶化以獲得高性能。 Ceph支持內核對象(KO)和直接使用librbd的QEMU管理程序 - 避免虛擬化系統的內核對象開銷。
對象存儲:Ceph對象存儲(a.k.a.,RGW)服務為RESTful API提供與Amazon S3和OpenStack Swift兼容的接口。
文件系統:Ceph文件系統(CephFS)服務提供符合POSIX標准的文件系統,可用於掛載或用作用戶空間(FUSE)中的文件系統。
Ceph可以運行其他OSD,MDS和監視器實例,以實現可擴展性和高可用性。 下圖描繪了高級體系結構。
CEPH對象存儲
Ceph對象存儲守護程序radosgw是一種FastCGI服務,它提供RESTful HTTP API來存儲對象和元數據。它使用自己的數據格式在Ceph存儲集群之上分層,並維護自己的用戶數據庫,身份驗證和訪問控制。 RADOS Gateway使用統一命名空間,這意味着您可以使用OpenStack與Swift兼容的API或與Amazon S3兼容的API。例如,您可以使用兼容S3的API將數據寫入一個應用程序,然后使用與另一個應用程序兼容的Swift兼容API讀取數據。
S3 / Swift對象和存儲群集對象比較
Ceph的Object Storage使用術語object來描述它存儲的數據。 S3和Swift對象與Ceph寫入Ceph存儲集群的對象不同。 Ceph對象存儲對象映射到Ceph存儲集群對象。 S3和Swift對象不一定以1:1的方式與存儲在存儲集群中的對象相對應。 S3或Swift對象可以映射到多個Ceph對象。
有關詳細信息,請參閱Ceph對象存儲(https://docs.ceph.com/docs/master/radosgw/)
CEPH BLOCK DEVICE
Ceph塊設備在Ceph存儲集群中的多個對象上對塊設備映像進行條帶化處理,其中每個對象都映射到一個放置組並進行分發,並且放置組分布在整個集群中的各個ceph-osd守護程序中。
重要條帶允許RBD塊設備比單個服務器執行得更好!
精簡配置的快照Ceph塊設備是虛擬化和雲計算的有吸引力的選擇。在虛擬機方案中,人們通常在QEMU / KVM中部署帶有rbd網絡存儲驅動程序的Ceph塊設備,其中主機使用librbd為來賓提供塊設備服務。許多雲計算堆棧使用libvirt與虛擬機管理程序集成。您可以將精簡配置的Ceph塊設備與QEMU和libvirt一起使用,以支持OpenStack和CloudStack以及其他解決方案。
雖然我們目前不向其他虛擬機管理程序提供librbd支持,但您也可以使用Ceph Block Device內核對象向客戶端提供塊設備。其他虛擬化技術(如Xen)可以訪問Ceph Block Device內核對象。這是使用命令行工具rbd完成的。
CEPH FILESYSTEM
Ceph文件系統(CephFS)提供符合POSIX標准的文件系統作為一種服務,它位於基於對象的Ceph存儲集群之上。 CephFS文件被映射到Ceph存儲在Ceph存儲集群中的對象。 Ceph客戶端將CephFS文件系統掛載為內核對象或用戶空間(FUSE)中的文件系統。
Ceph文件系統服務包括與Ceph存儲集群一起部署的Ceph元數據服務器(MDS)。 MDS的目的是將所有文件系統元數據(目錄,文件所有權,訪問模式等)存儲在元數據駐留在內存中的高可用性Ceph元數據服務器中。 MDS(一個名為ceph-mds的守護進程)的原因是,列出目錄或更改目錄(ls,cd)等簡單的文件系統操作會對Ceph OSD守護進程造成不必要的負擔。因此,將元數據與數據分離意味着Ceph文件系統可以提供高性能服務,而不會對Ceph存儲集群造成負擔。
CephFS將元數據與數據分離,將元數據存儲在MDS中,並將文件數據存儲在Ceph存儲集群中的一個或多個對象中。 Ceph文件系統旨在實現POSIX兼容性。 ceph-mds可以作為單個進程運行,也可以分發到多個物理機器,以實現高可用性或可伸縮性。
高可用性:額外的ceph-mds實例可以處於待機狀態,隨時可以接管任何活動失敗的ceph-mds的職責。這很容易,因為包括期刊在內的所有數據都存儲在RADOS上。轉換由ceph-mon自動觸發。
可伸縮性:多個ceph-mds實例可以處於活動狀態,它們會將目錄樹拆分為子樹(以及單個忙目錄的分片),從而有效地平衡所有活動服務器之間的負載。
備用和活動等的組合是可能的,例如,為縮放運行3個活動ceph-mds實例,以及為高可用性運行一個備用實例。