“分布式存儲(chǔ)系統(tǒng)是大量普通PC服務(wù)器通過Internet互聯(lián),對(duì)外作為一個(gè)整體提供存儲(chǔ)服務(wù)?!睂?shí)質(zhì)是基于軟件實(shí)現(xiàn)的存儲(chǔ)服務(wù),屬軟件定義存儲(chǔ)范疇。根據(jù)VMware定義“軟件定義的存儲(chǔ)是將工業(yè)標(biāo)準(zhǔn)服務(wù)器的存儲(chǔ)提供出來并通過軟件控制層面實(shí)現(xiàn)存儲(chǔ)的自動(dòng)化和池化”。
不同的分布式存儲(chǔ)系統(tǒng)適合處理不同類型的數(shù)據(jù),可分為四類:分布式文件系統(tǒng)、分布式鍵值(Key-Value)系統(tǒng)、分布式表格系統(tǒng)和分布式數(shù)據(jù)庫(kù)。當(dāng)前主流的分布式文件存儲(chǔ)產(chǎn)品以Hadoop、GlusterFS、Moosefs為代表。橫向?qū)Ρ确治銮闆r見表1所示。
綜合考量,本文選用MFS作為實(shí)例的技術(shù)實(shí)現(xiàn),并通過實(shí)踐中的優(yōu)化彌補(bǔ)其弱項(xiàng)。
在獨(dú)立二層網(wǎng)絡(luò)內(nèi),部署六臺(tái)普通配置的X86機(jī)架式服務(wù)器,服務(wù)器本地硬盤在100到400GB之間。所有服務(wù)器通過一臺(tái)低端二層以太網(wǎng)交換機(jī)單鏈路互聯(lián),組合成一個(gè)總?cè)萘?.7TB的邏輯存儲(chǔ)。提供網(wǎng)絡(luò)文件系統(tǒng)服務(wù)。示意圖如圖1所示。
圖1 實(shí)例網(wǎng)絡(luò)拓?fù)鋱D
集群所有節(jié)點(diǎn)服務(wù)器位于同一網(wǎng)段,便于管理及部署。Metalogger日志服務(wù)器同時(shí)作為時(shí)間同步服務(wù)器及數(shù)據(jù)存儲(chǔ)服務(wù)器。運(yùn)行情況如圖2所示(不包含元數(shù)據(jù)節(jié)點(diǎn))。
圖2 實(shí)例運(yùn)行圖
有兩種安裝方式可供選擇:官方軟件庫(kù)安裝、源碼編譯安裝。本文采用軟件庫(kù)安裝方式。集群軟硬件配置如表2所示。具體安裝步驟為:
表1 分布式文件存儲(chǔ)對(duì)比
集群安裝成功后僅需修改少數(shù)必要配置文件即可運(yùn)行,其它配置基本不用修改。
(1) 修 改 Chunkserver節(jié)點(diǎn)的mfshdd.cfg文件
在文件末尾加入本地文件系統(tǒng)目錄作為集群的一個(gè)獨(dú)立的存儲(chǔ)空間,如:/data_volumn1、/data_volumn2、...。MFS會(huì) 把 所有Chunkserver的本地文件目錄整合起來,提供統(tǒng)一的存儲(chǔ)空間對(duì)外服務(wù),容量是所有目錄的總和。
(2) 在Master添加對(duì)外服務(wù)的存儲(chǔ)路徑
即設(shè)置共享目錄。修改mfsexports.cfg,在文件頭部添加
* /a c c e s s p a t h rw,alldirs,admin,maproot=0:0,/accesspath 為 MFS系統(tǒng)中實(shí)際存在的數(shù)據(jù)目錄,這一目錄需要從客戶端連接到集群根目錄后進(jìn)行創(chuàng)建和維護(hù),使集群形成自根“/”開始的樹形目錄結(jié)構(gòu)。
(3) 客戶端
MFS提供原生Linux客戶端。由于MFS需要工作在用戶級(jí)的文件系統(tǒng)上,所以需要安裝FUSE模塊。通過Linux的系統(tǒng)軟件庫(kù)安裝即可,yum-y install fuse fuselibs。再加載fuse模塊,modprobe fuse。至此,可以掛載MFS存儲(chǔ)了,mfsmount/mnt/clientmountpoint/-H 10.10.2.201 -S /accesspath。
圖3 Windows環(huán)境訪問MFS數(shù)據(jù)
表2 集群實(shí)例軟硬件配置
MFS不提供Windows客戶端,不支持Windows環(huán)境,以成為其擴(kuò)大影響力的一大短板。通過深入探索測(cè)試,通過Total Commander及mfs4tcdbg兩個(gè)第三方軟件組合的形式,成功實(shí)現(xiàn)在Windows里通 過T o t a l Commander管理界面直接訪問MFS存儲(chǔ)。使用方式對(duì)于用過FTP軟件的人不會(huì)陌生,如圖3所示。
(1) 讀寫性能好。
數(shù)據(jù)多副本使讀性能比單臺(tái)服務(wù)器提升顯著,且隨數(shù)據(jù)節(jié)點(diǎn)增加基本實(shí)現(xiàn)線性提升。如圖4所示。
在相同環(huán)境下測(cè)試,傳統(tǒng)集中式存儲(chǔ)讀速度一般在100MB/S左右??梢?,MFS分布式存儲(chǔ)只需要低端千兆以太網(wǎng)絡(luò)就可以達(dá)到比集中式光纖網(wǎng)絡(luò)存儲(chǔ)更高的速度,且寫速度基本與之持平,方案的性價(jià)比明顯。
且本例數(shù)據(jù)存儲(chǔ)服務(wù)器配置低、數(shù)量少。利用集群彈性伸縮特性,通過在線增加數(shù)據(jù)存儲(chǔ)服務(wù)器數(shù)量、加裝閃存加速介質(zhì)等優(yōu)化措施后,集群的讀性能還會(huì)大大增加,給業(yè)務(wù)大規(guī)模并發(fā)I/O提供更好支持。
(2) 擴(kuò)容成本低。
圖4 MFS實(shí)例讀速度
MFS各組件的大部分版本可組合使用。原理上可以用較低版本的集群組件匹配較老舊的服務(wù)器。因此,可以使用任何品牌、任何年代的標(biāo)準(zhǔn)X86機(jī)架服務(wù)器加上標(biāo)準(zhǔn)以太網(wǎng)二層交換機(jī)就可以方便地進(jìn)行集群在線橫向擴(kuò)展。
比集中存儲(chǔ)擴(kuò)容簡(jiǎn)單、高效,對(duì)應(yīng)用幾乎透明。可按需動(dòng)態(tài)地利舊下線服務(wù)器及集中式存儲(chǔ)(把其轉(zhuǎn)為X86服務(wù)器本地硬盤)組合成為性能更高,容量更大的存儲(chǔ)系統(tǒng),提供全新的存儲(chǔ)服務(wù)能力。
(3) 維護(hù)成本大幅減低。
當(dāng)前主流集中存儲(chǔ)運(yùn)維價(jià)格不低于500/T/年,組網(wǎng)至少需要兩臺(tái)FC-SAN交換機(jī),還需專門的存儲(chǔ)運(yùn)維人員。本文實(shí)例所用6臺(tái)服務(wù)器都均已使用超過6年,硬件成本忽略不計(jì)。低端二層交換機(jī)1臺(tái),價(jià)值約1000元。軟件均為開源版本,無費(fèi)用。系統(tǒng)配置確定后,運(yùn)行基本無需人工干預(yù),后續(xù)運(yùn)維費(fèi)用的產(chǎn)生僅來源于在網(wǎng)硬件的損耗。
(4)多節(jié)點(diǎn)冗余容錯(cuò)架構(gòu)。
進(jìn)行多種暴力破壞測(cè)試,通過Metalogger的元數(shù)據(jù)副本及集群配置信息副本恢復(fù)集群后,數(shù)據(jù)始終不丟失,架構(gòu)始終保持完整,預(yù)期RTO為15分鐘。同時(shí),通過回收站、快照功能還可以保存數(shù)據(jù)最近的多個(gè)版本,避免人為誤操作導(dǎo)致的數(shù)據(jù)丟失。都充分驗(yàn)證了系統(tǒng)整體可靠性、安全性及易用性。
經(jīng)過測(cè)試驗(yàn)證,如圖1所示,在MFS標(biāo)準(zhǔn)部署模式基礎(chǔ)上提出如下探索性的部署方式:
(1) 一個(gè)MFS集群中部署多個(gè)Metalogger元數(shù)據(jù)日志服務(wù)器,通過Linux bash腳本實(shí)現(xiàn)元數(shù)據(jù)的自動(dòng)備份及自動(dòng)向集群內(nèi)其它多個(gè)服務(wù)器的拷貝。確保了集群最重要信息的安全。當(dāng)元數(shù)據(jù)服務(wù)器無法運(yùn)行時(shí),只需重新部署新的元數(shù)據(jù)服務(wù)器,解壓任意一份元數(shù)據(jù)備份到指定目錄,即可恢復(fù)集群運(yùn)行,整個(gè)過程在15分鐘之內(nèi)。
(2)Metalogger備份服務(wù)與數(shù)據(jù)服務(wù)Chunkserver、客戶端Client、時(shí)間同步服務(wù)NTP等混合部署于一臺(tái)服務(wù)器,提升了服務(wù)器資源利用率及集群總存儲(chǔ)容量。通過驗(yàn)證,混合部署模式不會(huì)影響各服務(wù)之間的通信及運(yùn)行,也不會(huì)影響集群正常運(yùn)行。
圖5 硬盤負(fù)載圖
(3)合理配置服務(wù)器本地硬盤。由于集群能管理到各服務(wù)器本地單個(gè)硬盤,建議添加到集群存儲(chǔ)池的硬盤無需做本地RAID,把每塊物理硬盤作成單獨(dú)的存儲(chǔ)卷直接加入到集群。
一來可避免RAID后硬盤可用容量的損失及RAID卡性能(如:更換硬盤后重做raid效率等)、故障問題;二來能夠更直觀高效地進(jìn)行所有硬盤的負(fù)載管理及維護(hù)。同時(shí)更好發(fā)揮所有硬盤同時(shí)獨(dú)立讀寫的高性能,如圖5所示。
但集群包含大量硬盤,手工逐個(gè)硬盤去維護(hù)維護(hù)工作量很大且效率低。需要編寫Linux bash腳本實(shí)現(xiàn)各主機(jī)所有硬盤的自動(dòng)格式化,自動(dòng)掛載文件目錄。大大簡(jiǎn)化了運(yùn)維工作,避免手工誤操作,提升集群管理效率和可用性。因此,建議所有數(shù)據(jù)存儲(chǔ)服務(wù)器配置容量大、數(shù)量多的硬盤,至少3TB×10塊SATA硬盤。再輔以SSD加速設(shè)備,實(shí)現(xiàn)較高性價(jià)比。
同時(shí)我們也看到一些有待改進(jìn)的問題:
比如,集群自帶管理門戶使用方便,但無鑒權(quán),后續(xù)將通過Tomcat、IIS等中間件部署管理程序,增加鑒權(quán)頁(yè)面,用戶輸入正確的驗(yàn)證信息才能跳轉(zhuǎn)到管理系統(tǒng)頁(yè)面,實(shí)現(xiàn)鑒權(quán)功能;集群自身的QoS功能較弱,需探索軟件層面的解決方案,在與集群有效結(jié)合后來保證服務(wù)水平。
通過橫向?qū)Ρ燃皩?shí)例驗(yàn)證,選擇一個(gè)具有比較優(yōu)勢(shì)的分布式文件存儲(chǔ)系統(tǒng);現(xiàn)有MFS、GFS等有中心節(jié)點(diǎn)設(shè)計(jì)的分布式文件存儲(chǔ)的問題在于,盡管管理節(jié)點(diǎn)主備部署實(shí)現(xiàn)了元數(shù)據(jù)保護(hù),但集群配置文件無保護(hù),容錯(cuò)機(jī)制不夠完善,導(dǎo)致故障恢復(fù)窗口時(shí)間長(zhǎng),成功率無法保證。
本文通過實(shí)例驗(yàn)證了“1個(gè)管理服務(wù)器+N個(gè)元數(shù)據(jù)日志服務(wù)器”的部署模式,使元數(shù)據(jù)更安全。同時(shí)借助腳本技術(shù)實(shí)現(xiàn)集群配置數(shù)據(jù)的自動(dòng)備份和在多個(gè)節(jié)點(diǎn)服務(wù)器上的保存。
增強(qiáng)了集群故障恢復(fù)能力和效率,克服了此類有中心分布式存儲(chǔ)的單點(diǎn)問題;實(shí)現(xiàn)Windows環(huán)境里對(duì)MFS存儲(chǔ)數(shù)據(jù)的直接訪問,解決了主流分布式文件存儲(chǔ)都不支持Windows客戶端的問題。
通過分布式文件存儲(chǔ)系統(tǒng)的部署,實(shí)現(xiàn)了筆者單位當(dāng)前云環(huán)境下文件存儲(chǔ)系統(tǒng)可用性的提升及擁有成本的大幅降低,將逐步在重文件存儲(chǔ)的應(yīng)用上推廣使用。