天天看點

分布式檔案存儲|Ceph分布式存儲基礎

作者:leenhem
分布式檔案存儲|Ceph分布式存儲基礎

Ceph

簡介

随着資料量的不斷增加,傳統的存儲方式已經無法滿足複雜應用場景下的存儲需求。傳統的存儲類型一般包括本地磁盤、網絡存儲(NAS)和存儲區域網絡(SAN),這些存儲方式面臨着很多挑戰。例如,本地磁盤存儲容量有限,無法擴充;NAS和SAN存儲成本高昂,并且難以擴充。

傳統的存儲類型

DAS裝置:SAS、 SATA、 SCSI、 IDE、 USB

無論是哪種接口,都是儲存設備驅動下的磁盤裝置,而磁盤裝置其實就是一種存儲,這種存儲是直接接入到主機闆總線上去的。

NAS裝置:NFS、SIFS、FTP

幾乎所有的網絡儲存設備基本上都是以檔案系統樣式進行使用,無法進一步格式化操作。

SAN:SCSI 協定、EC SAN、 iSCSI

基于SAN方式提供給用戶端作業系統的是一種塊裝置接口,這些裝置間主要通過SCSI協定來完成正常的通信。SCSI 的結構類似于TCPNIP協定,也有很多層,但是scsl 協定主要是用來進行存儲資料操作的。既然是分層方式實作的,那就是說,有部分層可以被替代。比如将實體層基于EC方式來實作,就形成了ECSAN,如果基于以太網方式來傳遞資料,就形成了iSCSl模式。

傳統的存儲方式問題

  • 存儲處理能力不足:傳統的IDE的IO值是100次/秒,SATA固态磁盤500次/秒,NVMe固态硬碟達到2000-4000次/秒。即使磁盤的IO能力再大數十倍,難道能夠抗住網站通路高峰期數十萬、數百萬甚至上億使用者的同時通路麼?這同時還要受到主機網絡IO能力的限制。
  • 存儲空間能力不足:單塊磁盤的容量再大,也無法滿足使用者的正常通路所需的資料容量限制。
  • 單點問題:單主機存儲資料存在SPQE(single point of failure)問題

相比之下,分布式存儲提供了更好的解決方案。它可以将資料存儲在多個節點上,實作資料的高可用性和容錯性。常見的分布式存儲軟體包括Ceph、Hadoop分布式檔案系統、GlusterFS等。

Ceph是一個功能強大的分布式存儲系統,它具有高可用性、容錯性和可擴充性,适用于許多應用場景。作為一種先進的存儲方式,分布式存儲将在未來變得越來越流行,并成為企業資料存儲的主流選擇。

Ceph是一個自由的分布式存儲系統,提供了對象、塊和檔案系統存儲,并具有高可用性和容錯性。Ceph有以下幾個主要優勢:

  • 可擴充性:Ceph的存儲叢集可以輕松地進行水準擴充,通過添加新節點來增加存儲容量和性能。
  • 高可用性:Ceph使用備援機制來確定資料的高可用性。當一個節點或硬碟出現故障時,Ceph會自動重複資料,保證資料不會丢失。
  • 容錯性:Ceph使用一個稱為CRUSH的算法來確定資料的備援分布。當節點出現故障時,Ceph可以自動重新平衡資料的位置,以確定資料的容錯性。
  • 易于管理:Ceph提供了豐富的管理工具來監控和管理存儲叢集,例如ceph-deploy、ceph-disk等。管理者可以使用這些工具輕松地進行叢集的部署、維護和更新。
官方位址:https://ceph.com/en
官方文檔:https://docs.ceph.com/en/latest/
GitHub位址:https://github.com/ceph/ceph           

Ceph簡介和特性

Ceph是一個多版本存儲系統,它把每一個待管理的資料流(例如一個檔案)切分為一到多個固定大小的對象資料,并以其為原子單元完成資料存取。

對象資料的底層存儲服務是由多個主機(host)組成的存儲叢集,該叢集也被稱之為RADOS(Reliable Automatic Distributed Object Store)存儲叢集,即可靠、自動化、分布式對象存儲系統。

librados是RADOS存儲叢集的API,它支援C、C++、Java、Python、Ruby和PHP等程式設計語言。

分布式檔案存儲|Ceph分布式存儲基礎

Ceph RADOS

Ceph通過内部的crush機制,實時方式計算出一個檔案應該存儲到哪個存儲對象裡面,進而實作快速查找對象的一種方式。

為什麼Ceph這麼火?

功能強大:Ceph能夠同時提供對象存儲,塊存儲和檔案系統存儲三種存儲服務的統一存儲架構

可擴充性:Ceph得以摒棄了傳統的集中式資料尋址方案,通過Crush算法的尋址操作,有相當強大的擴充性。

高可用性:Ceph資料副本數量可以由管理者自行定義,并可以通過Crush算法指定副本的實體存儲位置以分隔故障域,支援資料強一緻性的特性也使Ceph具有了高可靠性,可以忍受多種故障場景并自動嘗試并行修複。

RadosGW、RDB和CephFS都是RADOS存儲服務的用戶端,它們把RADOS的存儲服務接口(librados)分别從不同的角度做了進一步抽象,因而各自适用于不同的應用場景。

也就是說,Ceph将三種存儲類型統一在一個平台中,進而實作了更強大的适用性。

分布式檔案存儲|Ceph分布式存儲基礎

RADO

librados - 通過自程式設計方式實作資料的存儲能力
radosgw - 通過标準的RestFul接口,提供一種雲存儲服務
rbd - 将cept提供的空間,模拟成一個個的獨立塊裝置。當ceph部署完成,服務端就準備好rbd接口
cfs - 通過一個标準的檔案系統接口來進行資料的存儲           
分布式檔案存儲|Ceph分布式存儲基礎

Ceph三個子產品

Ceph元件

分布式檔案存儲|Ceph分布式存儲基礎

Ceph Cluster Network

無論是想向平台提供Ceph對象存儲和Ceph塊裝置服務、部署Ceph檔案系統,或者是将Ceph用于其他目的,所有的Ceph存儲叢集部署都從設定每個Ceph節點網絡開始。

一個Ceph存儲叢集至少需要一個Ceph Monitor、Ceph Manager和Ceph OSD(object storage daemon對象存儲守護程序)。此外如果有運作Ceph檔案系統的用戶端,還需要配置Ceph中繼資料伺服器。

分布式檔案存儲|Ceph分布式存儲基礎

Ceph 元件

Ceph網絡模型

分布式檔案存儲|Ceph分布式存儲基礎

Ceph網絡模型

Ceph的網絡模型是非常靈活和可擴充的,并且能夠适應不同的應用場景。它允許使用者自由選擇不同的網絡協定,以及對存儲節點進行擴容和縮容等操作,進而實作更好的性能和可靠性。

Ceph采用CRUSH算法,實作資料劃分及分布式的動态負載均衡。在Ceph的網絡模型中,用戶端通過Ceph的RADOS Gateway(RGW)或者Ceph FS接口通路Ceph叢集中的對象存儲和檔案系統。而Ceph OSD Daemon則實際上負責管理和存儲存儲叢集中的對象資料和中繼資料。

在Ceph網絡模型中,用戶端與存儲叢集之間的通信是通過Ceph提供的網絡協定完成的。Ceph支援多種網絡協定,包括TCP/IP、InfiniBand、RoCE等,這讓使用者可以根據不同的應用場景配置不同的網絡協定以獲得更好的性能和可靠性。

當用戶端發起請求時,該請求會先被發送到Ceph Monitor程序,由它來管理叢集的狀态和負載,并将請求路由到适當的Ceph OSD Daemon上。Ceph OSD Daemon負責處理讀寫請求,将資料讀取或寫入儲存設備中,并傳回響應給用戶端。

Ceph版本

每個Ceph版本都有一個英文名稱和一個數字形式的版本編号。其中,英文名稱是以字母順序逐漸遞增的方式命名的。以下是Ceph各個版本的英文名稱及其數字形式的版本編号:

  1. Ceph v0.80 Firefly
  2. Ceph v0.87 Giant
  3. Ceph v0.89 Hammer
  4. Ceph v0.94 Infernalis
  5. Ceph v10.2 Jewel
  6. Ceph v10.2.3 Jewel Update 3
  7. Ceph v11.0 Kraken
  8. Ceph v12.0 Luminous
  9. Ceph v12.2 Luminous
  10. Ceph v13.0 Mimic
  11. Ceph v14.0 Nautilus
  12. Ceph v15.0 Octopus
  13. Ceph v16.0 Pacific
  14. Ceph v17.0 Quincy

數字形式的版本編号包括主版本号、次版本号和修訂版本号。例如,Ceph v14.2中的14表示主版本号,2表示次版本号,而兩者之間的小數點後面則是修訂版本号。通常來說,主版本号表示Ceph的重大更新,次版本号表示增量更新,而修訂版本号則表示缺陷修複或緊急更新檔。

可以在這裡看到Ceph的曆史版本

https://docs.ceph.com/en/latest/releases/           

Ceph叢集部署方法介紹

在Ceph叢集的部署中,有很多種不同的方式可以選擇,下面對各種方式進行簡要的特點分析:

  1. Cephadm:使用容器和systemd安裝和管理Ceph叢集,并與SL和儀表闆GUI緊密內建,支援Octopus以後的新版本,是目前官方推薦的部署方式。
  2. ceph-deploy:一個基于Python實作流行的快速部署叢集的工具,但從Nautilus版後不再支援和測試,不建議使用此工具安裝Nautilus之前舊版本。
  3. Rook:在Kubernetes中運作的Ceph叢集,同時還支援通過Kubernetes API管理存儲資源和配置,隻支援Nautilus以後的新版本,此工具不支援較新的OS。
  4. cephansible、ceph-salt、cephmon:使用Ansible、Salt等工具部署和管理Ceph叢集,應用廣泛,但從Nautilus和Octopus版開始沒有內建對應的API,是以一些較新的管理功能和儀表闆內建不可用。
  5. Puppet:通過Puppet進行Ceph叢集的自動化部署,較為靈活,但需要一定的Puppet技能。
  6. 二進制:手動安裝需要較高的技術水準和經驗,但也較為靈活,能夠更好地滿足複雜的部署需求。
  7. Windows圖形:在Windows主機上通過圖形操作就可以進行Ceph叢集的部署,适用于不熟悉指令行或Linux的使用者。

不同的部署方式具有不同的特點和優缺點,在選擇時需要根據實際情況進行權衡和考慮。

Ceph的叢集環境規劃和部署,後續文章再寫,各位看官持續關注。

繼續閱讀