解辰輝,劉承亮,曲左陽
(中國鐵道科學(xué)研究院集團(tuán)有限公司 電子計算技術(shù)研究所,北京 100081)
OpenStack是目前流行的開源云平臺技術(shù),是企業(yè)實現(xiàn)私有云平臺提供IaaS形式服務(wù)的重要解決方案[1]。OpenStack所包含的組件相對較多,各個組件間存在依賴關(guān)系,如每個組件都會依賴Keystone,Nova還依賴于G lance,Neutron和Cinder;Sw ift,Glance和Cinder需要后端存儲的支持。
原生的OpenStack并不支持統(tǒng)一存儲,云主機服務(wù)Nova、鏡像服務(wù)Glance、云硬盤服務(wù)Cinder的后端存儲各不相同。后果是內(nèi)耗嚴(yán)重,單純從創(chuàng)建虛擬機這一操作來看,通常需要1~3 m in。這樣的設(shè)計缺乏合理的橫向擴展性,當(dāng)系統(tǒng)壓力增大時,必然會出現(xiàn)各種問題。在構(gòu)建云平臺時,須對存儲進(jìn)行重新設(shè)計。早先業(yè)界不少學(xué)者或企業(yè)在為OpenStack優(yōu)化Sw ift上做了大量的工作。本文嘗試將云平臺所有數(shù)據(jù)存儲在Ceph資源池里,包括創(chuàng)建虛擬機,遷移,擴容,縮容等所有操作都可以避免不必要的數(shù)據(jù)傳輸[2]。提出一套更加適用于企業(yè)生產(chǎn)環(huán)境的優(yōu)化方案:通過調(diào)整元數(shù)據(jù)備份策略,網(wǎng)絡(luò)傳輸方式以及根據(jù)企業(yè)環(huán)境調(diào)整配置策略,提升整體性能。
Ceph是一種高性能的統(tǒng)一分布式存儲系統(tǒng),具有高可靠性和可擴展性。Ceph可以通過一套存儲系統(tǒng)同時提供對象存儲、塊存儲和文件存儲系統(tǒng)3種功能,以便在滿足不同應(yīng)用需求的前提下簡化部署和運維。其中,對象存儲,既可以通過使用Ceph的庫,利用C、C++、Java、Python、PHP代碼訪問,也可以通過Restfu l網(wǎng)關(guān)以對象的形式訪問或存儲數(shù)據(jù),兼容亞馬遜的S3和OpenStack的Sw ift。塊存儲,作為塊設(shè)備,可像硬盤一樣直接掛載。文件系統(tǒng)如同網(wǎng)絡(luò)文件系統(tǒng)一樣掛載,兼容POSIX接口。在Ceph系統(tǒng)中分布式意味著真正的去中心化結(jié)構(gòu)以及沒有理論上限的系統(tǒng)規(guī)??蓴U展性[2]。Ceph的系統(tǒng)層次,如圖1所示。
在Ceph的架構(gòu)中,對象存儲由LIBRADOS和RADOSGW提供,塊存儲由RBD提供,文件系統(tǒng)由CEPH FS提供,而RADOSGW, RBD, CEPH FS均需要調(diào)用LIBRADOS的接口,而最終都是以對象的形式存儲于RADOS里[3]。Ceph集群的節(jié)點有3種角色:
(1)M onitor,監(jiān)控集群的健康狀況,向客戶端發(fā)送最新的Crush map(含有當(dāng)前網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu))。
(2)OSD,維護(hù)節(jié)點上的對象,響應(yīng)客戶端請求,與其他OSD節(jié)點同步。
(3)M DS,提供文件的M etadata,提供高層應(yīng)用接口CephFS[4]。
Ceph是分布式的存儲,它將文件分割后均勻隨機地分散在各個節(jié)點上,Ceph采用了CRUSH算法來確定對象的存儲位置,只要有當(dāng)前集群的拓?fù)浣Y(jié)構(gòu),Ceph客戶端就能直接計算出文件的存儲位置,直接跟 OSD節(jié)點通信獲取文件而不需要詢問中心節(jié)點獲得文件位置,這樣就避免了單點風(fēng)險。Ceph已經(jīng)是一套比較成熟的存儲系統(tǒng)了,是OpenStack比較理想的存儲后端,也可以作為Hadoop的存儲后端。
Ceph和Gluster都是靈活存儲系統(tǒng),在云環(huán)境中表現(xiàn)非常出色。在速率上兩者通過各自不同的方式,結(jié)果不相伯仲[5]。這里之所以選用Ceph除了因為其更容易與Linux做集成且對于W indow s較為友好,更是看重Ceph 訪問存儲的不同方法有可能使其成為更流行的技術(shù)。Ceph已經(jīng)是主線Linux內(nèi)核(2.6.34)的一部分,由于其具有高性能,高可靠和高擴展性,Ceph作為一個優(yōu)秀的開源項目得到更多的關(guān)注。
圖1 Ceph的系統(tǒng)層次
使用Ceph作為企業(yè)云(基于OpenStack)的后端存儲主要有2種思路:(1)由于私有云本身包含Sw ift組件作為對象存儲,Ceph用C++編寫而Sw ift用Py thon編寫,性能上應(yīng)當(dāng)是Ceph占優(yōu)。但是與Ceph不同,Sw ift專注于對象存儲,作為OpenStack組件之一經(jīng)過大量生產(chǎn)實踐的驗證,與OpenStack結(jié)合很好,目前,不少人使用Ceph為OpenStack提供塊存儲,但仍舊使用Sw ift提供對象存儲[6]。(2)將Ceph統(tǒng)一作為Nova/Glance/Cinder的存儲后端[7],如此一來,Nova, Glance, Cinder之間沒有數(shù)據(jù)傳輸,快速創(chuàng)建虛擬機,只需要管理一個統(tǒng)一存儲[8]。本文采取第2種實現(xiàn)方式進(jìn)行更深一步的探討。
整合項目實驗資源(包含設(shè)備利舊),搭建實驗集群[9]??傮w集群部署分布,如圖2所示。
圖2 實驗集群部署功能示意圖
出于未來業(yè)務(wù)發(fā)展需要,集群中部分物理存儲節(jié)點選配了3.2 TB NVM E SSD卡。所有存儲節(jié)點標(biāo)配2塊2.5寸600 GB 10K SAS熱插拔硬盤,2塊480 GB SSD(intel S3520系列)熱插拔硬盤,8塊6T 7.2K SATA熱插拔硬盤。
宿主機集群通過部署節(jié)點進(jìn)行PXE網(wǎng)絡(luò)部署,操作系統(tǒng)發(fā)行版為CentOS Linux release 7.3.1611(Core),部署基于M版OpenStack深度開發(fā)的企業(yè)云,部署的網(wǎng)絡(luò)架構(gòu),如圖3所示。
控制節(jié)點:存儲pub lic網(wǎng)-雙萬兆,L3 pub lic網(wǎng)-雙萬兆,業(yè)務(wù)Private網(wǎng)-雙萬兆,部署和物理機監(jiān)控IPM I-單千兆,管理網(wǎng)-雙萬兆(管理網(wǎng)和存儲Public網(wǎng)合并)。
計算節(jié)點:存儲Public網(wǎng)-雙萬兆,業(yè)務(wù)Private網(wǎng)-雙萬兆,部署和物理機監(jiān)控IPM I-單千兆,管理網(wǎng)-雙萬兆(管理網(wǎng)和存儲Public網(wǎng)合并)。
存儲節(jié)點:存儲Public網(wǎng)-雙萬兆, 存儲Private網(wǎng)-雙萬兆(可用IB),部署和物理機監(jiān)控IPM I-單千兆,管理網(wǎng)-雙萬兆(管理網(wǎng)和存儲Public網(wǎng)合并)。
圖3 集群部署網(wǎng)絡(luò)架構(gòu)圖
將Ceph FS作為Nova節(jié)點的本地文件系統(tǒng)。作為OpenStack中的共享實例存儲,可以在OpenStack中使用Ceph塊設(shè)備鏡像,Ceph塊設(shè)備鏡像被當(dāng)作集群對象。還可以使用OpenStack G lance將鏡像存儲在Ceph塊設(shè)備中。這樣OpenStack的Nova G lance和Cinder之間沒有數(shù)據(jù)傳輸。高可用集群只需管理一個統(tǒng)一存儲[10]。本實驗采用社區(qū)版本的Ceph version 10.2.5。
在本文的實驗場景中,Ceph資源池總?cè)萘考s為479 TB,設(shè)置為3副本,可用容量約為159 TB。所有節(jié)點上2塊ssd作為日志盤,ssd分為4個區(qū),每個分區(qū)大小為 40 G,每個ssd分區(qū)對應(yīng)一個osd。ceph中分為image、volumes、backups 3個池,每個池設(shè)置為3副本。由于宿主節(jié)點有2種不同的存儲介質(zhì),為了發(fā)揮硬件資源的最大效力將高速SSD存儲和普通機械SATA存儲劃歸不同的資源池進(jìn)行測試[11]。按照官方推薦架構(gòu)做融合,修改OpentStack控制節(jié)點中/etc目錄下的配置文件。融合架構(gòu),如圖4所示。
在企業(yè)云平臺上,實例化1臺Ubuntu14.04 LTS am d_64的云主機,之后分別在2個不同存儲介質(zhì)的Ceph池中實例化2塊80 G的云硬盤。啟動云主機,分別掛載2塊云硬盤進(jìn)行fio測試;將ssd掛載到主機后fdisk -l顯示硬盤路徑為/dev/vdb;采用讀寫混合模式fio測試如下:
f io-f ilen am e=/d ev/vdb -direct=1 -iodepth 1 -thread -rw=randrw -rwm ixread=70 -ioengine=psync -bs=16k -size=80G -numjobs=30 -runtime=100 -group_reporting -name=ssd
將ssd卸載,掛載sata硬盤重復(fù)上述步驟并進(jìn)行讀寫混合模式fio測試,測試如下:
fio -filenam e=/dev/vdb -d irect=1 -iodep th 1-thread -rw=randrw -rwm ixread=70 -ioengine=psync-bs=16k -size=80G -num jobs=30 -run tim e=100-group_reporting -name=sata
圖4 融合架構(gòu)
隨后,卸載云硬盤,注銷實例后重新申請,重復(fù)上述步驟6次。測試結(jié)果如表1、表2所示。
所測試的主要指標(biāo)包括IO:總的輸入輸出量;bw:磁盤吞吐量;iops:磁盤每秒IO次數(shù);depths:隊列深度,為1;blocksize:塊大小,默認(rèn)16 K。
從上述測試結(jié)果中可以看出,使用社區(qū)版Ceph池化資源之后,SSD資源池的讀寫速率只有SATA資源池的2倍左右。
表1 社區(qū)版Ceph-FIO-SSD池測試結(jié)果
表2 社區(qū)版Ceph-FIO-SATA池測試結(jié)果
圖5 改進(jìn)優(yōu)化的Ceph
如上文所述結(jié)果,社區(qū)版Ceph存在一定的性能損耗。根據(jù)行業(yè)統(tǒng)計,社區(qū)版Ceph如果沒有好的運維開發(fā)團(tuán)隊,存儲節(jié)點數(shù)很難超過20個節(jié)點以上。在網(wǎng)絡(luò)通信,線程調(diào)度,內(nèi)存管理等方面都有很大的提升空間,可以做如下改進(jìn):
(1)Ceph在讀寫數(shù)據(jù)的過程中使用FileStore,在寫數(shù)據(jù)塊時先寫日志再寫數(shù)據(jù),由于雙寫導(dǎo)致性能大打折扣。因此,可將元數(shù)據(jù)和data分離,只將元數(shù)據(jù)寫入日志,以此來提升效率。
(2)增加熱點預(yù)讀冷池休眠功能,通過將訪問頻次較高的熱數(shù)據(jù)存儲在高速緩存中,提升讀寫性能。將熱度下降的數(shù)據(jù)逐步在機械硬盤里落盤,同時控制冷存儲池硬件,減少能耗,增長磁盤壽命。如此一來提高整體的效率。
(3)針對網(wǎng)絡(luò)通信進(jìn)行優(yōu)化,主要通過聚合TCP鏈路來實現(xiàn)。同時增加對數(shù)據(jù)接口的支持,包括FC,ISCSI在內(nèi)的冗余鏈路,保證業(yè)務(wù)鏈路的安全。并添加壓縮和災(zāi)備策略,包括1~6的數(shù)據(jù)副本,糾刪碼等不同的策略。改進(jìn)架構(gòu),如圖5所示。
在具體的使用過程中,可根據(jù)集群狀況對一些具體配置進(jìn)行優(yōu)化。本文中的配置優(yōu)化簡述如下:
(1)由于Ceph-OSD進(jìn)程和Ceph-M SD進(jìn)程都會消耗大量的CPU資源,因此,通過在節(jié)點主機BIOS設(shè)置CPU等硬件為最佳性能模式(默認(rèn)為均衡模式),提高效率,是一個較為簡單卻行之有效的方案。
(2)關(guān)閉NUMA,可以在BIOS中關(guān)閉NUMA或者修改Ceph節(jié)點的配置,在/etc/grub.conf文件添加numa=off來關(guān)閉NUMA。
(3)調(diào)整PG數(shù)量。在本文的實驗環(huán)境中共有118個osd;使用3副本;劃分6個poo l,因此,Total PGs=5 900,每個pool的PG計算結(jié)果為983,按照以2為底的指數(shù)函數(shù)取近似,設(shè)為1 024。
TotalPGs=(Total_number_of_OSD*100)/max_replication_count
(4)設(shè)置預(yù)讀,通過數(shù)據(jù)預(yù)讀并且記載隨機訪問內(nèi)存方式,提高磁盤讀操作。
echo "8192" > /sys/block/sda/queue/read_ahead_kb
總之,高性能硬件帶來效率提升的同時也會增加成本,需要企業(yè)根據(jù)自身情況和應(yīng)用場景進(jìn)行權(quán)衡。在架構(gòu)和配置調(diào)優(yōu)的過程中,不能僅僅關(guān)注性能,系統(tǒng)的穩(wěn)定性同樣重要,上述調(diào)優(yōu)方式較為保守但行之有效。按照2.2節(jié)所述測試步驟,進(jìn)行測試。優(yōu)化Ceph-FIO-SSD池測試結(jié)果,如表3所示。
通過上述測試結(jié)果可知,優(yōu)化后,Ceph的效率較之社區(qū)版Ceph效率有較為明顯的提升,為原有效率的130%。
Ceph是面向大型存儲的應(yīng)用,用以解決企業(yè)各種存儲業(yè)務(wù)上的復(fù)雜問題。雖然Ceph的設(shè)計初衷定位為PB級的分布式文件系統(tǒng),但在落地生產(chǎn)環(huán)境的過程中尚有很大的提升空間。本文探討了一種可用于實際生產(chǎn)環(huán)境的Ceph實施優(yōu)化方案,較之原生Ceph性能得到了顯著提升,但在生產(chǎn)環(huán)境中也需要專業(yè)的技術(shù)服務(wù)團(tuán)隊作技術(shù)支撐。
表3 優(yōu)化Ceph-FIO-SSD池測試結(jié)果