李 磊, 李達港, 金連文, 馬麗紅
(華南理工大學 電子與信息學院, 廣東 廣州 510641)
計算機技術應用
基于OpenStack Swift構建高可用私有云存儲平臺
李 磊, 李達港, 金連文, 馬麗紅
(華南理工大學 電子與信息學院, 廣東 廣州 510641)
基于OpenStack Swift開源云計算平臺,構建了一個DHT架構的私有存儲架構和一套SOA存儲管理系統,使得存儲基礎設施具備快速橫向擴展能力,并提供可選冗余性的存儲,實現數據信息的高可用性。針對私有云存儲小文件的特點,提出3個可行的優化方法,以提高文件存儲效率。利用MongoDB和HTML5實現快速云端便簽功能,滿足信息快速記錄和查看功能,提高工作效率和數據管理的安全性。
私有云; 存儲平臺; OpenStack; DHT架構
由于云計算平臺能提供快速、按需、彈性的資源構建模式,能按照用戶的需求快速構建計算資源,目前國內已經開始采用云計算解決信息化管理中資源的高冗余、低共享問題,以提高資源與數據存儲的安全性和有效性[1]。在國內外的文獻中,關于采用云計算技術解決資源優化管理的方法、采用云計算技術解決資源的快速構建、彈性伸縮和按需使用的問題多有報道[2-7],但對于如何優化云計算平臺構建方案,實現資源的優化構建和高效用比,仍需要進一步研究。
云計算平臺分為IaaS平臺、PaaS平臺和SaaS平臺[8],其中IaaS平臺包括了計算資源基礎設施、虛擬機計算資源、網絡資源和數據存儲資源。數據存儲資源作為IaaS中的重要組成部分,不僅提供數據管理和存儲,還具備云計算高安全性、彈性擴展、按需使用和高效用比等特點,成為目前數據存儲的主要選擇。國內外成熟的云存儲平臺有AWS S3、百度網盤、微軟的OneDrive、蘋果公司的iCloud和中國電信的天翼云存儲等,但由于數據存儲分離性強,同時用戶對數據安全性的考慮以及網絡結構的差異性,使得私有云存儲成為了目前企業信息化的一個熱點。
目前,構建云存儲平臺的方案主要分為商業架構和開源架構。商業架構具備完備的維護服務體系,但購置成本較高,在高校資源開放服務方面,難以實現投入與產出的價值平衡;開源架構雖然沒有完善的服務維護體系,但由于代碼開源、無購置成本,其穩定性實際并不亞于商業架構。采用開源構建可以直接獲取底層的軟件源代碼,通過一定的學習和研究,能直接按照自己的實際需求進行修改和定制,形成具有自主知識產權的云計算平臺。筆者基于OpenStack Swift構建一個SOA架構的私有云存儲管理平臺,結合HTML5+MongoDB設計一套具備高安全性、高可用性、按需使用、彈性擴展、松耦合的文件DHT存儲管理和在線個人便簽數據存儲平臺,提供數據有效管理與存儲,同時實現數據日志的在線記錄與便簽功能。
OpenStack是由Rackspace和美國國家航空航天局共同開發的云計算平臺,幫助服務商和企業內部實現類似于Amazon EC2和S3的云基礎架構服務(IaaS)。目前OpenStack已獲得IBM、Cisco、HP等近200家知名IT企業的支持,成為開源云計算架構中的主流平臺之一。其工程架構如圖1所示。

圖1 OpenStack Swift工程架構
OpenStack Swift采用Python語言進行開發,主要組成部分包括前端的Proxy-node服務,該服務主要維護DHT的Hash-Ring環,提供用戶賬號、對存儲容器和對象文件的地址映射和轉換,使得不同用戶、對象容器和對象文件轉換為合適的存儲地址,能將數據信息處存儲到不同的設備中。Account-Server主要提供對不同用戶存儲容器的管理;Container-Server負責管理用戶的存儲容器信息,一個容器可包含多個對象文件數據;Object-Server管理對象數據,包括信息數據的管理、文件數據的寫入和讀取等;Replica-Server負責對文件數據進行檢查,包括冗余份數、數據健康性和完整性等,并負責對文件數據進行復制與遷移,保證存儲的安全性。
當用戶上傳一個文件數據時,Proxy-Server會按照文件的保存路徑,按照Hash Ring的信息轉換為多個設備的保存路徑,在文件寫入時將至少保證2份以上的數據同時寫入成功(文件的冗余備份數大于3份時),從而保證數據存儲的安全性;當用戶需要讀取文件數據時,Proxy-Server將讀取文件數據的地址,按照Hash Ring轉換為文件數據所在的存儲地址,選擇其中的一個作為文件數據的返回地址。用戶可以以標準的HTTP協議獲取文件數據。當文件數據備份出現損壞或所在的存儲設備出現故障時,Replica-Server將檢測到的低安全性的文件數據信息,并在其他正常運行的設備上重新備份;當存儲進行擴容時,為了保證文件數據的足夠分散,Replica-Server將會自動遷移部分數據,實現存儲數據的容量均衡,使得每個存儲設備的文件數據達到一個相對平等的水平,將數據災備的安全性平等地分配到每個設備上,避免了一個設備出現故障時數據會大批量遷移。
3.1 基礎框架部署規劃
按照私有數據存儲的特點,采用集群分離對等方式的部署方案,即OpenStack Swift、OpenStack Keystone和基于Tornado的Web服務采用分布式集群化部署,其中每個存儲服務器配置包括1個i3 CPU、8 GB RAM內存、3個千兆網絡接口,6個2 TB SATA企業級硬盤作為OpenStack Swift的存儲設備,16 GB的SSD固態硬盤作為Ubuntu系統硬盤;采用多臺包括1個i3 CPU、16 GB RAM內存、3個千兆網絡接口和1個1 TB的固態硬盤服務器作為運行OpenStack Keystone、MySQL、MongoDB和基于Tornado的Web服務的服務器。每個服務集群采用Nginx作為對外的負載均衡,提供統一對外接口。該平臺的框架示意圖如圖2所示。

圖2 基于OpenStack Swift私有云存儲示意圖
3.2 OpenStack組件的部署
目前OpenStack的構建可采用4種主要方式[9]。
(1) 編譯包安裝。Ubuntu14.04已經將Icehouse版本作為其軟件安裝源的一部分,在該系統下可以直接采用apt-get方式進行安裝。
(2) 腳本安裝。由于OpenStack已經成為開源云計算平臺的首選部署方案,現已出現了devstack等類型的“一鍵化”安裝腳本,用戶可以通過該腳本的執行直接完成OpenStack的構建。
(3) 源碼安裝。從OpenStack官方網站下載源碼包,按照自己的環境修改配置,從底層組件進行安裝。
(4) 集成發布系統鏡像安裝。包括fuelweb等安裝包已經將OpenStack服務集成到Linux系統鏡像,安裝完成后可直接使用OpenStack的服務。
筆者考慮到部署的靈活性,在部署的方式上采用了源碼安裝方式,按照自己的需求對OpenStack進行配置和調整。
3.2.1 OpenStack基礎組件的部署
本平臺需要構建服務需要用到關系型數據庫和非關系型數據庫兩種基礎組件,其中關系型數據庫負責記錄OpenStack Keystone管理的用戶信息和認證,非關系數據庫消息隊列負責記錄每個用戶的便簽信息。
數據的部署采用MySQQL-5.5數據庫和Heartbeat HA+RAID(NFS)部署方案,即采用一個基于RAID的存儲池存儲MySQL的數據信息,通過NFS掛載到多個MySQL服務端,Heartbeat將用戶訪問通過虛擬IP轉發到后端正常工作的MySQL服務上。
非關系型數據庫采用MongoDB和Auto-Sharding方式,MongoDB通過mongos自動建立一個水平擴展的數據庫集群系統,將數據庫分別存儲在Sharding的各個節點上,實現非關系數據的自動切分和負載均衡,保證數據的安全性和高可用性。
3.2.2 OpenStack Keystone的部署
Keystone的部署流程主要包括:(1)安裝必要的第三方組件,如MySQL的client服務組件、pip工具等;(2)按照服務所在服務器的信息修改配置文件(/etc/keystone下的配置文件);(3)安裝系統服務,并在數據庫中創建數據表單,同步數據表單幾個主要步驟。
其中Keystone和Glance的關鍵配置項目如下:
Keystone: [sql]#指向數據庫服務器 connection = mysql://keystone:openstack@Sql-IP/keystone
為了實現Keystone的HA結構,系統采用多點反向代理機制,即采用多個物理節點運行Keystone服務,并在前端將其通過Nginx反向代理為同一個前端IP,對后端的Keystone進行負載均衡。當用戶訪問鏈接較多時,Nginx通過負載均衡方式將用戶的請求均衡地發送到后端多個Keystone服務上,實現服務的負載均衡和HA。
3.2.3 OpenStack Swift的部署
OpenStack Swift的主要部署流程包括:(1)安裝必要的第三方組件,python-dev、pip等第三方軟件服務工具,其中需要將用于存儲的文件系統格式化為具有metadata管理的XFS文件系統;(2)安裝包括python-xattr、memcached等;(3)安裝系統服務,并按照存儲的空間合理確定分區的數量;(4)文件備份冗余數和Region, Zone的劃分(本平臺將每臺存儲的服務器作為同一個Region的一個Zone單位)確定Hash-Ring的配置。
其中定制Hash-Ring的主要指令如下:
創建服務的Hash-Ring,存儲空間分為218個分區,文件3個備份冗余,分區數據轉移時間限制為1小時 sudo swift-ring-builder account.builder create 18 3 1 sudo swift-ring-builder container.builder create 18 3 1 sudo swift-ring-builder object.builder create 18 3 1 將設備屬性加入到每個Hash-Ring中: sudo swift-ring-builder account.builder add r1z1-{ip}:6002/sda5 100 sudo swift-ring-builder account.builder add r1z2-{ip}:6012/sda6 100 sudo swift-ring-builder container.builder add r1z1-{ip}:6001/sda5 100 sudo swift-ring-builder container.builder add r1z2-{ip}:6011/sda6 100 sudo swift-ring-builder object.builder add r1z1-{ip}:6000/sda5 100 sudo swift-ring-builder object.builder add r1z2-{ip}:6010/sda6 100 將Hash-Ring進行資源均衡分配處理: swift-ring-builderaccount.builder rebalance swift-ring-buildercontainer.builder rebalance swift-ring-builderobject.builder rebalance
由于OpenStack Swift采用分布式文件存儲,考慮到文件的讀寫效率和設備投入的效用比,本系統沒有采用RAID存儲模式。為了構建DHT對等方式的存儲,本系統采用了6臺存儲服務器,每臺服務器同時運行Proxy-Server、Account-Server、Container-Server、Object-Server等全部OpenStack Swift服務,部署結構如圖3所示。

圖3 OpenStack Swift部署結構
3.2.4 前端Web服務的配置與開發
前端Web服務主要是向用戶提供一個用戶網頁界面,實現包括用戶的注冊、密碼的管理、文件夾的管理、文件的管理等。本系統采用了SOA架構進行前端Web服務的開發,基于Python的Tornado框架,利用OpenStack Keystone和Swift所提供的HTTP Restful API實現存儲的各項功能和操作。
Tornado是FriendFeed使用的可擴展的非阻塞式Web服務器及其相關工具的開源版本,它非阻塞的方式和對epoll的運用,每秒可以處理數以千計的鏈接,魯棒性非常好。本系統Web服務后臺以Tornado為基礎進行網頁數據的報表處理和API的中間轉發,而前端網頁界面采用HTML、jQuery和CSS進行設計,由HTML實現對網頁顯示元素的操作,包括用戶信息、文件夾列表和文件數據列表的顯示,jQuery實現對網頁動態操作的報表提交和獲取,例如動態顯示文件數據信息,上傳、下載、刪除和更新文件等操作,該操作將由jQuery負責向Tornado提交和獲取相關操作的信息,CSS負責對網頁顯示布局的定制。
在部署上,本系統采用Apache作為Tornado運行的服務基礎進程,主要的步驟包括安裝Apache組件,修改配置文件/etc/apache2/ports.conf,使得Apache根目錄指向Tornado所在的文件夾,并添加WSGI服務,使得Apache可以調用Tornado的WSGI服務,在前端通過Nginx完成對網頁負載均衡。
3.2.5 HTML5Sticky便簽的服務開發與部署
HTML5Sticky是一個基于HTML5框架開發的便簽系統,可實現文本信息的編輯和本地存儲,頁面設計美觀,軟件框架結構簡潔。本系統以HTML5Sticky為基礎,通過對本地存儲結構的改進,實現一個云端信息記錄的云便簽服務。
在開發過程中,本系統首先利用Ajax替代原有的HTML5本地存儲接口,通過HTTP的API實現數據的遠端存儲與獲取;在后臺服務的設計上,本系統采用Pipeline的結構設計一個標準的WSGI服務,實現對用戶數據的獲取,并按照MongoDB的標準接口寫入到MongoDB中,其結構如圖4所示。

圖4 HTML5Sticky便簽服務架構
由于私有云存儲主要是面向大中型企事業單位提供一個高可用性的云存儲服務,這些服務主要是用于存儲小文件,因此本系統對小文件的存儲性能做了優化和測試。依據OpenStack Swift官方文檔和文獻[10-12]的建議,本系統進行了以下主要的優化。
(1) 文件系統優化。選擇XFS作為文件系統,由于deadline的調度方式能為IO負載帶來更好的性能表現,所以采用deadline作為磁盤的調度方式,而開啟寫入緩存,禁止讀取緩存能提高磁盤的性能。根據Red Hat的建議,讀取超時應該為寫入超時的一半,對于海量頻繁小文件IO的負載,應該取二者的較小值。此外,盡量減少內存與硬盤的交換以及將內核設置為保留目錄及inode緩存等,也能提高文件的讀寫性能。
(2) 網絡傳輸優化。根據Urban Airship的工程師發表的Linux Kernel Tuning for C500k博客,要處理好高并發,要使內核允許打開大量的文件描述符,而套接字的緩存最小值和默認值設置為4 KB,最大值設置為16 MB。此外,將1024-65535范圍內的端口都設置為能被臨時使用。
(3) Swift運行參數優化。根據Intel的建議,存儲節點應盡可能多地掛載硬盤,增加并行寫的速度。由于賬戶和容器的數據經常被訪問和修改,而且容量較小,所以建議用SSD固態硬盤來存儲。在軟件層面,可以為不同的CPU綁定中斷號,提高CPU的效率。此外,還可以加大Memcached的可用內存容量、并發連接數以及內核NAT哈希表的容量。在Swift的進程數方面,可取CPU核數的兩倍作為Proxy Server的進程數,取CPU核數的一半作為Account Server, Container Server和Object Server的進程數。定期修改進程IO調度的優先級也能起到一定的作用。
本系統的性能測試結果見表1和表2。

表1 小文件測試PUT性能對比

表2 小文件測試GET性能對比
本系統測試主要是對約1 MB文件的存儲性能做了測試。云存儲主要是做永久性存儲和歷史性文件的下載,一般而言上傳的操作比下載的操作頻繁,因此本系統主要對上傳的性能(PUT)做了優化。測試結果表明:優化后的性能有了明顯提高,在300個并發下,單節點硬盤下速度提高30 Mbit/s,采用本系統配置單臺服務器速度可提高120 Mbit/s;在300個并發下,下載(GET)速度提高了15 Mbit/s,采用本系統配置的單臺服務器速度可提高90 Mbit/s。若存儲集群由5臺以上服務器構成,上傳速度可提高約1 500 Mbit/s,下載速度可提高450 Mbit/s。隨著集群服務器數量的不斷擴展,速度得到較大的提高。
本文所構建的系統位于企事業單位內網,使用的流程主要包括:(1)登錄Tornado Web服務界面;(2)首次使用時,完成用戶信息的注冊;(3)登錄云存儲管理界面;(4)在文件夾欄中創建或者刪除文件夾;(5)在文件信息管理界面中,可按照需求上傳、下載或者刪除文件信息;(6)點擊個人便簽,在界面中可看到自己的歷史便簽或者新建便簽。
基于OpenStack Swift研制高可用云存儲的方案和運用方法,旨在為企事業單位提供高效、可靠、高安全性和高可用性的彈性云存儲平臺。通過對OpenStack Swift存儲的優化,平臺性能明顯提升。經過實際運行,實現了3個目標:(1)部署了DHT架構的OpenStack Swift私有云存儲平臺;(2)基于SOA架構研制了系統的Web前端服務;(3)對OpenStack Swift做了優化,提高了性能指標,滿足了私有云中海量小文件的高效率管理。
References)
[1] 羅國瑋,蘭瑞樂.基于云計算的高校科研實驗平臺構建研究[J].實驗技術與管理,2012,29(4):115-117.
[2] 柴亞輝,涂春萍,劉覺夫,等.基于云計算的計算機與軟件實驗資源管理[J].實驗室研究與探索,2010,29(10):254-257.
[3] 李英壯,廖培騰,孫夢,等.基于云計算的數據中心虛擬機管理平臺的設計[J].實驗技術與管理, 2011,28(5):1-3.
[4] 王雪嬌,陳俊松,夏湘玲,等.私有云存儲在企業的應用[J].中國管理信息化,2014,17(4):48-49.
[5] 李飛.電力企業私有云應用安全研究[J].電信科學,2010(12):18-21.
[6] Hu Ying S , Nan Xiaolin , Sengupta P, et al .Accelerating 3B single-molecule super-resolution microscopy with cloud computing[J].Nature Methods,2013,10(2):96-97.
[7] Dreher P, Vouk M. Utilizing Open Source Cloud Computing Environments to Provide Cost Effective Support for University Education and Research[M].USA,2012:32-49.
[8] 劉鵬.云計算技術原理[EB/OL].(2009-06-17)[2014-10-22].http://www.chinacloud.cn/show.aspx?id=1929&cid=12.
[9] Kevin Jackson.OpenStack Cloud Computing Cookbook[M].Packt Publishing Limited,2012:151-154.
[10] 李玲,付園,麻曉珍,等.云存儲系統中數據冗余策略優化問題[J].吉林大學學報:信息科學版,2013(1):1-7.
[11] 陳公超,劉海濤.云存儲中多類型文件存儲及訪問優化機制的研究[J].計算機應用與軟件,2011,28(12):165-171.
[12] 熊聰聰,馮龍,陳麗仙,等.云存儲在校園信息化中的應用與優化[J].天津科技大學學報, 2012(5):69-73.
Constructing a high availiable private cloud storageplatform based on OpenStack Swift
Li Lei, Li Dagang, Jin Lianwen, Ma Lihong
(School of Electronic and Information Engineering, South China Universityof Technology, Guangzhou 510641, China)
Based on OpenStack open source community, an education cloud storage platform containing SOA structure and tornado framework is developed. To rise small files storage efficiency, 3 ways are made to improve the cloud storage platform . Besides, a cloud note system with HTML5 and MongoDB for quick note-taking and retrieving is developed, which is more convenient, efficient and secure for work.
private cloud; storage platform; OpenStack; DHT architecture
2014- 10- 29
國家科技支撐計劃項目(2013BAH65F01-2013BAH65F04);廣東省戰略新興產業核心攻關項目(2012A010701001)
李磊(1983—),男,云南昆明,工程師,研究方向為云計算、通信工程和并行化計算等.
E-mail:eelilei@scut.edu.cn
TP333
A
1002-4956(2015)5- 0141- 04