Longhorn項目現(xiàn)已正式發(fā)布!這是一個基于云和容器部署的分布式塊存儲新方式。Longhorn遵循微服務(wù)的原則,利用容器將小型獨(dú)立組件構(gòu)建為分布式塊存儲,并使用容器編排來協(xié)調(diào)這些組件,形成彈性分布式系統(tǒng)。
創(chuàng)新互聯(lián)建站成立于2013年,我們提供高端重慶網(wǎng)站建設(shè)、重慶網(wǎng)站制作、成都網(wǎng)站設(shè)計、網(wǎng)站定制、營銷型網(wǎng)站建設(shè)、成都小程序開發(fā)、微信公眾號開發(fā)、網(wǎng)站推廣服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計、程序開發(fā)來完成項目落地,為玻璃鋼坐凳企業(yè)提供源源不斷的流量和訂單咨詢。
Why Longhorn?
如今,基于云和容器的部署規(guī)模日益擴(kuò)大,分布式塊存儲系統(tǒng)也正變得越來越復(fù)雜,單個存儲控制器上的volume數(shù)量在不斷增加。2000年代初,存儲控制器上的volume數(shù)量只有幾十個,但現(xiàn)代云環(huán)境卻需要數(shù)萬到數(shù)百萬的分布式塊存儲卷。存儲控制器變成了高度復(fù)雜的分布式系統(tǒng)。
分布式塊存儲本身比其他形式的分布式存儲(如文件系統(tǒng))更簡單。無論系統(tǒng)中有多少volume,每個volume只能由單個主機(jī)進(jìn)行裝載。正因如此,我們設(shè)想,是否可以將大型塊存儲控制器分割成多個較小的存儲控制器?若想要如此分割,我們需要保證這些volume仍然是從公共磁盤池構(gòu)建的,并且我們需要有辦法來編排這些存儲控制器,讓它們可以協(xié)同工作。
為了將這一想法發(fā)揮到極限,我們創(chuàng)建了Longhorn項目。這是一個我們認(rèn)為值得探索的方向,每個控制器上只有一個volume,這將大大簡化存儲控制器的設(shè)計。因?yàn)榭刂破鬈浖墓收嫌騼H限于單個volume,所以控制器若崩潰,也只會影響一個volume。
Longhorn充分利用了近年來關(guān)于如何編排大量的容器和虛擬機(jī)的核心技術(shù)。例如,Longhorn并沒有構(gòu)建一個可以擴(kuò)展到100,000個volume的高度復(fù)雜的控制器,而是出于讓存儲控制器簡單輕便的考慮,創(chuàng)建了100,000個單獨(dú)的控制器。然后,我們可以利用像Swarm、Mesos和Kubernetes這樣的最先進(jìn)的編排系統(tǒng)來調(diào)度這些獨(dú)立的控制器,共享一組磁盤中的資源,協(xié)同工作,形成一個彈性的分布式塊存儲系統(tǒng)。
Longhorn基于微服務(wù)的設(shè)計還有很多其他優(yōu)勢。因?yàn)槊總€volume都有自己的控制器,在升級每個volume的控制器和replica容器時,是不會導(dǎo)致IO操作明顯的中斷的。 Longhorn可以創(chuàng)建一個長期運(yùn)行的工作來編排所有l(wèi)ive volume的升級,同時確保不會中斷系統(tǒng)正在進(jìn)行的操作。為確保升級不會導(dǎo)致意外的問題,Longhorn可以選擇升級一小部分volume,并在升級過程中出現(xiàn)問題時回滾到舊版本。這些做法在現(xiàn)代微服務(wù)應(yīng)用中已得到廣泛應(yīng)用,但在存儲系統(tǒng)中并不常見。我們希望Longhorn可以助力于微服務(wù)在存儲領(lǐng)域的更多應(yīng)用。
Longhorn功能概述
將本地磁盤或安裝在計算或?qū)S么鎯χ鳈C(jī)中的網(wǎng)絡(luò)存儲形成共享資源池。
為容器和虛擬機(jī)創(chuàng)建塊存儲卷。你可以指定volume的大小,IOPS的需求,以及你想要的跨主機(jī)的同步replica的數(shù)量(這里的主機(jī)是指那些為volume提供存儲資源的主機(jī))。replica是在底層磁盤或網(wǎng)絡(luò)存儲上精簡配置的。
為每個volume創(chuàng)建一個專用的存儲控制器。這可能是與大多數(shù)現(xiàn)有的分布式存儲系統(tǒng)相比,Longhorn最具特色的功能。大多數(shù)現(xiàn)有的分布式存儲系統(tǒng)通常采用復(fù)雜的控制器軟件來服務(wù)于從數(shù)百到數(shù)百萬不等的volume。但Longhorn不同,每個控制器上只有一個volume,Longhorn將每個volume都轉(zhuǎn)變成了微服務(wù)。
跨計算或存儲主機(jī)調(diào)度多個replica。Longhorn會監(jiān)測每一個replica的健康狀況,對問題進(jìn)行維修,并在必要時重新生成replica。
以Docker容器的形式操作存儲控制器和replica。例如,一個volume有三個replica,就意味著有四個容器。
為每個volume分配多個存儲“前端”。常見的前端包括Linux內(nèi)核設(shè)備(映射到/ dev / longhorn)和iSCSI目標(biāo)。Linux內(nèi)核設(shè)備適用于支持Docker volume,而iSCSI目標(biāo)更適合支持QEMU / KVM和VMware volume。
創(chuàng)建volume快照(snapshot)和AWS EBS風(fēng)格的備份。您可以為每個volume創(chuàng)建多達(dá)254個快照,這些快照可以逐個備份到NFS或S3兼容的輔助存儲中。只有更改的字節(jié)會在備份操作期間被復(fù)制和存儲。
指定定期快照和備份操作的計劃。您可以指定這些操作的頻率(每小時,每天,每周,每月和每年)、執(zhí)行這些操作的確切時間(例如,每個星期日凌晨3:00),以及保留多少個循環(huán)快照和備份集。
快速入門指南
Longhorn易于安裝和使用。您只需確保Docker已安裝,并且安裝了open-iscsi軟件包,就可以在單個Ubuntu 16.04服務(wù)器上設(shè)置運(yùn)行Longhorn所需的一切。
運(yùn)行以下命令在單個主機(jī)上設(shè)置Longhorn:
git clone https://github.com/rancher/longhorncd longhorn/deploy ./longhorn-setup-single-node-env.sh
該腳本將拉起并啟動多個容器,包括etcd鍵值存儲區(qū)、Longhorn volume管理器、Longhorn UI和Longhorn docker volume插件容器。此腳本完成后,將生成以下輸出:
Longhorn is up at port 8080
您可以通過連接到http:// <hostname或IP>:8080來使用UI。以下是有關(guān)volume詳細(xì)信息的屏幕圖:
您現(xiàn)在可以從Docker CLI創(chuàng)建持久的Longhorn volume:
docker volume create -d longhorn vol1 docker run -it --volume-driver longhorn -v vol1:/vol1 ubuntu bash
在同一主機(jī)上運(yùn)行單主機(jī)Longhorn安裝程序etcd和所有volume副本,因此不適合在生產(chǎn)環(huán)境中使用。 Longhorn GitHub頁面有更多關(guān)于如何設(shè)置生產(chǎn)級別多主機(jī)使用說明,多主機(jī)將使用單獨(dú)的etcd服務(wù)器、Docker swarm mode集群和用于存儲備份的單獨(dú)NFS服務(wù)器。
Longhorn和其他存儲系統(tǒng)
作為一項實(shí)驗(yàn),我們編寫了Longhorn,借助容器和微服務(wù),Longhorn構(gòu)建了一個分布式塊存儲系統(tǒng),Longhorn既不是為了與現(xiàn)有存儲軟件和存儲系統(tǒng)競爭,也并非為替代現(xiàn)有存儲軟件和存儲系統(tǒng),原因如下:
Longhorn只關(guān)注分布式塊存儲。從另一個角度來說,分布式文件存儲更難建立。如Ceph、Gluster、Infinit(由Docker收購)、Quobyte、Portworx和StorageOS以及來自NetApp、EMC等的存儲系統(tǒng),提供了分布式文件系統(tǒng)、統(tǒng)一存儲體驗(yàn)、企業(yè)數(shù)據(jù)管理以及許多Longhorn不支持的其他企業(yè)級功能。
Longhorn需要NFS共享或S3兼容的對象用以存儲volume備份。因此,它必須與來自NetApp、EMC Isilon或其他供應(yīng)商的網(wǎng)絡(luò)文件存儲器以及來自AWS S3、Minio、SwiftStack、Cloudian等的S3兼容的對象存儲端點(diǎn)配合使用。
Longhorn缺少企業(yè)級存儲功能,例如重復(fù)數(shù)據(jù)刪除、壓縮和自動分層以及將大容量條帶化為較小塊的能力。因此,Longhorn volumes受到單個磁盤的大小和性能的限制。 iSCSI目標(biāo)以用戶級進(jìn)程運(yùn)行。我們在分布式存儲產(chǎn)品(如Dell EqualLogic,SolidFire和Datera)中可以看到,它缺乏企業(yè)級 iscsi 系統(tǒng)的性能、可靠性和多路徑支持。
我們建立了Longhorn,使其簡單易行,希望它可以測試我們的想法——使用容器和微服務(wù)來構(gòu)建存儲。它完全由Go(通常稱為golang)編寫,是現(xiàn)代系統(tǒng)編程的首選語言。
下面我們將繼續(xù)詳細(xì)描述Longhorn,讓大家能對Longhorn現(xiàn)階段的功能設(shè)計有個大致的預(yù)覽。當(dāng)前,盡管所描述的功能還未全部實(shí)現(xiàn),但我們將會繼續(xù)努力,使Longhorn項目的愿景變?yōu)楝F(xiàn)實(shí)。
作為微服務(wù)的volume
Longhorn volume管理器容器在Longhorn集群中的每個主機(jī)上運(yùn)行。使用Rancher或Swarm術(shù)語,Longhorn管理器容器是一項全球性服務(wù)。如果您使用Kubernetes,Longhorn volume管理器則被視為DaemonSet。Longhorn volume管理器處理從UI中或Docker和Kubernetes的卷插件中執(zhí)行API調(diào)用。您可以在這里找到Longhorn API的說明。下圖展示了Longhorn在Docker Swarm和Kubernetes中的控制路徑。
當(dāng)Longhorn管理器被要求創(chuàng)建一個volume時,它將在該volume所附的主機(jī)以及放置副本的主機(jī)上創(chuàng)建一個控制器容器。副本應(yīng)放置在不同的主機(jī)上,以確保最大可用性。
在下圖中,有三個容器有Longhorn volumes。每個Docker volume都有一個作為容器運(yùn)行的專用控制器。每個控制器有兩個副本,每個副本都是一個容器。圖中的箭頭表示Docker volume、控制器容器、副本容器和磁盤之間的讀/寫數(shù)據(jù)流。通過為每個volume創(chuàng)建單獨(dú)的控制器,如果某個控制器發(fā)生故障,也不會影響其他volums的功能。
例如,在大規(guī)模部署100,000個Docker volumes的過程中,每個volume具有兩個副本,意味著將存在100,000個控制器容器和20萬個復(fù)制容器。為了安排、監(jiān)視、協(xié)調(diào)和修復(fù)所有這些控制器和副本,需要一個存儲編排系統(tǒng)。
存儲編排
存儲編排負(fù)責(zé)調(diào)度控制器和副本,監(jiān)視各種組件,并從錯誤中恢復(fù)。Longhorn volume管理器執(zhí)行管理volume生命周期所需的所有存儲編排操作。您可以在這里找到Longhorn volume管理器執(zhí)行存儲編排的詳細(xì)信息。
控制器的功能類似于典型的鏡像RAID控制器,對其副本進(jìn)行讀寫操作并監(jiān)控副本的健康狀況。所有寫入操作都被同步復(fù)制。因?yàn)槊總€volume都有自己的專用控制器,并且控制器駐留在volume所附加的同一主機(jī)上,所以我們不需要控制器的高可用性(HA)配置。
Longhorn volume管理器負(fù)責(zé)挑選副本所在的主機(jī)。然后檢查所有副本的健康狀況,在必要時,執(zhí)行相應(yīng)操作重建錯誤的副本。
復(fù)制操作
Longhorn replicas是通過Linux分散的文件構(gòu)建的,它支持精簡配置。目前,我們不保留額外的元數(shù)據(jù)來指示使用哪些block。block大小為4K。
拍攝快照時,您將創(chuàng)建一個差異磁盤。隨著快照數(shù)量的增長,差異磁盤鏈可能會相當(dāng)長。為了提高讀取性能,Longhorn保留了一個讀取索引,記錄了該差異磁盤保存的每個4K block的有效數(shù)據(jù)。在下圖中,該volume有八個block。讀取索引有八個條目,并且在讀取操作發(fā)生時被惰性填充。寫操作會重置讀取索引,使其指向?qū)崟r數(shù)據(jù)。
讀取保存在內(nèi)存中的索引時,每4K block消耗一個字節(jié)。字節(jié)大小的讀取索引意味著您可以為每個volume獲取多達(dá)254個快照。
為每個副本讀取索引將會消耗一定量的內(nèi)存數(shù)據(jù)結(jié)構(gòu)。例如,1TB卷消耗256MB的內(nèi)存讀取索引。因此,我們未來會考慮將讀取的索引放在內(nèi)存映射文件中。
副本重建
當(dāng)控制器檢測到某個副本出現(xiàn)故障時,它會將副本標(biāo)記為處于錯誤狀態(tài)。Longhorn volume管理器負(fù)責(zé)啟動和協(xié)調(diào)重建錯誤副本,過程如下所示:
Longhorn volume管理器創(chuàng)建一個空白副本,并調(diào)用控制器將空白副本添加到其副本集中。
要添加空白副本,控制器須執(zhí)行以下操作:
暫停所有讀寫操作
在WO(只寫)模式下添加空白副本
獲取所有現(xiàn)有副本的快照,即刻會有一個空白的差異磁盤
Unpauses全部讀取寫入操作,僅將寫入操作發(fā)送到新添加的副本
啟動后臺進(jìn)程,將所有(除最新的以外)差異磁盤從好的副本同步到空白副本
同步完成后,所有副本的數(shù)據(jù)都具有一致性,volume管理器將新副本設(shè)置為RW(讀寫)模式
Longhorn volume管理器調(diào)用控制器從其副本集中刪除錯誤的副本。
重新構(gòu)建副本并不是很有效。我們可以通過嘗試重新使用故障副本中剩余的分散文件來提高重建性能。
備份快照
我喜歡Amazon EBS的工作方式——每個快照都自動備份到S3。主存儲中沒有任何內(nèi)容。但是,我們決定讓Longhorn的快照和備份更靈活一些。將快照和備份操作分開執(zhí)行。通過拍攝快照、備份此快照與上一個快照之間的差異以及刪除上一個快照來模擬EBS風(fēng)格的快照。我們還開發(fā)了一種定期的備份機(jī)制,以幫助您自動執(zhí)行此類操作。
通過檢測和傳輸快照之間的被更改的block, 我們實(shí)現(xiàn)了高效的增量備份。這個任務(wù)相對來說比較容易, 因?yàn)槊總€快照都是一個差異文件, 只用存儲最后一個快照中的更改。為了避免存儲大量的小block,我們使用2MB block執(zhí)行備份操作。這意味著,如果2MB邊界中的任何4K block改變,我們將不得不備份整個2MB block。但我們認(rèn)為這在可管理性和效率之間提供了平衡。
在下圖中,我們已經(jīng)備份了snap2和snap3。每個備份保留自己的一組2MB block,兩個備份共享一個綠色block和一個藍(lán)色block。每個2MB block僅備份一次。這意味著當(dāng)我們從二級存儲中刪除備份時,不能刪除它所使用的所有block。相反,我們會定期執(zhí)行垃圾回收,以便從二級存儲中清理未使用的block。
Longhorn將給定的volume的所有備份存儲在公用目錄下。以下是描述Longhorn如何存儲volume的備份的簡單視圖。volume級元數(shù)據(jù)存儲在volume.cfg中。每個備份的元數(shù)據(jù)文件(例如snap2.cfg)相對較小,因?yàn)樗鼈冎话瑐浞葜兴?MB block的偏移量和校驗(yàn)和。屬于同一volume的所有備份的2MB block都存儲在公用目錄下,因此可以跨多個備份進(jìn)行共享。2MB block(.blk文件)被壓縮。由于使用了校驗(yàn)和來處理2MB block,所以我們刪除了同一volume的2MB block中一定程度的重復(fù)數(shù)據(jù)。
兩種部署模式
Longhorn volume管理器執(zhí)行調(diào)度副本到節(jié)點(diǎn)的任務(wù)。我們可以調(diào)整調(diào)度算法,以不同的方式放置控制器、復(fù)制副本??刂破饕冀K放置在連接volume的主機(jī)上。另一方面,副本可以在運(yùn)行控制器的同一組計算服務(wù)器上或在一組專用存儲服務(wù)器上進(jìn)行。前者構(gòu)成了超聚合部署模型, 后者則構(gòu)成專用存儲服務(wù)器模型。
堅信開源才是技術(shù)的未來,始終秉承開源理念的Rancher Labs,此次推出的Longhorn依然是100%的開源軟件。您可以通過在GitHub上下載Longhorn。
分享文章:Longhorn全解析及快速入門指南
分享地址:http://jinyejixie.com/article6/jpdjog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、App開發(fā)、品牌網(wǎng)站設(shè)計、App設(shè)計、品牌網(wǎng)站制作、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)