文章目錄
Ceph 基礎
一、什麼是Ceph?
官網: https://docs.ceph.com/docs/master/
http://docs.ceph.org.cn/
Ceph架構介紹
參考URL: https://www.cnblogs.com/passzhang/p/12148933.html
乾貨|非常詳細的 Ceph 介紹、原理、架構
參考URL: https://blog.csdn.net/mingongge/article/details/100788388
Ceph是當前非常流行的開源分佈式存儲系統,具有高擴展性、高性能、高可靠性等優點,同時提供塊存儲服務(rbd)、對象存儲服務(rgw)以及文件系統存儲服務(cephfs),Ceph在存儲的時候充分利用存儲節點的計算能力,在存儲每一個數據時都會通過計算得出該數據的位置,儘量的分佈均衡。目前也是OpenStack的主流後端存儲。
有別於其他分佈式系統就在於它採用Crush(Controlled Replication Under Scalable Hashing)算法使得數據的存儲位置都是計算出來的而不是去查詢專門的元數據服務器得來的。
它將文件分割後均勻隨機地分散在各個節點上,Ceph採用了CRUSH算法來確定對象的存儲位置,只要有當前集羣的拓撲結構,Ceph客戶端就能直接計算出文件的存儲位置,直接跟OSD節點通信獲取文件而不需要詢問中心節點獲得文件位置,這樣就避免了單點風險。
作者:張興凱
鏈接:https://www.zhihu.com/question/21718731/answer/21545274
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
-
高性能
a. 摒棄了傳統的集中式存儲元數據尋址的方案,採用CRUSH算法,數據分佈均衡,並行度高
b.考慮了容災域的隔離,能夠實現各類負載的副本放置規則,例如跨機房、機架感知等
c. 能夠支持上千個存儲節點的規模,支持TB到PB級的數據 -
高可擴展性
a. 去中心化
b. 擴展靈活
c. 隨着節點增加而線性增長 -
特性豐富
a. 支持三種存儲接口:塊存儲、文件存儲、對象存儲
b. 支持自定義接口,支持多種語言驅動
二、ceph歷史
Ceph 入門系列(一):ceph歷史
參考URL: https://blog.csdn.net/don_chiang709/article/details/90298128?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3
Ceph 項目起源於其創始人Sage Weil在加州大學Santa Cruz分校攻讀博士期間的研究課題。項目的起始時間爲2004年,在2006年基於開源協議開源了Ceph的源代碼。Sage Weil也相應成立了Inktank公司專注於Ceph的研發。在2014年5月,該公司被Red Hat收購。
三、在國內的使用情況以及常見問答
社區訪談: 爲何Ceph在中國發展如日中天?
參考URL: https://www.sohu.com/a/225450264_100068148
Ceph在國內的應用從2014年開始走強。迄今爲止,Ceph在金融(如恆豐銀行,平安科技)、政府行業、互聯網(如金山雲、阿里、騰訊、京東、攜程)、能源行業(如國家電網)、交通行業(如中鐵總)、運營商(中國聯通、中國移動、中國電信)、高校(上海交大、武漢大學)、媒體娛樂(人民日報、今日頭條、YY直播、虎牙直播等)、公益(福彩)、遊戲等行業得到了廣泛的應用。
用戶自行下載Ceph發行版使用,需要注意哪些問題?
答:用戶下載源代碼,或者是發行版,都離不開一些優化工作,需要多去借鑑別人的經驗,讓它更好的部署在自己工作的環境裏。實際上,部署不是難事,難點是調優與運維,後者需要更多的精力。
筆者:Ceph在一個統一的系統中同時提供了對象、塊和文件存儲功能,在實際使用中,這些功能是否能夠拆分出獨立的系統?
答:統一提供這三個功能,這正是Ceph的巧妙之處。自然,單獨採用其中某一個功能,就更加沒有問題的了。
在不同技術領域的公司,有專注於塊的,有專注於對象的,還有擅長文件的。在實際的使用過程中,很多案例都是獨立的使用的。Ceph最早是對塊級別層面的支持,然後支持文件系統項目,再後來支持對象存儲。在對象存儲領域,Ceph大有替代Swift的趨勢。
筆者:與傳統SAN、NAS相比,Ceph的主要優勢在哪裏?
答:去年曾有一家銀行客戶說,在未來三年之內,銀行80%的NAS場景將會被替換爲對象存儲。對NAS來說,可擴展性是一個硬傷,而這正是Ceph所具備的天然優勢。
可擴展性面臨的挑戰,一方面是資金不足的問題,因爲擴容成本比較高,而且廠商之間的不同產品還存在兼容性問題,另一方面是技術問題。在以往的某些場景中,系統接近滿載時候,存取的效率就會很低,低到讓人無法忍受。
Ceph的分佈式存儲方式實現無縫的擴容。這對於商業化存儲而言是最大的一個衝擊點。
四、Ceph核心概念
-
RADOS
全稱Reliable Autonomic Distributed Object Store,即可靠的、自動化的、分佈式對象存儲系統。RADOS是Ceph集羣的精華,用戶實現數據分配、Failover等集羣操作。 -
Librados
Rados提供庫,因爲RADOS是協議很難直接訪問,因此上層的RBD、RGW和CephFS都是通過librados訪問的,目前提供PHP、Ruby、Java、Python、C和C++支持。 -
Crush
Crush算法是Ceph的兩大創新之一,通過Crush算法的尋址操作,Ceph得以摒棄了傳統的集中式存儲元數據尋址方案。而Crush算法在一致性哈希基礎上很好的考慮了容災域的隔離,使得Ceph能夠實現各類負載的副本放置規則,例如跨機房、機架感知等。同時,Crush算法有相當強大的擴展性,理論上可以支持數千個存儲節點。 -
Pool
Pool是存儲對象的邏輯分區,它規定了數據冗餘的類型和對應的副本分佈策略,支持兩種類型:副本(replicated)和 糾刪碼( Erasure Code); -
PG( placement group)
PG( placement group)是一個放置策略組,它是對象的集合,該集合裏的所有對象都具有相同的放置策略,簡單點說就是相同PG內的對象都會放到相同的硬盤上,PG是 ceph的邏輯概念,服務端數據均衡和恢復的最小粒度就是PG,一個PG包含多個OSD。引入PG這一層其實是爲了更好的分配數據和定位數據; -
Object
簡單來說塊存儲讀寫快,不利於共享,文件存儲讀寫慢,利於共享。能否弄一個讀寫快,利於共享的出來呢。於是就有了對象存儲。最底層的存儲單元,包含元數據和原始數據。
五、Ceph核心組件
- OSD
OSD是負責物理存儲的進程,一般配置成和磁盤一一對應,一塊磁盤啓動一個OSD進程。主要功能是存儲數據、複製數據、平衡數據、恢復數據,以及與其它OSD間進行心跳檢查,負責響應客戶端請求返回具體數據的進程等。
Pool、PG和OSD的關係:
一個Pool裏有很多PG;
一個PG裏包含一堆對象,一個對象只能屬於一個PG;
PG有主從之分,一個PG分佈在不同的OSD上(針對三副本類型);
-
Monitor監控
一個Ceph集羣需要多個Monitor組成的小集羣,它們通過Paxos同步數據,用來保存OSD的元數據。負責監控整個Ceph集羣運行的Map視圖(如OSD Map、Monitor Map、PG Map和CRUSH Map),維護集羣的健康狀態,維護展示集羣狀態的各種圖表,管理集羣客戶端認證與授權; -
MDS
MDS全稱Ceph Metadata Server,是CephFS服務依賴的元數據服務。負責保存文件系統的元數據,管理目錄結構。對象存儲和塊設備存儲不需要元數據服務; 如果不使用CephFS可以不安裝。 -
Mgr
ceph 官方開發了 ceph-mgr,主要目標實現 ceph 集羣的管理,爲外界提供統一的入口。例如cephmetrics、zabbix、calamari、prometheus。 -
RGW
RGW全稱RADOS gateway,是Ceph對外提供的對象存儲服務,接口與S3和Swift兼容。
六、Ceph三種存儲類型
1. 塊存儲(RBD)
-
優點:
- 通過Raid與LVM等手段,對數據提供了保護;
- 多塊廉價的硬盤組合起來,提高容量;
- 多塊磁盤組合出來的邏輯盤,提升讀寫效率;
-
缺點:
- 採用SAN架構組網時,光纖交換機,造價成本高;
- 主機之間無法共享數據;
-
使用場景
- docker容器、虛擬機磁盤存儲分配;
- 日誌存儲;
- 文件存儲;
典型設備:磁盤陣列,硬盤。主要是將裸磁盤空間映射給主機使用的。
總結: 一個Linux內核級的塊設備,允許用戶像任何其他Linux塊設備一樣訪問Ceph。
2. 文件存儲(CephFS)
-
優點:
- 造價低,隨便一臺機器就可以了;
- 方便文件共享;
-
缺點:
- 讀寫速率低;
- 傳輸速率慢;
-
使用場景
- 日誌存儲;
- FTP、NFS;
- 其它有目錄結構的文件存儲
典型設備:FTP、NFS服務器。爲了克服塊存儲文件無法共享的問題,所以有了文件存儲。在服務器上架設FTP與NFS服務,就是文件存儲。
總結: 這是一個POSIX兼容的文件系統,可以在任何Linux發行版上運行,操作系統可直接訪問Ceph存儲。
3. 對象存儲(Object)(適合更新變動較少的數據)
-
優點:
- 具備塊存儲的讀寫高速;
- 具備文件存儲的共享等特性;
-
使用場景
- 圖片存儲;
- 視頻存儲;
典型設備:內置大容量硬盤的分佈式服務器(swift, s3)。多臺服務器內置大容量硬盤,安裝上對象存儲管理軟件,對外提供讀寫訪問功能。
七、Ceph和Swift、HDFS對比
ceph這款雲存儲技術怎麼樣?和swift、hdfs相比如何
參考URL:https://www.zhihu.com/question/21718731
Swift還是Ceph?哪個對象存儲更好呢?
參考URL: http://www.dostor.com/p/48838.html
Ceph與Swift
Ceph用C++編寫而Swift用Python編寫,性能上應當是Ceph佔優。但是與Ceph不同,Swift專注於對象存儲,作爲OpenStack組件之一經過大量生產實踐的驗證,與OpenStack結合很好,目前不少人使用Ceph爲OpenStack提供塊存儲,但仍舊使用Swift提供對象存儲。數據一致性決定了兩者對應兩類應用場景。Ceph是始終跨集羣強一致性,Swift數據是最終一致的,同步一致數據需要時間。
總結:因爲Ceph可以提供多種方式來訪問對象存儲,所以比Swift更有可用性,擴展性更好。數據一致性決定了兩者對應兩類應用場景。
Ceph與HDFS
Ceph對比HDFS優勢在於易擴展,無單點。HDFS是專門爲Hadoop這樣的雲計算而生,在離線批量處理大數據上有先天的優勢,而Ceph是一個通用的實時存儲系統。雖然Hadoop可以利用Ceph作爲存儲後端,但執行計算任務上性能還是略遜於HDFS。
八、體系結構
官網參考: http://docs.ceph.org.cn/architecture/
Ceph 存儲集羣包含兩種類型的守護進程:
Ceph 監視器
Ceph OSD 守護進程
Ceph OSD 守護進程檢查自身狀態、以及其它 OSD 的狀態,並報告給監視器們。
存儲集羣的客戶端和各個 Ceph OSD 守護進程使用 CRUSH 算法高效地計算數據位置,而不是依賴於一箇中心化的查詢表。
- 數據的存儲
Ceph 存儲集羣從 Ceph 客戶端接收數據——不管是來自 Ceph 塊設備、 Ceph 對象存儲、 Ceph 文件系統、還是基於 librados 的自定義實現——並存儲爲對象。每個對象是文件系統中的一個文件,它們存儲在對象存儲設備上。由 Ceph OSD 守護進程處理存儲設備上的讀/寫操作。
Ceph OSD 在扁平的命名空間內把所有數據存儲爲對象(也就是沒有目錄層次)。對象包含一個標識符、二進制數據、和由名字/值對組成的元數據,元數據語義完全取決於 Ceph 客戶端。例如, CephFS 用元數據存儲文件屬性,如文件所有者、創建日期、最後修改日期等等。
Note:一個對象 ID 不止在本地唯一 ,它在整個集羣內都是唯一的。
- 伸縮性和高可用性
在傳統架構裏,客戶端與一箇中心化的組件通信(如網關、中間件、 API 、前端等等),它作爲一個複雜子系統的唯一入口,它引入單故障點的同時,也限制了性能和伸縮性(就是說如果中心化組件掛了,整個系統就掛了)。
Ceph 消除了集中網關,允許客戶端直接和 Ceph OSD 守護進程通訊。 Ceph OSD 守護進程自動在其它 Ceph 節點上創建對象副本來確保數據安全和高可用性;爲保證高可用性,監視器也實現了集羣化。爲消除中心節點, Ceph 使用了 CRUSH 算法。
Ceph 用CRUSH 算法 、集羣感知性和智能 OSD 守護進程來擴展和維護高可靠性。 Ceph 的關鍵設計是自治,自修復、智能的 OSD 守護進程。