Ceph是最近開(kāi)源系統(tǒng)中很火的一個(gè)項(xiàng)目,基于Sage Weil的一片博士論文發(fā)展而來(lái)的一個(gè)分布式文件系統(tǒng),可提供PB級(jí),動(dòng)態(tài)可擴(kuò)展,數(shù)據(jù)安全可靠的存儲(chǔ)服務(wù)。Ceph提供分布式存儲(chǔ)服務(wù)包括:塊存儲(chǔ)RBD,對(duì)象存儲(chǔ)RADOSGW和CephFS三種,基本覆蓋了絕大部分企業(yè)對(duì)存儲(chǔ)的需求,所以越來(lái)越多企業(yè)加入到使用Ceph的行列。在國(guó)內(nèi)也有越來(lái)越多的個(gè)人和企業(yè)參與到Ceph的研發(fā)中,貢獻(xiàn)自己的力量。
首先,我們來(lái)看下Ceph系統(tǒng)的整體架構(gòu):
如上圖所示,有如下幾部分:
1). RADOS: Ceph的核心模塊,提供固定大小的Object存儲(chǔ)
2). LIBRADOS: RADOS的library,提供C, C++, Java, Python, Ruby, PHP的API訪問(wèn)RADOS
3). RADOSGW: Rados GateWay,基于bucket策略,提供一個(gè)兼容S3和Swift的的REST gateway
4). RBD: 提供可靠的分布式塊存儲(chǔ)服務(wù),結(jié)合Openstack,應(yīng)用非常之廣
5). CEPH FS:提供POSIX協(xié)議的文件系統(tǒng)服務(wù)
從上面可以看出,RADOS是Ceph的核心,它主要由MDS + OSD組成,下圖描述的即是一個(gè)個(gè)笑臉(object)如何存儲(chǔ)到OSDs中:
Client端會(huì)跟Monitors通信,獲取Cluster Maps信息,然后通過(guò)固定的算法算出每個(gè)Object存儲(chǔ)的OSD位置,直接與OSD通信,寫(xiě)入Object數(shù)據(jù)。
這里Ceph的一大優(yōu)勢(shì)很好的體現(xiàn)出來(lái):無(wú)需元數(shù)據(jù)服務(wù)器節(jié)點(diǎn),所有都是“無(wú)需查表,算算就好”!
前面我們提到了Ceph是一個(gè)動(dòng)態(tài)可擴(kuò)展,數(shù)據(jù)安全可靠的存儲(chǔ)服務(wù),現(xiàn)在我們逐一來(lái)討論下Ceph作為一個(gè)分布式系統(tǒng)必須的三種特性:
1). 高擴(kuò)展性
針對(duì)集群的擴(kuò)容需求,Ceph支持OSD和Monitor集群的動(dòng)態(tài)可擴(kuò)容,并通過(guò)兩層Map機(jī)制[(pool, object) -> (pool, PG) -> OSD set)來(lái)有效的隔離了集群擴(kuò)容對(duì)上層client的影響,提供了很好的擴(kuò)展性。這樣我們可以利用大量的低配置設(shè)備輕松的搭建出PB甚至EB級(jí)的存儲(chǔ)系統(tǒng)。
上圖描述了Client段的一個(gè)File如何經(jīng)過(guò)多層的映射,寫(xiě)入到OSDs中的,也正是這多層映射和CRUSH算法,保證了Ceph的高擴(kuò)展行。在PG數(shù)不變的情況下,底層OSD的擴(kuò)展對(duì)Client端是完全透明的。
2). 高可靠性
針對(duì)數(shù)據(jù)的安全可靠,Ceph會(huì)在集群中存儲(chǔ)同一數(shù)據(jù)的多個(gè)副本(或者其他類型的冗余,例如erasure code),來(lái)保證在某些設(shè)備故障后,用戶存入的數(shù)據(jù)還可用,針對(duì)用戶不同的高可用需求,Ceph可以很方便的設(shè)置Pool的數(shù)據(jù)冗余規(guī)則,另外通過(guò)Ceph Crushmap,用戶也可以方便的設(shè)置各個(gè)備份之間存儲(chǔ)位置的邏輯關(guān)系,比如達(dá)到多個(gè)副本跨機(jī)房、跨機(jī)架、跨機(jī)器等目的,提高集群的數(shù)據(jù)可靠性。
另外Ceph能自動(dòng)探測(cè)到OSD/Monitor/MDS的故障,并自行恢復(fù),有效減少了單設(shè)備節(jié)點(diǎn)的穩(wěn)定性對(duì)集群的影響。
下圖是Ceph中一個(gè)寫(xiě)IO的流程,保證數(shù)據(jù)的強(qiáng)一致性:
從圖中可以明顯的看出,Ceph的寫(xiě)會(huì)由Client發(fā)給Primary OSD,由Primary OSD發(fā)送副本給Replica OSD上,而只有所有的副本都寫(xiě)完成后,寫(xiě)IO才算完成,保證了數(shù)據(jù)的一致性和高可靠性。
3). 高性能
Ceph中通過(guò)文件切分和CRUSH算法,保證數(shù)據(jù)chunk分布基本均衡,同時(shí)Ceph的無(wú)元數(shù)據(jù)信息的設(shè)計(jì)(CephFS除外),保證了Client可以根據(jù)cluster map,通過(guò)固定算法確定數(shù)據(jù)的位置信息,避免了單個(gè)元數(shù)據(jù)節(jié)點(diǎn)的性能瓶頸,可以提供非常高的并行化IO性能。
如上圖所示,Client端數(shù)據(jù)經(jīng)過(guò)切分為Objects后,可以同時(shí)與多個(gè)OSDs交互,寫(xiě)入數(shù)據(jù)。
前面大致介紹了Ceph系統(tǒng)的原理和架構(gòu),那我們?yōu)槭裁催x擇Ceph呢?
對(duì)比現(xiàn)有的一些其他的分布式存儲(chǔ)系統(tǒng),Ceph有如下優(yōu)點(diǎn):
1). 完全的開(kāi)源系統(tǒng)
2). 能提供塊存儲(chǔ),對(duì)象存儲(chǔ)和文件系統(tǒng)存儲(chǔ)的統(tǒng)一架構(gòu)
3). 設(shè)計(jì)理念先進(jìn),是個(gè)高擴(kuò)展,高可用,高性能的分布式文件系統(tǒng)
4). 與Openstack完美結(jié)合,社區(qū)支持好
5). Ceph社區(qū)活躍度很大
總之,作為一個(gè)比較完善的分布式存儲(chǔ)系統(tǒng),Ceph能滿足絕大多數(shù)企業(yè)的存儲(chǔ)需求,同時(shí)它也提供了足夠多的配置選項(xiàng),給用戶根據(jù)需求定制化自己的存儲(chǔ)系統(tǒng)。
上面大致介紹了Ceph的原理架構(gòu)和設(shè)計(jì)理念,下面我們來(lái)介紹下Ceph在云英的具體實(shí)踐,給大家一個(gè)真實(shí)的感受。
首先說(shuō)一下云英,云英的全稱是北京云英傳奇技術(shù)有限公司。我們是一家專注于為創(chuàng)客和行業(yè)客戶提供云計(jì)算服務(wù)的公司,我們提供的有公有云和私有云服務(wù),包括IAAS和PAAS層產(chǎn)品,網(wǎng)址為:www.cloudin.cn
在云計(jì)算的技術(shù)上我們選擇了openstack + ceph的架構(gòu),基于之上實(shí)現(xiàn)了我們自己的邏輯和特色功能,包括云監(jiān)控,自動(dòng)化運(yùn)維,RDS等服務(wù)。針對(duì)這么多應(yīng)用,絕大部分服務(wù)的數(shù)據(jù)都依靠Ceph系統(tǒng)提供可靠的存儲(chǔ)服務(wù),在應(yīng)用實(shí)踐中,針對(duì)我們自己的系統(tǒng)架構(gòu)和機(jī)房部署,我們對(duì)Ceph也進(jìn)行了部分調(diào)優(yōu)和優(yōu)化,達(dá)到了我們的應(yīng)用需求。
下面我們來(lái)介紹下Ceph存儲(chǔ)在云英的應(yīng)用,大致可以分為如下幾種:
- RBD塊存儲(chǔ)服務(wù)
- CephFS提供服務(wù)器間數(shù)據(jù)共享
- RADOSGW提供對(duì)象存儲(chǔ)服務(wù)
- Ceph的性能測(cè)試
- Ceph的優(yōu)化
- Ceph的監(jiān)控
首先我們先介紹下第一項(xiàng)。
- RBD塊存儲(chǔ)服務(wù)
我們的塊存儲(chǔ)服務(wù)主要給Openstack組件使用,分為如下幾類:
- Glance鏡像存儲(chǔ)
- Nova instance數(shù)據(jù)存儲(chǔ)
- Cinder volume存儲(chǔ)
- Backup服務(wù)
應(yīng)用中,把Openstack的Glance組件image和Nova instance數(shù)據(jù)一起存儲(chǔ)到Ceph集群中,可以很好的避免Openstack創(chuàng)建虛擬機(jī)時(shí)的image復(fù)制,并且利用Ceph RBD的snapshot功能,基本可以實(shí)現(xiàn)秒級(jí)創(chuàng)建Nova instance。
同樣利用RBD的snapshot功能,可以有效的減少Cinder Volume,Nova instance的備份創(chuàng)建時(shí)間和空間占用。
另外因?yàn)镃eph底層是一個(gè)共享存儲(chǔ),所以基于此可以便利的實(shí)現(xiàn)Nova instance的熱遷移功能,縮短了虛擬機(jī)熱遷移導(dǎo)致的服務(wù)停頓時(shí)間。
整個(gè)應(yīng)用場(chǎng)景如下圖所示,Ceph作為了一個(gè)統(tǒng)一存儲(chǔ),對(duì)Openstack各個(gè)組件提供服務(wù):
- CephFS提供服務(wù)器間數(shù)據(jù)共享
CephFS是基于Rados實(shí)現(xiàn)的PB級(jí)分布式文件系統(tǒng),這里引入了一個(gè)新的組件MDS(Meta Data Server),它主要為兼容POSIX文件系統(tǒng)提供元數(shù)據(jù),如目錄和文件元數(shù)據(jù)。同時(shí),MDS會(huì)將元數(shù)據(jù)也存在RADOS(Ceph Cluster)中。元數(shù)據(jù)存儲(chǔ)在RADOS中后,元數(shù)據(jù)本身也達(dá)到了并行化,大大加強(qiáng)了文件操作的速度。需要注意的是MDS并不會(huì)直接為Client提供文件數(shù)據(jù),而只是為Client提供元數(shù)據(jù)的操作。
在我們的生產(chǎn)環(huán)境中,遇到過(guò)服務(wù)器間共享數(shù)據(jù)的需求。之前的思路可以通過(guò)NFS來(lái)實(shí)現(xiàn),現(xiàn)在基于CephFS,可以輕松的滿足需求。雖說(shuō)我們用的版本Hammer中,Ceph官方?jīng)]說(shuō)CephFS完善到可用于生產(chǎn)環(huán)境,但也是經(jīng)過(guò)大規(guī)模測(cè)試后的版本,據(jù)說(shuō)在雅虎也有大規(guī)模使用的集群,另外我們共享的數(shù)據(jù)對(duì)可靠性沒(méi)那么大要求,IO量也不是很大,所以CephFS已經(jīng)能很好的滿足我們的需求了。
最近Ceph發(fā)布的JEWEL版本是官方聲稱的第一個(gè)CephFS穩(wěn)定版本,如果對(duì)CephFS有強(qiáng)烈需求的話,可以部署最新的JEWEL版本。
另外部署中最好使用單MDS的方式,雖說(shuō)Ceph支持MDS集群和很多很酷的特性,比如負(fù)載均衡,動(dòng)態(tài)子樹(shù)遷移,故障恢復(fù)等,但MDS集群還不是Ceph官方的推薦。
- RADOSGW提供對(duì)象存儲(chǔ)服務(wù)
RadosGW是基于Librados之上實(shí)現(xiàn)的,它主要提供兼容S3、Swfit的RESTful接口。同時(shí)RadosGW提供了Bucket的命名空間(類似于文件夾)和賬戶支持,并且具備用于賬單目的使用記錄。相對(duì)的,它增加了Http協(xié)議的負(fù)載。
RadosGW使得Ceph Cluster有了分布式對(duì)象存儲(chǔ)的能力,如上面提到的Amazon S3和Swift等。企業(yè)也可以直接使用其作為數(shù)據(jù)存儲(chǔ)或備份等用途。
RADOSGW在云英主要應(yīng)用于以下兩方面:
1). RDS的數(shù)據(jù)備份存儲(chǔ)
RDS服務(wù)是云英提供的一項(xiàng)的MySQL服務(wù),我們保證了MySQL的高可用和性能,用戶只需創(chuàng)建自己的RDS服務(wù)即可使用,而不用麻煩的自己搭建MySQL服務(wù)并配置其高可用等特性。
在RDS服務(wù)中,用戶會(huì)有創(chuàng)建MySQL備份的需求,而這種備份是最適合對(duì)象存儲(chǔ)的,我們自己實(shí)現(xiàn)了RDS的S3備份接口,把RDS的備份數(shù)據(jù)上傳到兼容S3的RADOSGW中。這樣使用統(tǒng)一的Ceph系統(tǒng),我們就不需要再搭建一套Swift對(duì)象存儲(chǔ)系統(tǒng)了,簡(jiǎn)化了公司的運(yùn)維成本。
2). 對(duì)象存儲(chǔ)服務(wù)
Object Storage Service是很重要的一項(xiàng)存儲(chǔ)服務(wù),越來(lái)越多的應(yīng)用都開(kāi)始使用便利的對(duì)象存儲(chǔ)來(lái)存儲(chǔ)數(shù)據(jù)。Openstack源生的對(duì)象存儲(chǔ)服務(wù)系統(tǒng)是Swift,對(duì)比Ceph,Swift可以便利的搭建部署,但它也有自己的劣勢(shì),我們也不想同時(shí)維護(hù)兩套存儲(chǔ)系統(tǒng),所以我們就選擇RADOSGW提供兼容S3和Swift的對(duì)象存儲(chǔ)服務(wù)。
- Ceph的性能測(cè)試
為了做到心中有數(shù),我們需要在現(xiàn)有硬件配置條件下,測(cè)試Ceph的性能,看是否滿足我們的期望。
結(jié)合網(wǎng)上的參考,Ceph性能測(cè)試可分為如下幾類:
1). RADOS性能測(cè)試
rados bench 命令
rados load-gen 命令
2). rbd塊設(shè)備性能測(cè)試
rbd bench-write 命令
3). fio工具測(cè)試:
fio + rbd ioengine 測(cè)試
fio + libaio 測(cè)試
在云英的應(yīng)用中,Ceph主要提供的是rbd塊設(shè)備,所以經(jīng)過(guò)評(píng)估,我們選擇了比較貼合實(shí)際應(yīng)用的方式,使用fio + libaio的測(cè)試方法來(lái)測(cè)試虛擬機(jī)中云硬盤(pán)的性能。
為此我們寫(xiě)了一系列的測(cè)試腳本來(lái)自動(dòng)化測(cè)試和分析測(cè)試結(jié)果,結(jié)合Ceph的參數(shù)優(yōu)化,給出實(shí)際的性能參考。
當(dāng)然,測(cè)試并不是一帆風(fēng)順的,測(cè)試中的我們也會(huì)遇到一些問(wèn)題,也會(huì)做一些調(diào)整,這里分享下常見(jiàn)的幾個(gè)注意事項(xiàng):
1). 云硬盤(pán)需要先dd一遍后再測(cè)試
2). 每輪測(cè)試前清空虛擬機(jī)的緩存數(shù)據(jù)
3). 每輪測(cè)試前清空物理服務(wù)器的緩存數(shù)據(jù)
4). 每輪測(cè)試中通過(guò)iostat命令搜集磁盤(pán)負(fù)載數(shù)據(jù)
5). 測(cè)試獲取順序讀寫(xiě)的bandwidth和隨機(jī)讀寫(xiě)的iops
6). 獨(dú)占系統(tǒng),防止產(chǎn)生干擾
7). 每輪測(cè)試后分析測(cè)試數(shù)據(jù),找到系統(tǒng)評(píng)價(jià)和優(yōu)化可能性
測(cè)試統(tǒng)計(jì)結(jié)果樣本如下:
device: /dev/rbd1
ioengine: libaio size: 1000 runtime: 300
models: randread randwrite
mixread: 50
blocks: 4
iodepth: 2
numjobs: 1
processes: 1 2 4
rate: , ratemin:
rate_iops: 100, rate_iops_min:
host: 10.10.0.12 10.10.0.13 10.10.0.14 10.10.0.15
hosts,model,mixread,bs,iodepth,numjobs,r-bw(KB/s),r-iops,r-avglat(msec),w-bw(KB/s),w-iops,w-avglat(msec)
1,randread,/,4,2,1,1329.03,331,24.13,0,0,0
1,randwrite,/,4,2,1,0,0,0,1437.01,356,15.14
2,randread,/,4,2,1,3187.00,792,2.41,0,0,0
2,randwrite,/,4,2,1,0,0,0,3175.73,792,13.54
4,randread,/,4,2,1,6399.24,1591,1.72,0,0,0
4,randwrite,/,4,2,1,0,0,0,6344.70,1582,15.95
上述測(cè)試結(jié)果可以方便的導(dǎo)出到excel,制作成表格進(jìn)行分析對(duì)比:
- Ceph的優(yōu)化
我們前面說(shuō)過(guò),Ceph提供了很多的配置參數(shù)來(lái)允許用戶訂制自己的分布式存儲(chǔ)系統(tǒng),在賦予用戶這個(gè)便利性的同時(shí),也意味著如果用戶想獲取自己系統(tǒng)的最大性能時(shí),必須自己進(jìn)行分析調(diào)優(yōu)。
Ceph是一個(gè)復(fù)雜的系統(tǒng),官方的默認(rèn)配置能保證系統(tǒng)基本運(yùn)行,但是不能貼合用戶實(shí)際需求,達(dá)到最大化用戶物理系統(tǒng)性能的要求。雖說(shuō)現(xiàn)在也已經(jīng)有了一些朋友分享Ceph的配置參考和調(diào)優(yōu),但對(duì)每個(gè)用戶來(lái)說(shuō)都不是拿來(lái)主義。他們只是提供了一種優(yōu)化的參考,具體的效果如何還需要用戶貼合自己的實(shí)際測(cè)試結(jié)果來(lái)調(diào)整。
對(duì)于云英來(lái)說(shuō),我們的物理機(jī)配置是相當(dāng)前衛(wèi)的,用于Ceph系統(tǒng)的物理機(jī)硬件配置大致如下:
1). 200G+內(nèi)存
3). 1:3的SSD和SATA配比,SSD分區(qū)做Journal,SATA盤(pán)做OSD
3). PCIE的存儲(chǔ)卡提供超高性能存儲(chǔ)Pool
4). 萬(wàn)兆網(wǎng)卡提供Ceph的Cluster Network通信
5). 千兆網(wǎng)卡提供Ceph的Public Network通信
參考網(wǎng)上朋友的Ceph配置和調(diào)優(yōu)參數(shù)后,結(jié)合我們的經(jīng)驗(yàn)和測(cè)試分析,我們做了適合自己的獨(dú)特優(yōu)化,對(duì)比各種調(diào)優(yōu)項(xiàng)前后,很好的達(dá)到我們的要求。
依據(jù)我們的經(jīng)驗(yàn),可以在以下幾個(gè)方面做Ceph的性能調(diào)優(yōu):
1). BIOS設(shè)置:
關(guān)閉CPU節(jié)能
關(guān)閉NUMA
2). Linux參數(shù)調(diào)優(yōu)
CPU設(shè)置為performance模式
調(diào)整內(nèi)核的pid_max限制
調(diào)整SATA/SSD IO Scheduler
調(diào)整磁盤(pán)的read_ahead_kb大小
3). XFS相關(guān)
xfs mkfs options
xfs mount options
4). filestore調(diào)整
filestore fd cache size
filestore omap header cache size
filestore queue相關(guān)參數(shù)
filestore wbthrottle相關(guān)參數(shù)
object size
5). journal
性能高的SSD分區(qū)做journal
journal size > 5G
journal queue
6). osd相關(guān)
osd上PG總數(shù)限制
osd op threads
osd recovery threads
7). crushmap優(yōu)化
給osd劃分合理的pools
故障域切分,降低數(shù)據(jù)丟失概率
- Ceph的監(jiān)控
對(duì)于一個(gè)大型系統(tǒng)來(lái)說(shuō),完善的監(jiān)控很重要,我們不可能時(shí)刻靠人工來(lái)發(fā)現(xiàn)系統(tǒng)的問(wèn)題。
針對(duì)Ceph系統(tǒng),我們調(diào)研了很多種方案,主要有如下幾種:
1). Ceph官方的Calamari(已一年多沒(méi)有提交)
2). Intel的VSM
3). Ceph-Dash
4). Inkscope
5). 定制化的Diamond + Grafana
6). Ceph Collectd + Grafana
最后選擇了適合我們的,方便我們擴(kuò)展的一種。即:Diamond + Graphite + Grafana,下面介紹一下這些組件:
1). Diamond是一個(gè)客戶端性能收集工具,Python編寫(xiě),易與擴(kuò)展。
2). Graphite是一個(gè)Python編寫(xiě)的企業(yè)級(jí)開(kāi)源監(jiān)控工具,采用django框架。
3). Grafana是功能齊全的度量?jī)x表盤(pán)和圖形編輯器,支持Graphite,InfluxDB和OpenTSDB。
部署后,我們可以在Grafana的前端訂制我們自己的監(jiān)控項(xiàng),類似下圖:
另外,Ceph進(jìn)程的監(jiān)控,集群狀態(tài)的監(jiān)控,我們通過(guò)自己寫(xiě)的腳本,完美的集成到Zabbix系統(tǒng),實(shí)現(xiàn)了Ceph系統(tǒng)有問(wèn)題的實(shí)時(shí)通知。
我們的腳本監(jiān)控主要有如下幾個(gè)方面:
1). Ceph狀態(tài)和空間使用率的監(jiān)控
2). OSD狀態(tài)的監(jiān)控和自動(dòng)拉起
3). Monitor狀態(tài)的監(jiān)控和自動(dòng)拉起
4). PG狀態(tài)的監(jiān)控和報(bào)警
5). Slow Requests的監(jiān)控和報(bào)警
總之,Ceph是一個(gè)大型的完善的分布式系統(tǒng),對(duì)它的研究和優(yōu)化是一個(gè)持續(xù)的過(guò)程。
審核編輯:郭婷
評(píng)論
查看更多