這篇文章主要介紹了Ceph結(jié)構(gòu)是怎么樣的,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
成都創(chuàng)新互聯(lián)公司于2013年成立,先為昌吉等服務(wù)建站,昌吉等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為昌吉企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
4.1 Ceph系統(tǒng)的層次結(jié)構(gòu)
Ceph存儲(chǔ)系統(tǒng)的邏輯層次結(jié)構(gòu)如下圖所示[1]。
自下向上,可以將Ceph系統(tǒng)分為四個(gè)層次:
(1)基礎(chǔ)存儲(chǔ)系統(tǒng)RADOS(Reliable, Autonomic, Distributed Object Store,即可靠的、自動(dòng)化的、分布式的對(duì)象存儲(chǔ))
顧名思義,這一層本身就是一個(gè)完整的對(duì)象存儲(chǔ)系統(tǒng),所有存儲(chǔ)在Ceph系統(tǒng)中的用戶(hù)數(shù)據(jù)事實(shí)上最終都是由這一層來(lái)存儲(chǔ)的。而Ceph的高可靠、高可擴(kuò)展、高性能、高自動(dòng)化等等特性本質(zhì)上也是由這一層所提供的。因此,理解RADOS是理解Ceph的基礎(chǔ)與關(guān)鍵。
物理上,RADOS由大量的存儲(chǔ)設(shè)備節(jié)點(diǎn)組層,每個(gè)節(jié)點(diǎn)擁有自己的硬件資源(CPU、內(nèi)存、硬盤(pán)、網(wǎng)絡(luò)),并運(yùn)行著操作系統(tǒng)和文件系統(tǒng)。4.2、4.3節(jié)將對(duì)RADOS進(jìn)行展開(kāi)介紹。
(2)基礎(chǔ)庫(kù)librados
這一層的功能是對(duì)RADOS進(jìn)行抽象和封裝,并向上層提供API,以便直接基于RADOS(而不是整個(gè)Ceph)進(jìn)行應(yīng)用開(kāi)發(fā)。特別要注意的是,RADOS是一個(gè)對(duì)象存儲(chǔ)系統(tǒng),因此,librados實(shí)現(xiàn)的API也只是針對(duì)對(duì)象存儲(chǔ)功能的。
RADOS采用C++開(kāi)發(fā),所提供的原生librados API包括C和C++兩種,其文檔參見(jiàn)[2]。物理上,librados和基于其上開(kāi)發(fā)的應(yīng)用位于同一臺(tái)機(jī)器,因而也被稱(chēng)為本地API。應(yīng)用調(diào)用本機(jī)上的librados API,再由后者通過(guò)socket與RADOS集群中的節(jié)點(diǎn)通信并完成各種操作。
(3)高層應(yīng)用接口
這一層包括了三個(gè)部分:RADOS GW(RADOS Gateway)、 RBD(Reliable Block Device)和Ceph FS(Ceph File System),其作用是在librados庫(kù)的基礎(chǔ)上提供抽象層次更高、更便于應(yīng)用或客戶(hù)端使用的上層接口。
其中,RADOS GW是一個(gè)提供與Amazon S3和Swift兼容的RESTful API的gateway,以供相應(yīng)的對(duì)象存儲(chǔ)應(yīng)用開(kāi)發(fā)使用。RADOS GW提供的API抽象層次更高,但功能則不如librados強(qiáng)大。因此,開(kāi)發(fā)者應(yīng)針對(duì)自己的需求選擇使用。
RBD則提供了一個(gè)標(biāo)準(zhǔn)的塊設(shè)備接口,常用于在虛擬化的場(chǎng)景下為虛擬機(jī)創(chuàng)建volume。目前,Red Hat已經(jīng)將RBD驅(qū)動(dòng)集成在KVM/QEMU中,以提高虛擬機(jī)訪問(wèn)性能。
Ceph FS是一個(gè)POSIX兼容的分布式文件系統(tǒng)。由于還處在開(kāi)發(fā)狀態(tài),因而Ceph官網(wǎng)并不推薦將其用于生產(chǎn)環(huán)境中。
(4)應(yīng)用層
這一層就是不同場(chǎng)景下對(duì)于Ceph各個(gè)應(yīng)用接口的各種應(yīng)用方式,例如基于librados直接開(kāi)發(fā)的對(duì)象存儲(chǔ)應(yīng)用,基于RADOS GW開(kāi)發(fā)的對(duì)象存儲(chǔ)應(yīng)用,基于RBD實(shí)現(xiàn)的云硬盤(pán)等等。
在上文的介紹中,有一個(gè)地方可能容易引起困惑:RADOS自身既然已經(jīng)是一個(gè)對(duì)象存儲(chǔ)系統(tǒng),并且也可以提供librados API,為何還要再單獨(dú)開(kāi)發(fā)一個(gè)RADOS GW?
理解這個(gè)問(wèn)題,事實(shí)上有助于理解RADOS的本質(zhì),因此有必要在此加以分析。粗看起來(lái),librados和RADOS GW的區(qū)別在于,librados提供的是本地API,而RADOS GW提供的則是RESTful API,二者的編程模型和實(shí)際性能不同。而更進(jìn)一步說(shuō),則和這兩個(gè)不同抽象層次的目標(biāo)應(yīng)用場(chǎng)景差異有關(guān)。換言之,雖然RADOS和S3、Swift同屬分布式對(duì)象存儲(chǔ)系統(tǒng),但RADOS提供的功能更為基礎(chǔ)、也更為豐富。這一點(diǎn)可以通過(guò)對(duì)比看出。
由于Swift和S3支持的API功能近似,這里以Swift舉例說(shuō)明。Swift提供的API功能主要包括:
用戶(hù)管理操作:用戶(hù)認(rèn)證、獲取賬戶(hù)信息、列出容器列表等;
容器管理操作:創(chuàng)建/刪除容器、讀取容器信息、列出容器內(nèi)對(duì)象列表等;
對(duì)象管理操作:對(duì)象的寫(xiě)入、讀取、復(fù)制、更新、刪除、訪問(wèn)許可設(shè)置、元數(shù)據(jù)讀取或更新等。
由此可見(jiàn),Swift(以及S3)提供的API所操作的“對(duì)象”只有三個(gè):用戶(hù)賬戶(hù)、用戶(hù)存儲(chǔ)數(shù)據(jù)對(duì)象的容器、數(shù)據(jù)對(duì)象。并且,所有的操作均不涉及存儲(chǔ)系統(tǒng) 的底層硬件或系統(tǒng)信息。不難看出,這樣的API設(shè)計(jì)完全是針對(duì)對(duì)象存儲(chǔ)應(yīng)用開(kāi)發(fā)者和對(duì)象存儲(chǔ)應(yīng)用用戶(hù)的,并且假定其開(kāi)發(fā)者和用戶(hù)關(guān)心的內(nèi)容更偏重于賬戶(hù)和數(shù)據(jù)的管理,而對(duì)底層存儲(chǔ)系統(tǒng)細(xì)節(jié)不感興趣,更不關(guān)心效率、性能等方面的深入優(yōu)化。
而librados API的設(shè)計(jì)思想則與此完全不同。一方面,librados中沒(méi)有賬戶(hù)、容器這樣的高層概念;另一方面,librados API向開(kāi)發(fā)者開(kāi)放了大量的RADOS狀態(tài)信息與配置參數(shù),允許開(kāi)發(fā)者對(duì)RADOS系統(tǒng)以及其中存儲(chǔ)的對(duì)象的狀態(tài)進(jìn)行觀察,并強(qiáng)有力地對(duì)系統(tǒng)存儲(chǔ)策略進(jìn)行控制。換言之,通過(guò)調(diào)用librados API,應(yīng)用不僅能夠?qū)崿F(xiàn)對(duì)數(shù)據(jù)對(duì)象的操作,還能夠?qū)崿F(xiàn)對(duì)RADOS系統(tǒng)的管理和配置。這對(duì)于S3和Swift的RESTful API設(shè)計(jì)是不可想像的,也是沒(méi)有必要的。
基于上述分析對(duì)比,不難看出,librados事實(shí)上更適合對(duì)于系統(tǒng)有著深刻理解,同時(shí)對(duì)于功能定制擴(kuò)展和性能深度優(yōu)化有著強(qiáng)烈需求的高級(jí)用戶(hù)?;趌ibrados的開(kāi)發(fā)可能更適合于在私有Ceph系統(tǒng)上開(kāi)發(fā)專(zhuān)用應(yīng)用,或者為基于Ceph的公有存儲(chǔ)系統(tǒng)開(kāi)發(fā)后臺(tái)數(shù)據(jù)管理、處理應(yīng)用。而RADOS GW則更適合于常見(jiàn)的基于web的對(duì)象存儲(chǔ)應(yīng)用開(kāi)發(fā),例如公有云上的對(duì)象存儲(chǔ)服務(wù)。
4.2 RADOS的邏輯結(jié)構(gòu)
RADOS集群主要由兩種節(jié)點(diǎn)組成。一種是為數(shù)眾多的、負(fù)責(zé)完成數(shù)據(jù)存儲(chǔ)和維護(hù)功能的OSD(Object Storage Device),另一種則是若干個(gè)負(fù)責(zé)完成系統(tǒng)狀態(tài)檢測(cè)和維護(hù)的monitor。OSD和monitor之間相互傳輸節(jié)點(diǎn)狀態(tài)信息,共同得出系統(tǒng)的總體工作狀態(tài),并形成一個(gè)全局系統(tǒng)狀態(tài)記錄數(shù)據(jù)結(jié)構(gòu),即所謂的cluster map。這個(gè)數(shù)據(jù)結(jié)構(gòu)與RADOS提供的特定算法相配合,便實(shí)現(xiàn)了Ceph“無(wú)需查表,算算就好”的核心機(jī)制以及若干優(yōu)秀特性。
在使用RADOS系統(tǒng)時(shí),大量的客戶(hù)端程序通過(guò)與OSD或者monitor的交互獲取cluster map,然后直接在本地進(jìn)行計(jì)算,得出對(duì)象的存儲(chǔ)位置后,便直接與對(duì)應(yīng)的OSD通信,完成數(shù)據(jù)的各種操作。可見(jiàn),在此過(guò)程中,只要保證cluster map不頻繁更新,則客戶(hù)端顯然可以不依賴(lài)于任何元數(shù)據(jù)服務(wù)器,不進(jìn)行任何查表操作,便完成數(shù)據(jù)訪問(wèn)流程。在RADOS的運(yùn)行過(guò)程中,cluster map的更新完全取決于系統(tǒng)的狀態(tài)變化,而導(dǎo)致這一變化的常見(jiàn)事件只有兩種:OSD出現(xiàn)故障,或者RADOS規(guī)模擴(kuò)大。而正常應(yīng)用場(chǎng)景下,這兩種事件發(fā)生的頻率顯然遠(yuǎn)遠(yuǎn)低于客戶(hù)端對(duì)數(shù)據(jù)進(jìn)行訪問(wèn)的頻率。
4.3 OSD的邏輯結(jié)構(gòu)
根據(jù)定義,OSD可以被抽象為兩個(gè)組成部分,即系統(tǒng)部分和守護(hù)進(jìn)程(OSD deamon)部分。
OSD的系統(tǒng)部分本質(zhì)上就是一臺(tái)安裝了操作系統(tǒng)和文件系統(tǒng)的計(jì)算機(jī),其硬件部分至少包括一個(gè)單核的處理器、一定數(shù)量的內(nèi)存、一塊硬盤(pán)以及一張網(wǎng)卡。
由于這么小規(guī)模的x86架構(gòu)服務(wù)器并不實(shí)用(事實(shí)上也見(jiàn)不到),因而實(shí)際應(yīng)用中通常將多個(gè)OSD集中部署在一臺(tái)更大規(guī)模的服務(wù)器上。在選擇系統(tǒng)配置時(shí),應(yīng)當(dāng)能夠保證每個(gè)OSD占用一定的計(jì)算能力、一定量的內(nèi)存和一塊硬盤(pán)。同時(shí),應(yīng)當(dāng)保證該服務(wù)器具備足夠的網(wǎng)絡(luò)帶寬。具體的硬件配置選擇可以參考[4]。
在上述系統(tǒng)平臺(tái)上,每個(gè)OSD擁有一個(gè)自己的OSD deamon。這個(gè)deamon負(fù)責(zé)完成OSD的所有邏輯功能,包括與monitor和其他OSD(事實(shí)上是其他OSD的deamon)通信以維護(hù)更新系統(tǒng)狀態(tài),與其他OSD共同完成數(shù)據(jù)的存儲(chǔ)和維護(hù),與client通信完成各種數(shù)據(jù)對(duì)象操作等等。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Ceph結(jié)構(gòu)是怎么樣的”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!