ceph工作原理和安裝_第1頁
ceph工作原理和安裝_第2頁
ceph工作原理和安裝_第3頁
ceph工作原理和安裝_第4頁
ceph工作原理和安裝_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、一、概述Ceph是一個分布式存儲系統(tǒng),誕生于2004年,最早致力于開發(fā)下一代高性能分布式文件系統(tǒng)的項目。隨著云計算的發(fā)展,ceph乘上了OpenStack的春風(fēng),進(jìn)而成為了開源社區(qū)受關(guān)注較高的項目之一。Ceph有以下優(yōu)勢:1. CRUSH算法Crush算法是ceph的兩大創(chuàng)新之一,簡單來說,ceph摒棄了傳統(tǒng)的集中式存儲元數(shù)據(jù)尋址的方案,轉(zhuǎn)而使用CRUSH算法完成數(shù)據(jù)的尋址操作。CRUSH在一致性哈?;A(chǔ)上很好的考慮了容災(zāi)域的隔離,能夠?qū)崿F(xiàn)各類負(fù)載的副本放置規(guī)則,例如跨機(jī)房、機(jī)架感知等。Crush算法有相當(dāng)強(qiáng)大的擴(kuò)展性,理論上支持?jǐn)?shù)千個存儲節(jié)點。2. 高可用Ceph中的數(shù)據(jù)副本數(shù)量可以由管理員

2、自行定義,并可以通過CRUSH算法指定副本的物理存儲位置以分隔故障域,支持?jǐn)?shù)據(jù)強(qiáng)一致性; ceph可以忍受多種故障場景并自動嘗試并行修復(fù)。3.  高擴(kuò)展性Ceph不同于swift,客戶端所有的讀寫操作都要經(jīng)過代理節(jié)點。一旦集群并發(fā)量增大時,代理節(jié)點很容易成為單點瓶頸。Ceph本身并沒有主控節(jié)點,擴(kuò)展起來比較容易,并且理論上,它的性能會隨著磁盤數(shù)量的增加而線性增長。4. 特性豐富Ceph支持三種調(diào)用接口:對象存儲,塊存儲,文件系統(tǒng)掛載。三種方式可以一同使用。在國內(nèi)一些公司的云環(huán)境中,通常會采用ceph作為openstack的唯一后端存儲來提升數(shù)據(jù)轉(zhuǎn)發(fā)效率。二、CEPH的基本結(jié)構(gòu)Ceph

3、的基本組成結(jié)構(gòu)如下圖:Ceph的底層是RADOS,RADOS本身也是分布式存儲系統(tǒng),CEPH所有的存儲功能都是基于RADOS實現(xiàn)。RADOS采用C+開發(fā),所提供的原生Librados API包括C和C+兩種。Ceph的上層應(yīng)用調(diào)用本機(jī)上的librados API,再由后者通過socket與RADOS集群中的其他節(jié)點通信并完成各種操作。RADOS GateWay、RBD其作用是在librados庫的基礎(chǔ)上提供抽象層次更高、更便于應(yīng)用或客戶端使用的上層接口。其中,RADOS GW是一個提供與Amazon S3和Swift兼容的RESTful API的gateway,以供相應(yīng)的對象存儲應(yīng)用開發(fā)使用。

4、RBD則提供了一個標(biāo)準(zhǔn)的塊設(shè)備接口,常用于在虛擬化的場景下為虛擬機(jī)創(chuàng)建volume。目前,Red Hat已經(jīng)將RBD驅(qū)動集成在KVM/QEMU中,以提高虛擬機(jī)訪問性能。這兩種方式目前在云計算中應(yīng)用的比較多。CEPHFS則提供了POSIX接口,用戶可直接通過客戶端掛載使用。它是內(nèi)核態(tài)的程序,所以無需調(diào)用用戶空間的librados庫。它通過內(nèi)核中的net模塊來與Rados進(jìn)行交互。三、Ceph的基本組件如上圖所示,Ceph主要有三個基本進(jìn)程· Osd用于集群中所有數(shù)據(jù)與對象的存儲。處理集群數(shù)據(jù)的復(fù)制、恢復(fù)、回填、再均衡。并向其他osd守護(hù)進(jìn)程發(fā)送心跳,然后向Mon提供一些監(jiān)控信息。當(dāng)Ce

5、ph存儲集群設(shè)定數(shù)據(jù)有兩個副本時(一共存兩份),則至少需要兩個OSD守護(hù)進(jìn)程即兩個OSD節(jié)點,集群才能達(dá)到active+clean狀態(tài)。· MDS(可選)為Ceph文件系統(tǒng)提供元數(shù)據(jù)計算、緩存與同步。在ceph中,元數(shù)據(jù)也是存儲在osd節(jié)點中的,mds類似于元數(shù)據(jù)的代理緩存服務(wù)器。MDS進(jìn)程并不是必須的進(jìn)程,只有需要使用CEPHFS時,才需要配置MDS節(jié)點。· Monitor監(jiān)控整個集群的狀態(tài),維護(hù)集群的cluster MAP二進(jìn)制表,保證集群數(shù)據(jù)的一致性。ClusterMAP描述了對象塊存儲的物理位置,以及一個將設(shè)備聚合到物理位置的桶列表。四、OSD首先描述一下ceph數(shù)

6、據(jù)的存儲過程,如下圖:無論使用哪種存儲方式(對象、塊、掛載),存儲的數(shù)據(jù)都會被切分成對象(Objects)。Objects size大小可以由管理員調(diào)整,通常為2M或4M。每個對象都會有一個唯一的OID,由ino與ono生成,雖然這些名詞看上去很復(fù)雜,其實相當(dāng)簡單。ino即是文件的File ID,用于在全局唯一標(biāo)示每一個文件,而ono則是分片的編號。比如:一個文件FileID為A,它被切成了兩個對象,一個對象編號0,另一個編號1,那么這兩個文件的oid則為A0與A1。Oid的好處是可以唯一標(biāo)示每個不同的對象,并且存儲了對象與文件的從屬關(guān)系。由于ceph的所有數(shù)據(jù)都虛擬成了整齊劃一的對象,所以在

7、讀寫時效率都會比較高。但是對象并不會直接存儲進(jìn)OSD中,因為對象的size很小,在一個大規(guī)模的集群中可能有幾百到幾千萬個對象。這么多對象光是遍歷尋址,速度都是很緩慢的;并且如果將對象直接通過某種固定映射的哈希算法映射到osd上,當(dāng)這個osd損壞時,對象無法自動遷移至其他osd上面(因為映射函數(shù)不允許)。為了解決這些問題,ceph引入了歸置組的概念,即PG。PG是一個邏輯概念,我們linux系統(tǒng)中可以直接看到對象,但是無法直接看到PG。它在數(shù)據(jù)尋址時類似于數(shù)據(jù)庫中的索引:每個對象都會固定映射進(jìn)一個PG中,所以當(dāng)我們要尋找一個對象時,只需要先找到對象所屬的PG,然后遍歷這個PG就可以了,無需遍歷所

8、有對象。而且在數(shù)據(jù)遷移時,也是以PG作為基本單位進(jìn)行遷移,ceph不會直接操作對象。對象時如何映射進(jìn)PG的?還記得OID么?首先使用靜態(tài)hash函數(shù)對OID做hash取出特征碼,用特征碼與PG的數(shù)量去模,得到的序號則是PGID。由于這種設(shè)計方式,PG的數(shù)量多寡直接決定了數(shù)據(jù)分布的均勻性,所以合理設(shè)置的PG數(shù)量可以很好的提升CEPH集群的性能并使數(shù)據(jù)均勻分布。最后PG會根據(jù)管理員設(shè)置的副本數(shù)量進(jìn)行復(fù)制,然后通過crush算法存儲到不同的OSD節(jié)點上(其實是把PG中的所有對象存儲到節(jié)點上),第一個osd節(jié)點即為主節(jié)點,其余均為從節(jié)點。下面是一段ceph中的偽代碼,簡要描述了ceph的數(shù)據(jù)存儲流程l

9、ocator = object_nameobj_hash =  hash(locator)pg = obj_hash % num_pgosds_for_pg = crush(pg)    # returns a list of osdsprimary = osds_for_pg0replicas = osds_for_pg1:上圖中更好的詮釋了ceph數(shù)據(jù)流的存儲過程,數(shù)據(jù)無論是從三中接口哪一種寫入的,最終都要切分成對象存儲到底層的RADOS中。邏輯上通過算法先映射到PG上,最終存儲近OSD節(jié)點里。圖中除了之前介紹過的概念之外多了一個pools的概念。Pool是管

10、理員自定義的命名空間,像其他的命名空間一樣,用來隔離對象與PG。我們在調(diào)用API存儲即使用對象存儲時,需要指定對象要存儲進(jìn)哪一個POOL中。除了隔離數(shù)據(jù),我們也可以分別對不同的POOL設(shè)置不同的優(yōu)化策略,比如副本數(shù)、數(shù)據(jù)清洗次數(shù)、數(shù)據(jù)塊及對象大小等。OSD是強(qiáng)一致性的分布式存儲,它的讀寫流程如下圖Ceph的讀寫操作采用主從模型,客戶端要讀寫數(shù)據(jù)時,只能向?qū)ο笏鶎?yīng)的主osd節(jié)點發(fā)起請求。主節(jié)點在接受到寫請求時,會同步的向從OSD中寫入數(shù)據(jù)。當(dāng)所有的OSD節(jié)點都寫入完成后,主節(jié)點才會向客戶端報告寫入完成的信息。因此保證了主從節(jié)點數(shù)據(jù)的高度一致性。而讀取的時候,客戶端也只會向主osd節(jié)點發(fā)起讀請求

11、,并不會有類似于數(shù)據(jù)庫中的讀寫分離的情況出現(xiàn),這也是出于強(qiáng)一致性的考慮。由于所有寫操作都要交給主osd節(jié)點來處理,所以在數(shù)據(jù)量很大時,性能可能會比較慢,為了克服這個問題以及讓ceph能支持事物,每個osd節(jié)點都包含了一個journal文件,稍后介紹。數(shù)據(jù)流向介紹到這里就告一段落了,現(xiàn)在終于回到正題:osd進(jìn)程。在ceph中,每一個osd進(jìn)程都可稱作是一個osd節(jié)點,也就是說,每臺存儲服務(wù)器上可能包含了眾多的osd節(jié)點,每個osd節(jié)點監(jiān)聽不同的端口,類似于在同一臺服務(wù)器上跑多個mysql或redis。每個osd節(jié)點可以設(shè)置一個目錄作為實際存儲區(qū)域,也可以是一個分區(qū),一整塊硬盤。如下圖,當(dāng)前這臺機(jī)

12、器上跑了兩個osd進(jìn)程,每個osd監(jiān)聽4個端口,分別用于接收客戶請求、傳輸數(shù)據(jù)、發(fā)送心跳、同步數(shù)據(jù)等操作。如上圖所示,osd節(jié)點默認(rèn)監(jiān)聽tcp的6800到6803端口,如果同一臺服務(wù)器上有多個osd節(jié)點,則依次往后排序。在生產(chǎn)環(huán)境中的osd最少可能都有上百個,所以每個osd都有一個全局的編號,類似osd0,osd1,osd2.序號根據(jù)osd誕生的順序排列,并且是全局唯一的。存儲了相同PG的osd節(jié)點除了向mon節(jié)點發(fā)送心跳外,還會互相發(fā)送心跳信息以檢測pg數(shù)據(jù)副本是否正常。之前在介紹數(shù)據(jù)流向時說過,每個osd節(jié)點都包含一個journal文件,如下圖:默認(rèn)大小為5G,也就說每創(chuàng)建一個osd節(jié)點,

13、還沒使用就要被journal占走5G的空間。這個值是可以調(diào)整的,具體大小要依osd的總大小而定。Journal的作用類似于mysql innodb引擎中的事物日志系統(tǒng)。當(dāng)有突發(fā)的大量寫入操作時,ceph可以先把一些零散的,隨機(jī)的IO請求保存到緩存中進(jìn)行合并,然后再統(tǒng)一向內(nèi)核發(fā)起IO請求。這樣做效率會比較高,但是一旦osd節(jié)點崩潰,緩存中的數(shù)據(jù)就會丟失,所以數(shù)據(jù)在還未寫進(jìn)硬盤中時,都會記錄到j(luò)ournal中,當(dāng)osd崩潰后重新啟動時,會自動嘗試從journal恢復(fù)因崩潰丟失的緩存數(shù)據(jù)。因此journal的io是非常密集的,而且由于一個數(shù)據(jù)要io兩次,很大程度上也損耗了硬件的io性能,所以通常在生

14、產(chǎn)環(huán)境中,使用ssd來單獨(dú)存儲journal文件以提高ceph讀寫性能。五、monitor節(jié)點Mon節(jié)點監(jiān)控著整個ceph集群的狀態(tài)信息,監(jiān)聽于tcp的6789端口。每一個ceph集群中至少要有一個Mon節(jié)點,官方推薦每個集群至少部署三臺。Mon節(jié)點中保存了最新的版本集群數(shù)據(jù)分布圖(cluster map)的主副本。客戶端在使用時,需要掛載mon節(jié)點的6789端口,下載最新的cluster map,通過crush算法獲得集群中各osd的IP地址,然后再與osd節(jié)點直接建立連接來傳輸數(shù)據(jù)。所以對于ceph來說,并不需要有集中式的主節(jié)點用于計算與尋址,客戶端分?jǐn)偭诉@部分工作。而且客戶端也可以直接和

15、osd通信,省去了中間代理服務(wù)器的額外開銷。Mon節(jié)點之間使用Paxos算法來保持各節(jié)點cluster map的一致性;各mon節(jié)點的功能總體上是一樣的,相互間的關(guān)系可以被簡單理解為主備關(guān)系。如果主mon節(jié)點損壞,其他mon存活節(jié)點超過半數(shù)時,集群還可以正常運(yùn)行。當(dāng)故障mon節(jié)點恢復(fù)時,會主動向其他mon節(jié)點拉取最新的cluster map。Mon節(jié)點并不會主動輪詢各個osd的當(dāng)前狀態(tài),相反,osd只有在一些特殊情況才會上報自己的信息,平常只會簡單的發(fā)送心跳。特殊情況包括:1、新的OSD被加入集群;2、某個OSD發(fā)現(xiàn)自身或其他OSD發(fā)生異常。Mon節(jié)點在收到這些上報信息時,則會更新cluste

16、r map信息并加以擴(kuò)散。cluster map信息是以異步且lazy的形式擴(kuò)散的。monitor并不會在每一次cluster map版本更新后都將新版本廣播至全體OSD,而是在有OSD向自己上報信息時,將更新回復(fù)給對方。類似的,各個OSD也是在和其他OSD通信時,如果發(fā)現(xiàn)對方的osd中持有的cluster map版本較低,則把自己更新的版本發(fā)送給對方。推薦使用以下的架構(gòu)這里的ceph除了管理網(wǎng)段外,設(shè)了兩個網(wǎng)段,一個用于客戶端讀寫傳輸數(shù)據(jù)。另一個用于各OSD節(jié)點之間同步數(shù)據(jù)和發(fā)送心跳信息等。這樣做的好處是可以分擔(dān)網(wǎng)卡的IO壓力。否則在數(shù)據(jù)清洗時,客戶端的讀寫速度會變得極為緩慢。六、MDSMd

17、s是ceph集群中的元數(shù)據(jù)服務(wù)器,而通常它都不是必須的,因為只有在使用cephfs的時候才需要它,而目在云計算中用的更廣泛的是另外兩種存儲方式。Mds雖然是元數(shù)據(jù)服務(wù)器,但是它不負(fù)責(zé)存儲元數(shù)據(jù),元數(shù)據(jù)也是被切成對象存在各個osd節(jié)點中的,如下圖:在創(chuàng)建CEPHFS時,要至少創(chuàng)建兩個POOL,一個用于存放數(shù)據(jù),另一個用于存放元數(shù)據(jù)。Mds只是負(fù)責(zé)接受用戶的元數(shù)據(jù)查詢請求,然后從osd中把數(shù)據(jù)取出來映射進(jìn)自己的內(nèi)存中供客戶訪問。所以mds其實類似一個代理緩存服務(wù)器,替osd分擔(dān)了用戶的訪問壓力,如下圖:七、cephfs的簡易安裝在安裝ceph之前推薦把所有的ceph節(jié)點設(shè)置成無需密碼ssh互訪,配

18、置hosts支持主機(jī)名互訪,同步好時間,并關(guān)閉iptables和selinux。、實驗環(huán)境說明:當(dāng)前實驗環(huán)境使用了4臺主機(jī)node1node4,node1為管理節(jié)點。2、部署工具:Ceph官方推出了一個用python寫的工具 cpeh-deploy,可以很大的簡化ceph集群的配置過程,建議大家用用。它的yum倉庫地址,下載地址如下:3、安裝步驟· 在管理主機(jī)上安裝工具(通常是跳板機(jī))yum install -y ceph-deploy· 創(chuàng)建工作目錄,用于存放生成的配置文件和秘鑰等信息Mkdir /ceph;cd /ceph· 下載yum源,下載地址如下

19、3; 在node14上把上面的網(wǎng)址設(shè)置為yum源yum install y ceph· 到管理主機(jī)上的/ceph目錄操作,創(chuàng)建一個新集群,并設(shè)置node1為mon節(jié)點· ceph-deploy new node1·執(zhí)行完畢后,可以看到/ceph目錄中生成了三個文件,其中有一個配置文件可以做各種參數(shù)優(yōu)化,據(jù)說ceph的優(yōu)化參數(shù)接近1000項。(注意,在osd進(jìn)程生成并掛載使用后,想修改配置需要使用命令行工具,修改配置文件是無效的,所以需要提前規(guī)劃好優(yōu)化的參數(shù)。)· 在ceph.conf中添加四個最基本的設(shè)置· echo "osd poo

20、l default size = 4" >> ceph.conf· echo "osd_pool_default_min_size = 3" >> ceph.conf· echo "public network = 192.168.120.0/24" >> ceph.conf· echo "cluster network =  10.0.0.0/8" >> ceph.conf· 設(shè)置每個pool默認(rèn)的副本數(shù)是兩個(所有文件一共存

21、四份,如果不設(shè)置此項則默認(rèn)為三份副本);設(shè)置最小副本數(shù)為3,也就是說,4份副本的環(huán)境下有一個副本損壞了,其他osd可以照常相應(yīng)用戶的讀寫請求;設(shè)置公共網(wǎng)絡(luò)地址段,即用于相應(yīng)客戶讀寫的網(wǎng)段;設(shè)置集群工作網(wǎng)段,用于集群同步數(shù)據(jù)、發(fā)送心跳等使用的網(wǎng)段。· 激活監(jiān)控節(jié)點ceph-deploy mon create-initial· 接下來創(chuàng)建osd節(jié)點,本例中使用整個分區(qū)作為osd節(jié)點的物理存儲區(qū)域· ceph-deploy osd prepare node2:/dev/sdb1 node3:/dev/sdb1 node4:/dev/sdb1ceph-deploy osd prepare node2:/dev/sdb1 node3:/dev/sdb1 node4:/dev/sdb1· 將管理節(jié)點上的配置文件同步到其他節(jié)點上ceph-deploy -overwrite-conf

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論