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