席 磊
中國(guó)廣播電視網(wǎng)絡(luò)有限公司 北京市100045
隨著Openstack云平臺(tái)的快速推廣實(shí)踐,其規(guī)模也逐步擴(kuò)大,上層業(yè)務(wù)系統(tǒng)的數(shù)據(jù)總量迅速增加。傳統(tǒng)數(shù)據(jù)存儲(chǔ)方式已難以滿足當(dāng)前企業(yè)對(duì)存儲(chǔ)系統(tǒng)的需求,致使存儲(chǔ)逐漸成為了云平臺(tái)發(fā)展的瓶頸。Ceph等基于軟件定義的分布式存儲(chǔ)技術(shù)打破了傳統(tǒng)存儲(chǔ)系統(tǒng)軟硬件緊耦合的狀況,將軟件從硬件存儲(chǔ)中抽象出來(lái);將存儲(chǔ)作為云平臺(tái)中按需分配、實(shí)時(shí)調(diào)度的動(dòng)態(tài)資源;通過(guò)文件存儲(chǔ)、塊存儲(chǔ)和對(duì)象存儲(chǔ)三種不同接口方式的存儲(chǔ)類型,支撐了云平臺(tái)的多種訪問(wèn)方式;在擴(kuò)展性、伸縮性、安全性和容錯(cuò)機(jī)制等方面較之傳統(tǒng)存儲(chǔ)系統(tǒng)都有很大提升。軟件定義的分布式存儲(chǔ)系統(tǒng)正不斷替代傳統(tǒng)的存儲(chǔ)系統(tǒng),成為企業(yè)構(gòu)建云平臺(tái)的首選存儲(chǔ)架構(gòu)。
Ceph是一種開(kāi)源軟件定義分布式存儲(chǔ)系統(tǒng),因?yàn)槠鋬?yōu)秀的設(shè)計(jì)理念及統(tǒng)一存儲(chǔ)(同時(shí)提供塊、對(duì)象、文件三種接口)的特點(diǎn)被人們接受,已發(fā)展為穩(wěn)定可商用的統(tǒng)一存儲(chǔ),得到廣泛的應(yīng)用和發(fā)展,是目前云操作系統(tǒng)OpenStack環(huán)境下的主流存儲(chǔ)系統(tǒng)。
Ceph是一種為優(yōu)秀性能、可靠性和可擴(kuò)展性設(shè)計(jì)的統(tǒng)一的、分布式的存儲(chǔ)系統(tǒng)?!敖y(tǒng)一”代表Ceph具備一套存儲(chǔ)系統(tǒng)同時(shí)提供對(duì)象、塊和文件系統(tǒng)三種存儲(chǔ)接口的能力,可滿足不同應(yīng)用需求的前提下簡(jiǎn)化部署和運(yùn)維。而“分布式”則意味著真正的無(wú)中心結(jié)構(gòu)和沒(méi)有理論上限的系統(tǒng)規(guī)??蓴U(kuò)展性。
Ceph是目前OpenStack社區(qū)中最受重視的存儲(chǔ)方案,具有諸多優(yōu)勢(shì),如擴(kuò)展能力、可靠性、自維護(hù)等。文章將對(duì)Ceph的邏輯架構(gòu)、核心組件、關(guān)鍵工作流程等進(jìn)行扼要介紹。
Ceph的邏輯架構(gòu)層次參見(jiàn)圖1。自下而上的三層結(jié)構(gòu)分別如下。
圖1 Ceph存儲(chǔ)架構(gòu)圖
2.1.1 RADOS基礎(chǔ)存儲(chǔ)系統(tǒng)
可靠、自動(dòng)化、分布式的對(duì)象存儲(chǔ)(Reliable,Autonomic,Distributed Object Store)是Ceph集群的基礎(chǔ),Ceph中的一切數(shù)據(jù)最終都以對(duì)象的形式存儲(chǔ),而RADOS就是用來(lái)實(shí)現(xiàn)這些對(duì)象存儲(chǔ)的。RADOS層為數(shù)據(jù)一致性及可靠性提供保證。
2.1.2 LIBRADOS基礎(chǔ)庫(kù)層
LIBRADOS對(duì)RADOS進(jìn) 行抽象和封裝,并向上層提供API,以便直接基于RADOS進(jìn)行應(yīng)用開(kāi)發(fā),實(shí)現(xiàn)對(duì)RADOS系統(tǒng)的管理和配置。
2.1.3 應(yīng)用接口層
這一層包括RADOS GW(RADOS Gateway)、RBD(Reliable Block Device)和Ceph FS(Ceph File System)三個(gè)部分,在librados庫(kù)的基礎(chǔ)上提供抽象層次更高、更便于應(yīng)用或客戶端使用的上層接口。其中,RADOS GW提供對(duì)象存儲(chǔ)應(yīng)用開(kāi)發(fā)接口,它有與Amazon S3和OpenStack Swift兼容的接口;RBD提供標(biāo)準(zhǔn)的塊設(shè)備接口,RBD類似傳統(tǒng)的SAN存儲(chǔ),提供數(shù)據(jù)塊級(jí)別的訪問(wèn);Ceph FS提供文件存儲(chǔ)應(yīng)用開(kāi)發(fā)接口,兼容POSIX的文件系統(tǒng),可以直接掛載為用戶空間文件系統(tǒng)。
Ceph的高可用、高可靠、無(wú)單點(diǎn)故障、分布式對(duì)象存儲(chǔ)等一系列特性均由RADOS提供。RADOS主要由OSD、Monitor、MDS(只有文件系統(tǒng)才需要)三類節(jié)點(diǎn)組成。
2.2.1 OSD(Ceph對(duì)象存儲(chǔ)設(shè)備)
OSD是Ceph集群中存儲(chǔ)用戶數(shù)據(jù)并響應(yīng)客戶端讀操作請(qǐng)求的唯一組件,負(fù)責(zé)將實(shí)際數(shù)據(jù)以對(duì)象的形式存儲(chǔ)在Ceph集群節(jié)點(diǎn)的物理磁盤上,它是Ceph中最重要的一個(gè)組件。OSD的數(shù)量最多,一般與物理磁盤數(shù)量相等。OSD可以被抽象為兩個(gè)組成部分,即系統(tǒng)部分和守護(hù)進(jìn)程(OSD deamon)部分。OSD的系統(tǒng)部分實(shí)際為一臺(tái)至少包括一個(gè)單核的處理器、一定數(shù)量的內(nèi)存、一塊硬盤以及一張網(wǎng)卡的計(jì)算機(jī)。守護(hù)進(jìn)程(OSD deamon)負(fù)責(zé)完成OSD的所有邏輯功能,包括與monitor和其他OSD deamon通信以維護(hù)更新系統(tǒng)狀態(tài),與其他OSD共同完成數(shù)據(jù)的存儲(chǔ)和維護(hù),與client通信完成各種數(shù)據(jù)對(duì)象操作。
2.2.2 Monitor(Ceph監(jiān)視器)
Monitor通過(guò)一系列map(包括OSD、MONITOR、PG、CRUSH、CLUSTER等的map)跟蹤并維護(hù)整個(gè)集群的狀態(tài),Monitor不實(shí)際存儲(chǔ)數(shù)據(jù),其數(shù)量較OSD少很多。
2.2.3 MDS(元數(shù)據(jù)服務(wù)器)
MDS元數(shù)據(jù)服務(wù)器不直接提供任何數(shù)據(jù),數(shù)據(jù)都由OSD為客戶端提供。MDS用于緩存和同步分布式元數(shù)據(jù),管理文件系統(tǒng)的名稱空間。
先介紹幾個(gè)概念:
(1)File:客戶端需要存儲(chǔ)或者訪問(wèn)的對(duì)象文件。
(2)Ojbect:RADOS所 看到的“對(duì)象”。RADOS將File切分成統(tǒng)一大小得到的對(duì)象文件,以便實(shí)現(xiàn)底層存儲(chǔ)的組織管理。
(3)PG(Placement Group,歸置組):對(duì)object的存儲(chǔ)進(jìn)行組織和位置映射,可理解為一個(gè)邏輯容器,包含多個(gè)Ojbect,同時(shí)映射到多個(gè)OSD上,一個(gè)PG會(huì)被映射到n個(gè)OSD上,而每個(gè)OSD上都會(huì)承載大量的PG,PG和OSD之間是“多對(duì)多”映射關(guān)系。PG是Ceph實(shí)現(xiàn)可伸縮性及高性能的關(guān)鍵,沒(méi)有PG而直接在OSD上對(duì)數(shù)百萬(wàn)計(jì)的對(duì)象進(jìn)行復(fù)制和傳播既困難又消耗計(jì)算資源。
RADOS尋址過(guò)程中的三次映射如圖2所示,分別是:File到Object的映射、Object到PG的映射、PG到OSD的映射。
圖2 Ceph存儲(chǔ)流程示意圖
2.3.1 File到object映射
這次映射將用戶操作的file映射為RADOS能夠處理的Object。
Client客戶端先聯(lián)系Monitor節(jié)點(diǎn)并獲取cluster map副本,通過(guò)map得到集群的狀態(tài)和配置信息;將文件轉(zhuǎn)換為size一致、可以被RADOS高效管理的Object,一份Object擁有一個(gè)ID號(hào)。
2.3.2 Object到PG映射
通過(guò)將對(duì)象oid和PG共同經(jīng)過(guò)哈希函數(shù)計(jì)算,確認(rèn)對(duì)象Object存放在哪個(gè)PG中,實(shí)現(xiàn)Object和PG之間的近似均勻映射。Object和PG是多對(duì)一的關(guān)系。
2.3.3 PG到OSD映射
這次映射通過(guò)Crush算法將PG映射給存取數(shù)據(jù)的主OSD中,主OSD再備份數(shù)據(jù)到輔助OSD中。PG和OSD是多 對(duì) 多 的關(guān)系。至此,Ceph完成了從File到Object、PG和OSD的 三 次 映射過(guò)程,整個(gè)過(guò)程中客戶端通過(guò)自身計(jì)算資源進(jìn)行尋址,無(wú)需訪問(wèn)元數(shù)據(jù)服務(wù)器查表的數(shù)據(jù)尋址機(jī)制,實(shí)現(xiàn)去中心化,避免了單點(diǎn)故障、性能瓶頸、伸縮的物理限制,這種數(shù)據(jù)存儲(chǔ)和取回機(jī)制是Ceph獨(dú)有的。
大規(guī)模Ceph分布式存儲(chǔ)系統(tǒng)的規(guī)劃設(shè)計(jì)及實(shí)現(xiàn)是一個(gè)復(fù)雜的過(guò)程,要考慮的問(wèn)題很多,如不同類型(塊、文件、對(duì)象)存儲(chǔ)接口的選擇、存儲(chǔ)網(wǎng)絡(luò)設(shè)計(jì)規(guī)劃、Ceph的對(duì)接方案、硬件配置如何在性能和成本之間取得平衡等等一系列問(wèn)題,而這些都需在充分了解平臺(tái)自身業(yè)務(wù)特性的基礎(chǔ)上,提出個(gè)性化的解決方案。下面對(duì)Ceph在OpenStack云平 臺(tái) 中的 設(shè)計(jì)、優(yōu)化改進(jìn)及部署實(shí)現(xiàn)進(jìn)行論述。
ISCSI(Internet Small Computer System Interface)是 一 種成熟的技術(shù)方式,常見(jiàn)的各種系統(tǒng)(包括操作系統(tǒng)和應(yīng)用系統(tǒng))一般都對(duì)ISCSI有很好的支持。
Ceph集群支持三種形式的存儲(chǔ)接口:文件、對(duì)象、塊,其中塊接口(RBD)與SCSI塊設(shè)備讀寫所要求的接口一致,因此可以作為ISCSI服務(wù)的后端存儲(chǔ)設(shè)備?;贗SCSI的Ceph塊存儲(chǔ)在OpenStack云平臺(tái)中的實(shí)現(xiàn)方法,對(duì)接方式為Ceph分布式塊存儲(chǔ)集群通過(guò)ISCSI對(duì)接虛擬化層,虛擬化層再通過(guò)相應(yīng)驅(qū)動(dòng) 對(duì) 接OpenStack的Cinder、Nova組件,為虛擬機(jī)提供本地系統(tǒng)和數(shù)據(jù)盤服務(wù)。
ISCSI是 一 種SAN(Storage area network)協(xié)議,使用TCP/IP協(xié)議來(lái)傳遞SCSI命令與響應(yīng),它定義了SCSI指令集在IP網(wǎng)絡(luò)中傳輸?shù)姆庋b方式。ISCSI為C/S結(jié)構(gòu),客戶端稱為Initiator,服務(wù)端稱為target。
3.1.1 ISCSI target
即磁盤陣列或其他裝有磁盤的存儲(chǔ)設(shè)備。它是一個(gè)端點(diǎn),不啟動(dòng)會(huì)話,而是等待發(fā)起者的命令,并提供所需的輸入/輸出數(shù)據(jù)傳輸。
3.1.2 ISCSI initiator
就是能夠使用target的客戶端,它是啟動(dòng)SCSI會(huì)話的端點(diǎn),發(fā)送SCSI命令,通常是服務(wù)器。也就是說(shuō),想要連接到ISCSI target的服務(wù)器,必須安裝ISCSI initiator的相關(guān)功能才能夠使用ISCSI target提供的硬盤。
Ceph基 于ISCSI協(xié) 議 對(duì) 接 虛擬化層的邏輯架構(gòu)分為三層,分別是ISCSI客戶端(計(jì)算節(jié)點(diǎn))、ISCSI網(wǎng)關(guān)、Ceph集群。ISCSI target對(duì) 接Ceph的RBD接口,為上層計(jì)算節(jié)點(diǎn)ISCSI initiator提供服務(wù),實(shí)現(xiàn)計(jì)算節(jié)點(diǎn)通過(guò)ISCSI訪問(wèn)底層存儲(chǔ),進(jìn)行卷的創(chuàng)建、修改、刪除等管理性操作。如圖3所示。
圖3 ISCSI協(xié)議使用Ceph RBD基本架構(gòu)圖
圖4 ceph存儲(chǔ)網(wǎng)絡(luò)系統(tǒng)網(wǎng)絡(luò)拓?fù)鋱D
在存儲(chǔ)網(wǎng)絡(luò)規(guī)劃中,首先需將各網(wǎng)絡(luò)平面分開(kāi),一般劃分4張網(wǎng)絡(luò)平面,分別是IPMI管理網(wǎng)、千兆帶內(nèi)管理網(wǎng)、存儲(chǔ)前端網(wǎng)絡(luò)(萬(wàn)兆)、存儲(chǔ)后端網(wǎng)絡(luò)(萬(wàn)兆)。IPMI管理網(wǎng)及千兆帶內(nèi)管理網(wǎng)流量較低,我們不做討論。不論是存儲(chǔ)前端或后端網(wǎng)絡(luò),一般情況下依據(jù)各分布式存儲(chǔ)集群的數(shù)量,每個(gè)集群后端采用數(shù)量不等的48口萬(wàn)兆交換機(jī)采用兩兩級(jí)聯(lián)的方式提供服務(wù),網(wǎng)口采用雙網(wǎng)口綁定Bond4的方式提供。其中,存儲(chǔ)后端網(wǎng)絡(luò)由于存在大量的數(shù)據(jù)重構(gòu),流量極高,需要進(jìn)行針對(duì)性的設(shè)計(jì)考慮。下面介紹一種在大規(guī)模Ceph集群組網(wǎng)過(guò)程中,利用Crush分組機(jī)制避免交換機(jī)成為后端網(wǎng)絡(luò)瓶頸的設(shè)計(jì)思路。
對(duì)于節(jié)點(diǎn)數(shù)量少于48的分布式存儲(chǔ)集群,使用2臺(tái)48口萬(wàn)兆交換機(jī)AB即可,AB之間使用主備模式,各節(jié)點(diǎn)的兩萬(wàn)兆后端網(wǎng)絡(luò)也使用bond4模式進(jìn)行雙上聯(lián),后端網(wǎng)絡(luò)的重構(gòu)數(shù)據(jù)不會(huì)跨交換機(jī)流動(dòng)。
但對(duì)于節(jié)點(diǎn)數(shù)量大于48而小于96的分布式存儲(chǔ)集群,存儲(chǔ)后端存儲(chǔ)網(wǎng)絡(luò)共使用4臺(tái)48口萬(wàn)兆交換機(jī)ABCD,使用2根40Gb/s級(jí)聯(lián)線將交換機(jī)AB連接一起做堆疊,交換機(jī)CD之間同理,這種情況下,后端網(wǎng)絡(luò)的重構(gòu)數(shù)據(jù)將在交換機(jī)AB之間流動(dòng),極端情況下可能形成網(wǎng)絡(luò)擁塞。
針對(duì)該問(wèn)題,可以通過(guò)Ceph分布式集群進(jìn)行Crush分組進(jìn)行規(guī)避。以集群規(guī)模為60節(jié)點(diǎn)為例,按照20節(jié)點(diǎn)為一組,分為三組,仍提供一個(gè)數(shù)據(jù)存儲(chǔ)池。其中前2組連接一個(gè)萬(wàn)兆交換機(jī)A,第三組連接第二個(gè)萬(wàn)兆交換機(jī)B,A與B使用兩根40Gb/s級(jí) 聯(lián)線 連 接,Crush分 組原理決定了各個(gè)分組之間幾乎沒(méi)有數(shù)據(jù)流動(dòng),因?yàn)橐环輸?shù)據(jù)的副本或糾刪塊均在一個(gè)組內(nèi)。所以兩交換機(jī)之間的級(jí)聯(lián)線只會(huì)有心跳數(shù)據(jù)通過(guò),不會(huì)存在業(yè)務(wù)數(shù)據(jù)量通過(guò),也就不會(huì)成為網(wǎng)絡(luò)瓶頸。如圖5所示。
圖5 Ceph存儲(chǔ)后端網(wǎng)絡(luò)示意圖
要滿足虛擬機(jī)上各業(yè)務(wù)系統(tǒng)對(duì)所掛載的云硬盤差異化性能需求,如對(duì)IO需求、延遲大小、網(wǎng)絡(luò)吞吐能力、并發(fā)訪問(wèn)等,使用單一配置的Ceph存儲(chǔ)節(jié)點(diǎn)難以達(dá)到要求,建議在官方文檔提倡使用SSD+HDD混搭的模式的基礎(chǔ)上,將SSD和HDD以不同比例進(jìn)行混搭,形成不同能力的存儲(chǔ)資源池,從而在性能和成本之間取得平衡。具體項(xiàng)目中可通過(guò)調(diào)整Ceph分布式塊存儲(chǔ)集群Crush-Map,設(shè)置Crush ruleset來(lái)將不同類型磁盤劃分到同一個(gè)存儲(chǔ)資源池,從而制作成高速(highpool)、中速(midpool)、低速(lowpool)三組邏輯存儲(chǔ)池,對(duì)外提供不同性能的云硬盤服務(wù);并結(jié)合基于帶寬、IOPS兩種策略的QoS,達(dá)到更加合理、均衡的使用塊存儲(chǔ)服務(wù)。
如果存儲(chǔ)系統(tǒng)中存在海量小文件,每個(gè)小文件存儲(chǔ)都會(huì)執(zhí)行一次全寫流程,當(dāng)大量小文件并發(fā)訪問(wèn)時(shí),將導(dǎo)致磁盤壓力加劇,Ceph系統(tǒng)性能下降。
針對(duì)該問(wèn)題,可設(shè)計(jì)一種將小文件聚合存儲(chǔ)的功能,將小對(duì)象聚合為大的,基本思路是將新創(chuàng)建的小文件以緊密排列的方式(以4KB對(duì)齊)寫入到一類特殊的文件(聚合文件)中。在讀文件時(shí)也不再讀取小文件的對(duì)象,而是從聚合文件的對(duì)象中讀取源文件數(shù)據(jù),每個(gè)聚合文件包含多個(gè)聚合對(duì)象(4MB)??蛻舳税l(fā)送的讀請(qǐng)求會(huì)將小文件所在對(duì)象讀入緩存,提高后續(xù)小文件的緩存命中率,有效地縮短了I/O路徑。
小文件聚合存儲(chǔ)有效降低小文件寫入磁盤次數(shù)、減輕寫數(shù)據(jù)壓力;方便落盤和減少磁盤碎片化,同時(shí)提升小IO的性能;提高磁盤使用率,讀小文件時(shí)將所在對(duì)象讀入緩存,提高讀命中率、縮短讀I/O路徑。
總體而言,Ceph作為目前OpenStack環(huán)境下的最受關(guān)注的存儲(chǔ)系統(tǒng),通過(guò)有針對(duì)性的設(shè)計(jì)與優(yōu)化,可以滿足Iaas平臺(tái)對(duì)于存儲(chǔ)系統(tǒng)的需求。但Ceph在管理便捷性、性能優(yōu)化、業(yè)務(wù)場(chǎng)景適配等方面仍有許多可發(fā)掘的空間,同時(shí)企業(yè)對(duì)于自身存儲(chǔ)需求也需要不斷的發(fā)掘,最終使Ceph性能得以最大化,為企業(yè)提供更加穩(wěn)定可靠的存儲(chǔ)服務(wù)。