以Docker為代表的容器,在人們眼中是平臺(tái)層面的技術(shù)。與屬于基礎(chǔ)架構(gòu)層面的虛擬機(jī)相比,容器看似與底層存儲(chǔ)設(shè)備沒(méi)有什么必然的聯(lián)系,甚至許多情況下使用本地存儲(chǔ)就可以了。那么Docker到底有沒(méi)有企業(yè)存儲(chǔ)方面的需求?它與傳統(tǒng)存儲(chǔ)陣列之間有哪些需要配合的地方呢?
從企業(yè)存儲(chǔ)生態(tài)系統(tǒng)
到Docker結(jié)合點(diǎn)
Copy-On-Write機(jī)制的Docker存儲(chǔ)卷,支持LVM、ZFS、BTRFS、AUFS和OverlayFS等幾種供給格式。
隨著每一輪新技術(shù)熱潮的來(lái)襲,從事技術(shù)工作的筆者都會(huì)有一種“危機(jī)感”,畢竟包括企業(yè)級(jí)在內(nèi)的IT行業(yè)更新太快,不堅(jiān)持學(xué)習(xí)就很容易落伍。
從虛擬化、云計(jì)算、大數(shù)據(jù),一直到軟件定義無(wú)不如此,我們謹(jǐn)慎地關(guān)注著每個(gè)概念中有多少炒作的泡沫?當(dāng)然也會(huì)有真正改變用戶IT消費(fèi)方式的變革,包括與傳統(tǒng)基礎(chǔ)設(shè)施,特別是服務(wù)器、存儲(chǔ)設(shè)備的結(jié)合點(diǎn);還有公共云服務(wù)、Server SAN/超融合這樣的顛覆。
具體到技術(shù)和廠商,比如下圖中的VMware、微軟(Hyper-V和Azure);新一輪還在發(fā)展完善中的開源虛擬化管理/云平臺(tái)OpenStack;還有本文要討論的重點(diǎn)——Docker容器。
現(xiàn)在有一種比較激進(jìn)的思想,未來(lái)一切都是軟件定義的,傳統(tǒng)商業(yè)存儲(chǔ)陣列將會(huì)慢慢失去市場(chǎng)。我們看到了VSAN的出現(xiàn)——至少目前它的應(yīng)用還是有局限,而不是萬(wàn)能的;我們也看到搭車OpenStack/KVM而火熱的Ceph開源分布式存儲(chǔ),但它距離成熟易用還有很大的一段距離。因此在當(dāng)前,虛擬化/云計(jì)算平臺(tái)一直在加強(qiáng)對(duì)傳統(tǒng)外部共享存儲(chǔ)的支持,容器也不例外。
本文中引用了一些來(lái)自戴爾的資料,但它們都具有普適性,我們接下來(lái)的話題也會(huì)圍繞通用技術(shù)趨勢(shì),而不是專屬于某一家具體的產(chǎn)品。
上圖列出了存儲(chǔ)系統(tǒng)與領(lǐng)先的技術(shù)合作伙伴間的管理整合,這些是行業(yè)內(nèi)一線廠商基本都要去做的工作。大致包括以下幾個(gè)方面:
虛擬化整合:VMware VAAI、VASA、VVOL,微軟Hyper-V對(duì)應(yīng)的API支持等,由于本文主題在這里不詳細(xì)介紹了。
云平臺(tái)整合:OpenStack針對(duì)塊存儲(chǔ)設(shè)備支持的Cinder driver等。
應(yīng)用保護(hù)整合:生成和管理具備Oracle數(shù)據(jù)庫(kù)等應(yīng)用程序一致性的快照/恢復(fù)點(diǎn),也包括Windows VSS、VMware虛擬機(jī)的支持。
備份軟件整合:通過(guò)流行的備份軟件對(duì)生成快照的數(shù)據(jù)進(jìn)行保護(hù),從而確??苫謴?fù)性,這里列出了賽門鐵克(嚴(yán)格說(shuō)現(xiàn)在算Veritas)和CommVault。如果是基于戴爾SC存儲(chǔ)快照的備份,應(yīng)該還有自家的NetVault備份軟件可以支持。(詳見:《DellWorld2015快訊:NetVault Backup11智能備份詳解》)
應(yīng)用監(jiān)控整合:如Foglight,是戴爾收購(gòu)Quest獲得的高級(jí)應(yīng)用監(jiān)控解決方案。我記得EMC等廠商也提供類似的軟件產(chǎn)品。
Docker容器整合:針對(duì)SAN共享塊存儲(chǔ)設(shè)備的容器卷管理系統(tǒng)。
Flocker
擁有“無(wú)限可能”的卷管理器
目前我們看到包括EMC、戴爾SC系列在內(nèi)的幾家存儲(chǔ)廠商/產(chǎn)品家族,都在與ClusterHQ公司的Flocker合作——一個(gè)針對(duì)Docker應(yīng)用開源的容器數(shù)據(jù)卷管理器,它能夠像本地存儲(chǔ)那樣對(duì)基于塊的共享存儲(chǔ)提供良好支持。
Flocker帶來(lái)了靈活性和擴(kuò)展性,它提供的工具能夠:
●遷移數(shù)據(jù)
●運(yùn)行容器化狀態(tài)的服務(wù)(例如數(shù)據(jù)庫(kù))
●可移動(dòng)性 – 在集群中的任意容器上使用
●管理Docker容器和數(shù)據(jù)卷
●卷跟隨容器在主機(jī)之間(移動(dòng))
●由控制服務(wù)提供的REST API接口
與Flocker結(jié)合之后,存儲(chǔ)陣列擁有“無(wú)限可能”。Flocker可以支持較高版本的CentOS和Ubuntu Linux服務(wù)器(不排除有更新增加);可以使用的數(shù)據(jù)卷除了共享塊存儲(chǔ)之外,還有“本地”存儲(chǔ)——我們理解后者中也包括被虛擬機(jī)視為本地存儲(chǔ)的Amazon EBS、OpenStack Ceph RBD和Swift中的鏡像掛載,還有RackSpace云設(shè)施里類似的實(shí)現(xiàn)。
Flocker還可以與Linux上運(yùn)行的任意數(shù)據(jù)庫(kù)一起工作,這里面包括傳統(tǒng)關(guān)系型的MySQL、PostgreSQL,也有新興的MongoDB、Redis和RabbitMQ等。上圖中并未列出Oracle,應(yīng)該是因?yàn)镺racle已經(jīng)有并且推薦使用自己的存儲(chǔ)管理器ASM,直接控制到磁盤/SSD/LUN一級(jí),Oracle一直不官方支持除自家VM之外的虛擬機(jī)環(huán)境,我們也沒(méi)聽說(shuō)過(guò)有人在容器中使用。
共享塊存儲(chǔ)
容器遷移、能否做HA?
我們來(lái)看一下使用了Flocker之后有何不同。在原生Docker環(huán)境,當(dāng)一臺(tái)服務(wù)器上運(yùn)行的容器化有狀態(tài)服務(wù)(數(shù)據(jù)庫(kù))遷移至另一臺(tái)時(shí),其數(shù)據(jù)卷會(huì)留在原地,在新的服務(wù)器上啟動(dòng)的容器沒(méi)有任何數(shù)據(jù)。也就是說(shuō),在遷移之前需要先手動(dòng)停止容器并復(fù)制數(shù)據(jù)到新的服務(wù)器才能使用。
而在使用了Flocker之后,當(dāng)容器移動(dòng)時(shí)數(shù)據(jù)卷與它一起移動(dòng),您的數(shù)據(jù)庫(kù)(容器)能夠保持其數(shù)據(jù)狀態(tài)。這里大家有沒(méi)有聯(lián)想到VMware的vMotion呢?傳統(tǒng)并且最實(shí)用的vMotion虛擬機(jī)遷移是需要vmdk鏡像位于共享存儲(chǔ)上的,在這里戴爾SC陣列是同樣的角色,我想與Flocker合作的其他傳統(tǒng)存儲(chǔ)廠商也是類似情況。
最后,具體到戴爾的存儲(chǔ)是如何與Flocker一同工作呢?如上圖,我們看到SC陣列上有一個(gè)100TB的LUN 10映射到2臺(tái)服務(wù)器,其中Ubuntu Docker Host 1在上面運(yùn)行了一個(gè)MongoDB容器。當(dāng)Flocker遷移容器時(shí),會(huì)一并發(fā)送指令給戴爾存儲(chǔ)插件(由存儲(chǔ)廠商與Flocker合作開發(fā))遷移卷到Ubuntu Docker Host 2。
這里并不需要真正的數(shù)據(jù)拷貝,簡(jiǎn)單理解應(yīng)該是一個(gè)把MongoDB卷從Host 1的容器上解除注冊(cè),然后將其注冊(cè)到Host 2上的過(guò)程。
進(jìn)一步思考,按照從vMotion到vSphere HA的思路,容器是否也可以在兩臺(tái)主機(jī)之間做高可用呢?在偵測(cè)到Host 1出現(xiàn)故障時(shí),上面提到容器遷移的后半部分——即在備用主機(jī)注冊(cè)共享存儲(chǔ)上的數(shù)據(jù)卷,然后啟動(dòng)容器這一過(guò)程,實(shí)現(xiàn)起來(lái)并不復(fù)雜。
我們預(yù)計(jì),隨著Docker應(yīng)用的不斷普及,企業(yè)級(jí)數(shù)據(jù)遷移、高可用需求的不斷出現(xiàn),主流存儲(chǔ)廠商會(huì)陸續(xù)提供這方面的支持。