基于Docker的私有云系統的設計
摘要:隨著(zhù)移動(dòng)設備的興起,數據與日劇增,每天都會(huì )產(chǎn)生大量的數據。云計算為中小型企業(yè)或者個(gè)人提供數據的存儲與計算服務(wù),節省了存儲計算成本。但是云計算帶來(lái)便利同時(shí)也存在一定的風(fēng)險,用戶(hù)一般將數據存儲在公有云中,而公有云系統中多個(gè)用戶(hù)共享計算資源,用戶(hù)無(wú)法確切地知道可控的資源運行在何處,存儲在公有云中的數據,有極大地風(fēng)險被非法使用。本文在分析云安全風(fēng)險的基礎上,提出一種基于Docker技術(shù)的私有云設計方案并進(jìn)行驗證。
本文引用地址:http://dyxdggzs.com/article/201603/288908.htm引言
未來(lái)幾年是個(gè)人云計算的時(shí)代,每個(gè)人每天都在使用著(zhù)大數據,是大數據中的一員。比如一個(gè)家庭拍攝的各種圖片、視頻和各種傳感器數據,在一兩年很快就會(huì )達到TB級,而且這樣的增長(cháng)速度會(huì )越來(lái)越快。隨著(zhù)物聯(lián)網(wǎng)進(jìn)程的加快,每個(gè)人每天將產(chǎn)生大量的個(gè)人隱私數據,這些數據可能包括健康數據、家電數據和個(gè)人移動(dòng)位置信息等等,人們會(huì )對這些數據的安全性更加關(guān)注,而公有云的劣勢將無(wú)限放大。研究開(kāi)發(fā)私有云系統將會(huì )從本質(zhì)上對這個(gè)問(wèn)題進(jìn)行一定的緩解。私有云相比于傳統的公有云有以下幾點(diǎn)好處:
第一點(diǎn),防止數據被竊取。公有云存儲服務(wù)往往是和用戶(hù)的某些平臺賬號綁定在一起的,或者與用戶(hù)的某個(gè)郵箱綁定在一起的,一旦平臺賬號或郵箱被黑客獲取,所有的數據就一覽無(wú)余了。再加之網(wǎng)絡(luò )上社工庫泛濫,很多用戶(hù)喜歡在各種網(wǎng)絡(luò )服務(wù)上使用相同的密碼,往往是某一個(gè)賬號失竊,所有數據全部暴露。
第二點(diǎn),防止數據被主動(dòng)泄漏。用戶(hù)將數據托管在第三方的云平臺上,無(wú)法保證云服務(wù)提供商不把用戶(hù)數據提供給其他人使用。
第三點(diǎn),防止數據遺失。2009年底微軟的SIDEKICK事件,導致郵件服務(wù)器中斷一周,而用戶(hù)數據卻未曾備份而丟失。還有2010年,阿里云服務(wù)器磁盤(pán)錯誤,導致TeamCola數據丟失等等。
從以上幾點(diǎn)可以看到,構建家庭私有云是非常必要的。能夠保證自己的私人數據與其他互聯(lián)網(wǎng)賬號無(wú)關(guān),不被搜索引擎索引,不被別人監視。用戶(hù)部署的私有云能夠保證服務(wù)器運行并做好數據備份。如果僅在家庭或公司內部使用可以部署在內網(wǎng),安全系數更高。
在私有云的環(huán)境下(如圖1所示),用戶(hù)的云端服務(wù)器再也不是云服務(wù)商所提供,而是用戶(hù)擁有自己的服務(wù)器,用戶(hù)可以使用手持終端與自己的私有云服務(wù)器隨時(shí)隨地通信。這種情況下,除了私有云服務(wù)器本身不可抗外力的因素,服務(wù)器與數據是百分之百安全的,用戶(hù)只需要利用APP登錄自己的云端服務(wù)器就可以實(shí)現私人數據的存儲與重要數據的同步。
1 Docker與Seafile的介紹
Docker是一個(gè)開(kāi)源的應用容器引擎,讓開(kāi)發(fā)者可以打包他們的應用以及依賴(lài)包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的Linux 機器上,也可以實(shí)現虛擬化。容器是完全使用沙箱機制,相互之間不會(huì )有任何接口(類(lèi)似iPhone的 app)。幾乎沒(méi)有性能開(kāi)銷(xiāo),可以很容易地在機器和數據中心運行。最重要的是,他們不依賴(lài)于任何語(yǔ)言、框架或包裝系統。Docker能簡(jiǎn)化我們的云存儲搭建過(guò)程,還能使其更安全地運行,更方便的維護。
Docker共享一個(gè)操作系統,使用容器的概念抽象起來(lái),可以將Docker理解成一種沙盒(Sandbox),每個(gè)Docker容器內運行一個(gè)應用,不同容器之間互相隔離,每個(gè)容器擁有自己的IP地址,并且可以在網(wǎng)絡(luò )中被識別。因此Docker容器是一個(gè)可訪(fǎng)問(wèn)網(wǎng)絡(luò )的獨立設備,這在概念上類(lèi)似于虛擬機,使得Docker容器與傳統的chroot的概念不同。Docker技術(shù)可以使容器跨越物理機器的障礙,不同主機之間的容器可以建立通信機制,可以實(shí)現用戶(hù)應用數據更好的備份,可以簡(jiǎn)化分布式系統構建的過(guò)程,如圖2所示。Docker作為一種操作系統層次上的虛擬化方式,不需要額外的虛擬機管理應用和虛擬機操作系統,Docker可以直接復用本地物理主機的操作系統,因此更加輕量級,可以大大減少對硬件配置的要求。比起傳統的虛擬機技術(shù)有很多新的特性,表1是Docker與傳統的虛擬機技術(shù)在特性上的比較。
Docker提供了一種靈活的分層技術(shù),你可以使用所需的組件來(lái)配置自己的容器。有一個(gè)叫作層的容器組件,一層就是一個(gè)容器鏡像。一般從基礎層開(kāi)始,基礎層通常就是你想在容器中使用的操作系統的類(lèi)型(容器管理器只提供您所需的操作系統的部分,并非主機操作系統)。如果想在容器中運行其他腳本文件,需要構建容器的配置和增加層。這樣使得程序的開(kāi)發(fā)使用是十分靈活的。例如在圖2中,一個(gè)應用程序或服務(wù)容器需要PHP 5.5框架,就需要配置相應的容器。另一個(gè)應用程序或者服務(wù)需要PHP5.6框架,同樣僅需利用PHP 5.6配置對應的容器即可。它不像虛擬機那樣,改變當前運行的版本時(shí)需要進(jìn)行大量的配置和安裝步驟。利用容器,僅需在容器配置文件過(guò)程中重新定義下該層即可。
Seafile是2013年國內一個(gè)團隊開(kāi)發(fā)的開(kāi)源云存儲系統,提供了豐富的文件同步和管理功能,還有更好的數據隱私保護以及群組協(xié)作功能。在本文中,利用Seafile實(shí)現用戶(hù)對數據的上傳、下載、同步功能。除此之外,Seafile還有完善的隱私保護,用你的密碼來(lái)加密文件,實(shí)現共享,可靠的文件儲存,完整的快照、恢復說(shuō)明,支持實(shí)時(shí)數據備份。提供操作歷史、鏡像恢復功能,可恢復在指定時(shí)間內被刪除的文件,減少誤操作的影響,日志功能齊全,便于審計,免費并易于部署,界面友好。
2 私有云系統構建
分析本系統可知,主要是數據的存儲和管理,所以由兩層組成:數據存儲層和服務(wù)提供層。
2.1 分布式存儲環(huán)境建立
本項目中,以Docker容器為計算存儲節點(diǎn),構建分布式環(huán)境,采用的分布式文件系統為MooseFS。MooseFS是一款網(wǎng)絡(luò )分布式文件系統。它把數據分散在多臺服務(wù)器上,但對于用戶(hù)來(lái)講,看到的只是一個(gè)源。MFS像其他類(lèi)unix文件系統一樣,包含了層級結構(目錄樹(shù)),存儲著(zhù)文件屬性(權限,最后訪(fǎng)問(wèn)和修改時(shí)間),可以創(chuàng )建特殊的文件(塊設備、字符設備、管道和套接字),符號鏈接,硬鏈接。在圖3中可以看到,數據存儲層使用的是MooseFS文件系統,主要由Master、Metalogger和Chunkserver這些部分組成。master負責在整個(gè)系統中管理數據。是整個(gè)系統的維護者。Metalogger做master數據備份的節點(diǎn)。chunkserver是mfs系統中的數據存儲者,真正的用戶(hù)數據按照算法被分成chunk,并分發(fā)到各個(gè)chunkserver上,這樣就保證了數據的安全性,本項目中低層存儲部署的方案如圖3所示。
這里需要注意的一點(diǎn)是,MooseFS的客戶(hù)端程序也就是加載MooseFS磁盤(pán)系統的命令是使用fuse編寫(xiě)的,因此要想掛載MooseFS的服務(wù)器,必要的前提條件就是先安裝fuse,這樣編譯MooseFS的時(shí)候才能順利通過(guò)。接下來(lái),來(lái)看看此分布式文件的讀寫(xiě)過(guò)程。
讀取數據的時(shí)候分為六步,如圖4所示(圖中粗線(xiàn)為數據流方向,細線(xiàn)為控制消息方向)。首先應用程序向客戶(hù)端發(fā)起訪(fǎng)問(wèn)請求,提交訪(fǎng)問(wèn)表(filename,byte range);然后客戶(hù)端將訪(fǎng)問(wèn)表轉換成可以識別的形式(filename,chunk index),然后發(fā)給master節點(diǎn);接下來(lái)master節點(diǎn)返回給客戶(hù)端數據塊句柄以及數據塊的位置;客戶(hù)端按照master節點(diǎn)提供的信息,發(fā)送數據塊句柄以及數據讀取范圍到相應的chunkserver上;chunkserver將所請求的數據發(fā)回給客戶(hù)端;最后客戶(hù)端將數據拷貝到應用程序中。
寫(xiě)入數據到MooseFS中比較復雜一些,共分為九步,如圖6所示。因為分布式系統中存在三個(gè)備份,在讀取數據的時(shí)候只需要從這三個(gè)其中之一讀取即可,但是寫(xiě)入數據的時(shí)候,必須往這三個(gè)備份里面都寫(xiě)入數據。首先,應用程序發(fā)起寫(xiě)入數據的請求,將文件名與數據發(fā)送給客戶(hù)端;接下來(lái)客戶(hù)端將請求表(文件名,數據)轉換成塊句柄(文件名,塊索引),然后發(fā)送給master節點(diǎn);master節點(diǎn)將塊句柄和三個(gè)備份的位置全部返回給客戶(hù)端;然后客戶(hù)端將數據寫(xiě)到所有待寫(xiě)Chunkserver的內部buffer中;客戶(hù)端發(fā)送寫(xiě)指令到主備份Chunkserver,主備份Chunkserver按照一定的順序依次從buffer中把數據寫(xiě)入到數據塊中,主備份Chunkserver寫(xiě)入操作完成后,由主備份Chunkserver發(fā)送同樣寫(xiě)操作指令給次備份Chunkserver執行寫(xiě)任務(wù),次備份Chunkserver寫(xiě)入數據完成后,向主備份Chunkserver報告寫(xiě)入狀態(tài),然后主備份Chunkserver向客戶(hù)端返回寫(xiě)入狀態(tài)。如果以上任意一個(gè)Chunkserver寫(xiě)入失敗,客戶(hù)端會(huì )建議新的節點(diǎn)進(jìn)行再次寫(xiě)入。
2.2 用戶(hù)接口通信模塊設計
與用戶(hù)交互的接口主要使用Seafile完成。Seafile服務(wù)端主要由Httpserver、Seahub、Seafile 、Ccnet和Task Deamon這幾大模塊組成。這幾個(gè)模塊的功能是:Ccnet主要負責通信,是內部的RPC服務(wù)進(jìn)程,連接其他幾個(gè)組件;Seahub主要提供網(wǎng)頁(yè)頁(yè)面,供用戶(hù)管理自己在服務(wù)器上的數據和賬戶(hù)信息;Httpserver主要負責網(wǎng)頁(yè)端的文件上傳與下載;Seafile是整個(gè)架構的核心,其功能是實(shí)現對原始文件的上傳、下載和同步,是整個(gè)框架進(jìn)行數據處理的實(shí)際執行者;Task Deamon主要處理后臺郵件收發(fā)等任務(wù)。在模塊的實(shí)現方面,Ccnet、Seafile和HttpServer這三個(gè)模塊,主要使用C語(yǔ)言編寫(xiě),架構上主要采用libevent事件循環(huán)與線(xiàn)程池處理異步任務(wù)。Seahub使用python Django框架實(shí)現,主要通過(guò)一個(gè)輕量級的python http服務(wù)器Gunicorn來(lái)提供網(wǎng)站支持服務(wù),Seahub是作為Gunicorn一個(gè)進(jìn)程來(lái)運行。Task Deamon主要采用python實(shí)現。Seafile的架構如圖6所示。
3 整體系統搭建與測試
本項目從小型化、易使用的角度出發(fā),針對的環(huán)境主要是家庭,綜合考慮之下,使用的硬件為Wandboard Quad作為私有云的運行環(huán)境,Wandboard Quad是一塊ARM開(kāi)發(fā)板,其配置如圖7所示。
采用Wandboard Quad的原因主要是由于它支持SATA接口,這樣就可以將大容量廉價(jià)的硬盤(pán)接入開(kāi)發(fā)板中做私有云系統的存儲設備。系統整體的測試架構如圖7所示。利用Docker容器技術(shù)將計算資源有效整合,擴充出五個(gè)節點(diǎn),然后在此基礎上利用MooseFS文件系統實(shí)現對單機資源的有效利用,實(shí)現對分塊區域的高效使用,而且此系統也可與其他系統進(jìn)行動(dòng)態(tài)擴展,可以實(shí)現高的容錯。然后在結合Seafile云存儲系統實(shí)現對松散資源的集中管理,加密存儲,從某種意義上解決了傳統存儲存在空間、加密和共享上的瓶頸。實(shí)現了私有云存儲系統,保證了數據的隱私性,且易于擴展。
在測試中,在Wandboard Quad開(kāi)發(fā)板上移植Ubuntu系統鏡像,然后編譯Linux內核使得內核版本在Linux3.8以上,再編譯Uboot,設置系統啟動(dòng)參數。本項目中為了便于調試,采用tftp的方式進(jìn)行Linux系統的啟動(dòng),系統的內核鏡像從上位機交叉開(kāi)發(fā)環(huán)境/tftpboot/Wandboard目錄下獲取內核鏡像。首次啟動(dòng)開(kāi)發(fā)板,進(jìn)入Uboot環(huán)境需要設置參數,其具體的參數如下:
setenv ethact sms0
setenv ethaddr 00:10:75:2A:AE:E0
setenv gatewayip 10.234.56.1
setenv netmask 255.255.255.0
setenv serverip 10.234.56.32
setenv usbethaddr 00:10:75:2A:AE:E0
setenv ipaddr 10.234.56.120
setenv bootargs console=${console},${baudrate} ${optargs} root=/dev/ram video=${video}
usb start
tftp 0x40008000 Wandboard/zImage
bootm
經(jīng)過(guò)上面的一系列工作完成后。Ubuntu系統就可以成功在Wandboard Quad開(kāi)發(fā)板上運行,然后再進(jìn)行網(wǎng)絡(luò )環(huán)境的配置,接下來(lái)繼續移植Docker到Wandboard Quad開(kāi)發(fā)板,接下來(lái)再完成MooseFS分布式系統的構建,分布式系統的Master節點(diǎn)擔任seafile服務(wù)器的角色。用戶(hù)訪(fǎng)問(wèn)私有云的時(shí)候,docker通過(guò)內部的端口映射,直接可以將用戶(hù)的請求發(fā)送到內部的master節點(diǎn)上,然后由master節點(diǎn)完成數據的存儲訪(fǎng)問(wèn)任務(wù)。
4 總結
本文以最新的容器化技術(shù)Docker為基礎搭建私有云存儲系統,致力于解決家庭環(huán)境中,數據存儲的問(wèn)題。以小型化、易部署為目標,在Wandboard Quad開(kāi)發(fā)板上搭建驗證。本系統可以實(shí)現家庭用戶(hù)對數據存儲的需求,而且便攜,占用的面積較少,而且采用Docker技術(shù),系統的可集成度很高,當用戶(hù)需要添加某個(gè)應用時(shí),可以直接創(chuàng )建一個(gè)Docker容器,直接運行,不用考慮兼容性的問(wèn)題,極大地簡(jiǎn)化了部署服務(wù)的周期,并且,為了數據的可靠性,防止單點(diǎn)硬件故障,用戶(hù)可以使用兩塊Wandboard Quad板進(jìn)行部署,或者多塊,利用MooseFS分布式系統的容錯性,可以實(shí)現多數據的高可靠性地存儲。
參考文獻:
[1]Smart City Planning in the Era of Big Data: International Experience.2014.10
[2]http://en.wikipedia.org/wiki/Docker_(software)
[3]https://github.com/docker/libcontainer
[4]https://crosbymichael.com/the-lost-packages-of-docker.html
[5]楊保華,戴王劍,曹亞侖.《Docker技術(shù)入門(mén)與實(shí)戰》.2015.2機械工業(yè)出版社.
[6](日)池田宗廣,大巖尚宏,島本裕志等。Linux內核精髓。機械工業(yè)出版社華章公司。2013.6
[7]Daniel P. Bovet, Marco Cesati. Understanding the Linux Kernel, 3rd Edition. O'Reilly, 2005
[8]http://mkaczanowski.com/building-arm-cluster-part-2-create-and-write-system-image-with-goback/
本文來(lái)源于中國科技期刊《電子產(chǎn)品世界》2016年第3期第46頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處。
評論