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