Ceph分布式存儲簡介
2020-02-12 20:06 作者:艾銻無限 瀏覽量:
迎戰疫情,艾銻無限用愛與您同行
為中國中小企業提供免費IT外包服務

這次的肺炎疫情對中國的中小企業將會是沉重的打擊,據釘釘和微信兩個辦公平臺數據統計現有2億左右的人在家遠程辦公,那么對于中小企業的員工來說不懂IT技術將會讓他們面臨的最大挑戰和困難。
電腦不亮了怎么辦?系統藍屏如何處理?辦公室的電腦在家如何連接?網絡應該如何設置?VPN如何搭建?數據如何對接?服務器如何登錄?數據安全如何保證?數據如何存儲?視頻會議如何搭建?業務系統如何開啟等等一系列的問題,都會困擾著并非技術出身的您。
好消息是當您看到這篇文章的時候,就不用再為上述的問題而苦惱,您只需撥打艾銻無限的全國免費熱線電話:400 650 7820,就會有我們的遠程工程師為您解決遇到的問題,他們可以遠程幫您處理遇到的一些IT技術難題。
如遇到免費熱線占線,您還可以撥打我們的24小時值班經理電話:15601064618或技術經理的電話:13041036957,我們會在第一時間接聽您的來電,為您提供適合的解決方案,讓您無論在家還是在企業都能無憂辦公。
那艾銻無限具體能為您的企業提供哪些服務呢?
艾銻無限始創于2005年,歷經15年服務了5000多家中小企業并保障了幾十萬臺設備的正常運轉,積累了豐富的企業IT緊急問題和特殊故障的解決經驗,制定了相對應的解決方案。我們為您的企業提供的IT服務分為三大版塊:
第一版塊是保障性IT外包服務:如電腦設備運維,辦公設備運維,網絡設備運維,服務器運維等綜合性企業IT設備運維服務。
第二版塊是功能性互聯網外包服務:如網站開發外包,小程序開發外包,APP開發外包,電商平臺開發外包,業務系統的開發外包和后期的運維外包服務。
第三版塊是增值性云服務外包:如企業郵箱上云,企業網站上云,企業存儲上云,企業APP小程序上云,企業業務系統上云,阿里云產品等后續的云運維外包服務。
您要了解更多服務也可以登錄艾銻無限的官網:www.bjitwx.com查看詳細說明,在疫情期間,您企業遇到的任何困境只要找到艾銻無限,能免費為您提供服務的我們絕不收一分錢,我們全體艾銻人承諾此活動直到中國疫情結束,我們將這次活動稱為——春雷行動。

以下還有我們為您提供的一些技術資訊,以便可以幫助您更好的了解相關的IT知識,幫您渡過疫情中辦公遇到的困難和挑戰,艾銻無限愿和中國中小企業一起共進退,因為我們相信萬物同體,能量合一,只要我們一起齊心協力,一定會成功。再一次祝福您和您的企業,戰勝疫情,您和您的企業一定行。
北京艾銻無限告訴您:Ceph分布式存儲簡介
一、Ceph簡介:
Ceph是一種為優秀的性能、可靠性和可擴展性而設計的統一的、分布式文件系統。ceph 的統一體現在可以提供文件系統、塊存儲和對象存儲,分布式體現在可以動態擴展。在國內一些公司的云環境中,通
常會采用 ceph 作為openstack 的唯一后端存儲來提高數據轉發效率。
Ceph項目最早起源于Sage就讀博士期間的工作(最早的成果于2004年發表),并隨后貢獻給開源社區。在經過了數年的發展之后,目前已得到眾多云計算廠商的支持并被廣泛應用。RedHat及OpenStack都
可與Ceph整合以支持虛擬機鏡像的后端存儲。
二、Ceph特點:
高性能:
a. 摒棄了傳統的集中式存儲元數據尋址的方案,采用CRUSH算法,數據分布均衡,
并行度高。
b.考慮了容災域的隔離,能夠實現各類負載的副本放置規則,例如跨機房、機架
感知等。
c. 能夠支持上千個存儲節點的規模,支持TB到PB級的數據。
高可用性:
a. 副本數可以靈活控制。
b. 支持故障域分隔,數據強一致性。
c. 多種故障場景自動進行修復自愈。
d. 沒有單點故障,自動管理。
高可擴展性:
a. 去中心化。
b. 擴展靈活。
c. 隨著節點增加而線性增長。
特性豐富:
a. 支持三種存儲接口:塊存儲、文件存儲、對象存儲。
b. 支持自定義接口,支持多種語言驅動。
三、Ceph應用場景:
Ceph可以提供對象存儲、塊設備存儲和文件系統服務,其對象存儲可以對接網盤(owncloud)應用業務等;其塊設備存儲可以對接(IaaS),當前主流的IaaS運平臺軟件,如:OpenStack、CloudStack、
Zstack、Eucalyptus等以及kvm等。
Ceph是一個高性能、可擴容的分布式存儲系統,它提供三大功能:
對象存儲(RADOSGW):提供RESTful接口,也提供多種編程語言綁定。兼容S3、Swift;
塊存儲(RDB):由RBD提供,可以直接作為磁盤掛載,內置了容災機制;
文件系統(CephFS):提供POSIX兼容的網絡文件系統CephFS,專注于高性能、大容量存儲;
什么是塊存儲/對象存儲/文件系統存儲?
1.對象存儲:
也就是通常意義的鍵值存儲,其接口就是簡單的GET、PUT、DEL 和其他擴展,代表主要有 Swift 、S3 以及 Gluster 等;
2.塊存儲:
這種接口通常以 QEMU Driver 或者 Kernel Module 的方式存在,這種接口需要實現 Linux 的 Block Device 的接口或者 QEMU 提供的 Block Driver 接口,如 Sheepdog,AWS 的 EBS,阿里云的盤古系統,還
有 Ceph 的 RBD(RBD是Ceph面向塊存儲的接口)。在常見的存儲中 DAS、SAN 提供的也是塊存儲;
3.文件系統存儲:
通常意義是支持 POSIX 接口,它跟傳統的文件系統如 Ext4 是一個類型的,但區別在于分布式存儲提供了并行化的能力,如 Ceph 的 CephFS (CephFS是Ceph面向文件存儲的接口),但是有時候又會把
GlusterFS ,HDFS 這種非POSIX接口的類文件存儲接口歸入此類。當然 NFS、NAS也是屬于文件系統存儲;
四、Ceph核心組件:
(1)Monitors:監視器,維護集群狀態的多種映射,同時提供認證和日志記錄服務,包括有關monitor 節點端到端的信息,其中包括 Ceph 集群ID,監控主機名和IP以及端口。并且存儲當前版本信息以及最新更
改信息,通過 "ceph mon dump"查看 monitor map。
(2)MDS(Metadata Server):Ceph 元數據,主要保存的是Ceph文件系統的元數據。注意:ceph的塊存儲和ceph對象存儲都不需要MDS。
(3)OSD:即對象存儲守護程序,但是它并非針對對象存儲。是物理磁盤驅動器,將數據以對象的形式存儲到集群中的每個節點的物理磁盤上。OSD負責存儲數據、處理數據復制、恢復、回(Backfilling)、再
平衡。完成存儲數據的工作絕大多數是由 OSD daemon 進程實現。在構建 Ceph OSD的時候,建議采用SSD 磁盤以及xfs文件系統來格式化分區。此外OSD還對其它OSD進行心跳檢測,檢測結果匯報給Monitor
(4)RADOS:Reliable Autonomic Distributed Object Store。RADOS是ceph存儲集群的基礎。在ceph中,所有數據都以對象的形式存儲,并且無論什么數據類型,RADOS對象存儲都將負責保存這些對象。
RADOS層可以確保數據始終保持一致。
(5)librados:librados庫,為應用程度提供訪問接口。同時也為塊存儲、對象存儲、文件系統提供原生的接口。
(6)RADOSGW:網關接口,提供對象存儲服務。它使用librgw和librados來實現允許應用程序與Ceph對象存儲建立連接。并且提供S3 和 Swift 兼容的RESTful API接口。
(7)RBD:塊設備,它能夠自動精簡配置并可調整大小,而且將數據分散存儲在多個OSD上。
(8)CephFS:Ceph文件系統,與POSIX兼容的文件系統,基于librados封裝原生接口。
五、Ceph存儲系統的邏輯層次結構:

六、RADOS的系統邏輯結構:
七、Ceph 數據存儲過程:

無論使用哪種存儲方式(對象、塊、文件系統),存儲的數據都會被切分成Objects。Objects size大小可以由管理員調整,通常為2M或4M。每個對象都會有一個唯一的OID,由ino與ono生成,雖然這些名詞看上
去很復雜,其實相當簡單。
ino:即是文件的File ID,用于在全局唯一標識每一個文件
ono:則是分片的編號
比如:一個文件FileID為A,它被切成了兩個對象,一個對象編號0,另一個編號1,那么這兩個文件的oid則為A0與A1。
File —— 此處的file就是用戶需要存儲或者訪問的文件。對于一個基于Ceph開發的對象存儲應用而言,這個file也就對應于應用中的“對象”,也就是用戶直接操作的“對象”。
Object —— 此處的object是RADOS所看到的“對象”。Object與上面提到的file的區別是,object的最大size由RADOS限定(通常為2MB或4MB),以便實現底層存儲的組織管理。因此,當上層應用向RADOS存入
size很大的file時,需要將file切分成統一大小的一系列object(最后一個的大小可以不同)進行存儲。為避免混淆,在本文中將盡量避免使用中文的“對象”這一名詞,而直接使用file或object進行說明。
PG(Placement Group)—— 顧名思義,PG的用途是對object的存儲進行組織和位置映射。具體而言,一個PG負責組織若干個object(可以為數千個甚至更多),但一個object只能被映射到一個PG中,即,PG
和object之間是“一對多”映射關系。同時,一個PG會被映射到n個OSD上,而每個OSD上都會承載大量的PG,即,PG和OSD之間是“多對多”映射關系。在實踐當中,n至少為2,如果用于生產環境,則至少為3。
一個OSD上的PG則可達到數百個。事實上,PG數量的設置牽扯到數據分布的均勻性問題。關于這一點,下文還將有所展開。
OSD —— 即object storage device,前文已經詳細介紹,此處不再展開。唯一需要說明的是,OSD的數量事實上也關系到系統的數據分布均勻性,因此其數量不應太少。在實踐當中,至少也應該是數十上百個的\
量級才有助于Ceph系統的設計發揮其應有的優勢。
基于上述定義,便可以對尋址流程進行解釋了。具體而言, Ceph中的尋址至少要經歷以下三次映射:
(1)File -> object映射
(2)Object -> PG映射,hash(oid) & mask -> pgid(哈希算法)
(3)PG -> OSD映射,CRUSH算法
CRUSH,Controlled Replication Under Scalable Hashing,它表示數據存儲的分布式選擇算法, ceph 的高性能/高可用就是采用這種算法實現。CRUSH 算法取代了在元數據表中為每個客戶端請求進行查找,它
通過計算系統中數據應該被寫入或讀出的位置。CRUSH能夠感知基礎架構,能夠理解基礎設施各個部件之間的關系。并CRUSH保存數據的多個副本,這樣即使一個故障域的幾個組件都出現故障,數據依然可
用。CRUSH 算是使得 ceph 實現了自我管理和自我修復。
RADOS 分布式存儲相較于傳統分布式存儲的優勢在于:
1. 將文件映射到object后,利用Cluster Map 通過CRUSH 計算而不是查找表方式定位文件數據存儲到存儲設備的具體位置。優化了傳統文件到塊的映射和Block MAp的管理。
2. RADOS充分利用OSD的智能特點,將部分任務授權給OSD,最大程度地實現可擴展
八、Ceph IO流程及數據分布:

(1)正常IO流程圖:
步驟:
1. client 創建cluster handler。
2. client 讀取配置文件。
3. client 連接上monitor,獲取集群map信息。
4. client 讀寫io 根據crshmap 算法請求對應的主osd數據節點。
5. 主osd數據節點同時寫入另外兩個副本節點數據。
6. 等待主節點以及另外兩個副本節點寫完數據狀態。
7. 主節點及副本節點寫入狀態都成功后,返回給client,io寫入完成。
(2)新主IO流程圖:
說明:如果新加入的OSD1取代了原有的 OSD4成為 Primary OSD, 由于 OSD1 上未創建 PG , 不存在數據,那么 PG 上的 I/O 無法進行,怎樣工作的呢?
新主IO流程步驟:
1. client連接monitor獲取集群map信息。
2. 同時新主osd1由于沒有pg數據會主動上報monitor告知讓osd2臨時接替為主。
3. 臨時主osd2會把數據全量同步給新主osd1。
4. client IO讀寫直接連接臨時主osd2進行讀寫。
5. osd2收到讀寫io,同時寫入另外兩副本節點。
6. 等待osd2以及另外兩副本寫入成功。
7. osd2三份數據都寫入成功返回給client, 此時client io讀寫完畢。
8. 如果osd1數據同步完畢,臨時主osd2會交出主角色。
9. osd1成為主節點,osd2變成副本。
九、Ceph Pool和PG分布情況:
pool:是ceph存儲數據時的邏輯分區,它起到namespace的作用。每個pool包含一定數量(可配置) 的PG。PG里的對象被映射到不同的Object上。pool是分布到整個集群的。 pool可以做故障隔離域,根據不同的用戶場景不統一進行隔離。