中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Longhorn全解析及快速入門指南

發布時間:2020-07-10 21:15:16 來源:網絡 閱讀:885 作者:RancherLabs 欄目:建站服務器

Longhorn項目現已正式發布!這是一個基于云和容器部署的分布式塊存儲新方式。Longhorn遵循微服務的原則,利用容器將小型獨立組件構建為分布式塊存儲,并使用容器編排來協調這些組件,形成彈性分布式系統。


Why Longhorn?


如今,基于云和容器的部署規模日益擴大,分布式塊存儲系統也正變得越來越復雜,單個存儲控制器上的volume數量在不斷增加。2000年代初,存儲控制器上的volume數量只有幾十個,但現代云環境卻需要數萬到數百萬的分布式塊存儲卷。存儲控制器變成了高度復雜的分布式系統。


分布式塊存儲本身比其他形式的分布式存儲(如文件系統)更簡單。無論系統中有多少volume,每個volume只能由單個主機進行裝載。正因如此,我們設想,是否可以將大型塊存儲控制器分割成多個較小的存儲控制器?若想要如此分割,我們需要保證這些volume仍然是從公共磁盤池構建的,并且我們需要有辦法來編排這些存儲控制器,讓它們可以協同工作。


為了將這一想法發揮到極限,我們創建了Longhorn項目。這是一個我們認為值得探索的方向,每個控制器上只有一個volume,這將大大簡化存儲控制器的設計。因為控制器軟件的故障域僅限于單個volume,所以控制器若崩潰,也只會影響一個volume。


Longhorn充分利用了近年來關于如何編排大量的容器和虛擬機的核心技術。例如,Longhorn并沒有構建一個可以擴展到100,000個volume的高度復雜的控制器,而是出于讓存儲控制器簡單輕便的考慮,創建了100,000個單獨的控制器。然后,我們可以利用像Swarm、Mesos和Kubernetes這樣的最先進的編排系統來調度這些獨立的控制器,共享一組磁盤中的資源,協同工作,形成一個彈性的分布式塊存儲系統。


Longhorn基于微服務的設計還有很多其他優勢。因為每個volume都有自己的控制器,在升級每個volume的控制器和replica容器時,是不會導致IO操作明顯的中斷的。 Longhorn可以創建一個長期運行的工作來編排所有live volume的升級,同時確保不會中斷系統正在進行的操作。為確保升級不會導致意外的問題,Longhorn可以選擇升級一小部分volume,并在升級過程中出現問題時回滾到舊版本。這些做法在現代微服務應用中已得到廣泛應用,但在存儲系統中并不常見。我們希望Longhorn可以助力于微服務在存儲領域的更多應用。


Longhorn功能概述


  • 將本地磁盤或安裝在計算或專用存儲主機中的網絡存儲形成共享資源池。

  • 為容器和虛擬機創建塊存儲卷。你可以指定volume的大小,IOPS的需求,以及你想要的跨主機的同步replica的數量(這里的主機是指那些為volume提供存儲資源的主機)。replica是在底層磁盤或網絡存儲上精簡配置的。

  • 為每個volume創建一個專用的存儲控制器。這可能是與大多數現有的分布式存儲系統相比,Longhorn最具特色的功能。大多數現有的分布式存儲系統通常采用復雜的控制器軟件來服務于從數百到數百萬不等的volume。但Longhorn不同,每個控制器上只有一個volume,Longhorn將每個volume都轉變成了微服務。

  • 跨計算或存儲主機調度多個replica。Longhorn會監測每一個replica的健康狀況,對問題進行維修,并在必要時重新生成replica。

  • 以Docker容器的形式操作存儲控制器和replica。例如,一個volume有三個replica,就意味著有四個容器。

  • 為每個volume分配多個存儲“前端”。常見的前端包括Linux內核設備(映射到/ dev / longhorn)和iSCSI目標。Linux內核設備適用于支持Docker volume,而iSCSI目標更適合支持QEMU / KVM和VMware volume。

  • 創建volume快照(snapshot)和AWS EBS風格的備份。您可以為每個volume創建多達254個快照,這些快照可以逐個備份到NFS或S3兼容的輔助存儲中。只有更改的字節會在備份操作期間被復制和存儲。

  • 指定定期快照和備份操作的計劃。您可以指定這些操作的頻率(每小時,每天,每周,每月和每年)、執行這些操作的確切時間(例如,每個星期日凌晨3:00),以及保留多少個循環快照和備份集。

快速入門指南


Longhorn易于安裝和使用。您只需確保Docker已安裝,并且安裝了open-iscsi軟件包,就可以在單個Ubuntu 16.04服務器上設置運行Longhorn所需的一切。

 

運行以下命令在單個主機上設置Longhorn:

git clone https://github.com/rancher/longhorncd longhorn/deploy
./longhorn-setup-single-node-env.sh

該腳本將拉起并啟動多個容器,包括etcd鍵值存儲區、Longhorn volume管理器、Longhorn UI和Longhorn docker volume插件容器。此腳本完成后,將生成以下輸出:

Longhorn is up at port 8080

您可以通過連接到http:// <hostname或IP>:8080來使用UI。以下是有關volume詳細信息的屏幕圖:

 

Longhorn全解析及快速入門指南


您現在可以從Docker CLI創建持久的Longhorn volume:

docker volume create -d longhorn vol1
docker run -it --volume-driver longhorn -v vol1:/vol1 ubuntu bash

在同一主機上運行單主機Longhorn安裝程序etcd和所有volume副本,因此不適合在生產環境中使用。 Longhorn GitHub頁面有更多關于如何設置生產級別多主機使用說明,多主機將使用單獨的etcd服務器、Docker swarm mode集群和用于存儲備份的單獨NFS服務器。


Longhorn和其他存儲系統


作為一項實驗,我們編寫了Longhorn,借助容器和微服務,Longhorn構建了一個分布式塊存儲系統,Longhorn既不是為了與現有存儲軟件和存儲系統競爭,也并非為替代現有存儲軟件和存儲系統,原因如下:


  • Longhorn只關注分布式塊存儲。從另一個角度來說,分布式文件存儲更難建立。如Ceph、Gluster、Infinit(由Docker收購)、Quobyte、Portworx和StorageOS以及來自NetApp、EMC等的存儲系統,提供了分布式文件系統、統一存儲體驗、企業數據管理以及許多Longhorn不支持的其他企業級功能。

  • Longhorn需要NFS共享或S3兼容的對象用以存儲volume備份。因此,它必須與來自NetApp、EMC Isilon或其他供應商的網絡文件存儲器以及來自AWS S3、Minio、SwiftStack、Cloudian等的S3兼容的對象存儲端點配合使用。

  • Longhorn缺少企業級存儲功能,例如重復數據刪除、壓縮和自動分層以及將大容量條帶化為較小塊的能力。因此,Longhorn volumes受到單個磁盤的大小和性能的限制。 iSCSI目標以用戶級進程運行。我們在分布式存儲產品(如Dell EqualLogic,SolidFire和Datera)中可以看到,它缺乏企業級 iscsi 系統的性能、可靠性和多路徑支持。


我們建立了Longhorn,使其簡單易行,希望它可以測試我們的想法——使用容器和微服務來構建存儲。它完全由Go(通常稱為golang)編寫,是現代系統編程的首選語言。

 

下面我們將繼續詳細描述Longhorn,讓大家能對Longhorn現階段的功能設計有個大致的預覽。當前,盡管所描述的功能還未全部實現,但我們將會繼續努力,使Longhorn項目的愿景變為現實。


作為微服務的volume


Longhorn volume管理器容器在Longhorn集群中的每個主機上運行。使用Rancher或Swarm術語,Longhorn管理器容器是一項全球性服務。如果您使用Kubernetes,Longhorn volume管理器則被視為DaemonSet。Longhorn volume管理器處理從UI中或Docker和Kubernetes的卷插件中執行API調用。您可以在這里找到Longhorn API的說明。下圖展示了Longhorn在Docker Swarm和Kubernetes中的控制路徑。


Longhorn全解析及快速入門指南


當Longhorn管理器被要求創建一個volume時,它將在該volume所附的主機以及放置副本的主機上創建一個控制器容器。副本應放置在不同的主機上,以確保最大可用性。

 

在下圖中,有三個容器有Longhorn volumes。每個Docker volume都有一個作為容器運行的專用控制器。每個控制器有兩個副本,每個副本都是一個容器。圖中的箭頭表示Docker volume、控制器容器、副本容器和磁盤之間的讀/寫數據流。通過為每個volume創建單獨的控制器,如果某個控制器發生故障,也不會影響其他volums的功能。


Longhorn全解析及快速入門指南


例如,在大規模部署100,000個Docker volumes的過程中,每個volume具有兩個副本,意味著將存在100,000個控制器容器和20萬個復制容器。為了安排、監視、協調和修復所有這些控制器和副本,需要一個存儲編排系統。


存儲編排


存儲編排負責調度控制器和副本,監視各種組件,并從錯誤中恢復。Longhorn volume管理器執行管理volume生命周期所需的所有存儲編排操作。您可以在這里找到Longhorn volume管理器執行存儲編排的詳細信息。


控制器的功能類似于典型的鏡像RAID控制器,對其副本進行讀寫操作并監控副本的健康狀況。所有寫入操作都被同步復制。因為每個volume都有自己的專用控制器,并且控制器駐留在volume所附加的同一主機上,所以我們不需要控制器的高可用性(HA)配置。

 

Longhorn volume管理器負責挑選副本所在的主機。然后檢查所有副本的健康狀況,在必要時,執行相應操作重建錯誤的副本。


復制操作


Longhorn replicas是通過Linux分散的文件構建的,它支持精簡配置。目前,我們不保留額外的元數據來指示使用哪些block。block大小為4K。

 

拍攝快照時,您將創建一個差異磁盤。隨著快照數量的增長,差異磁盤鏈可能會相當長。為了提高讀取性能,Longhorn保留了一個讀取索引,記錄了該差異磁盤保存的每個4K block的有效數據。在下圖中,該volume有八個block。讀取索引有八個條目,并且在讀取操作發生時被惰性填充。寫操作會重置讀取索引,使其指向實時數據。


Longhorn全解析及快速入門指南


讀取保存在內存中的索引時,每4K block消耗一個字節。字節大小的讀取索引意味著您可以為每個volume獲取多達254個快照。

 

為每個副本讀取索引將會消耗一定量的內存數據結構。例如,1TB卷消耗256MB的內存讀取索引。因此,我們未來會考慮將讀取的索引放在內存映射文件中。


副本重建


當控制器檢測到某個副本出現故障時,它會將副本標記為處于錯誤狀態。Longhorn volume管理器負責啟動和協調重建錯誤副本,過程如下所示:


  • Longhorn volume管理器創建一個空白副本,并調用控制器將空白副本添加到其副本集中。

  • 要添加空白副本,控制器須執行以下操作:

  1.     暫停所有讀寫操作

  2.     在WO(只寫)模式下添加空白副本

  3.     獲取所有現有副本的快照,即刻會有一個空白的差異磁盤

  4.     Unpauses全部讀取寫入操作,僅將寫入操作發送到新添加的副本

  5.     啟動后臺進程,將所有(除最新的以外)差異磁盤從好的副本同步到空白副本

  6.     同步完成后,所有副本的數據都具有一致性,volume管理器將新副本設置為RW(讀寫)模式

  • Longhorn volume管理器調用控制器從其副本集中刪除錯誤的副本。


重新構建副本并不是很有效。我們可以通過嘗試重新使用故障副本中剩余的分散文件來提高重建性能。


備份快照


我喜歡Amazon EBS的工作方式——每個快照都自動備份到S3。主存儲中沒有任何內容。但是,我們決定讓Longhorn的快照和備份更靈活一些。將快照和備份操作分開執行。通過拍攝快照、備份此快照與上一個快照之間的差異以及刪除上一個快照來模擬EBS風格的快照。我們還開發了一種定期的備份機制,以幫助您自動執行此類操作。


通過檢測和傳輸快照之間的被更改的block, 我們實現了高效的增量備份。這個任務相對來說比較容易, 因為每個快照都是一個差異文件, 只用存儲最后一個快照中的更改。為了避免存儲大量的小block,我們使用2MB block執行備份操作。這意味著,如果2MB邊界中的任何4K block改變,我們將不得不備份整個2MB block。但我們認為這在可管理性和效率之間提供了平衡。

 

在下圖中,我們已經備份了snap2和snap3。每個備份保留自己的一組2MB block,兩個備份共享一個綠色block和一個藍色block。每個2MB block僅備份一次。這意味著當我們從二級存儲中刪除備份時,不能刪除它所使用的所有block。相反,我們會定期執行垃圾回收,以便從二級存儲中清理未使用的block。


Longhorn全解析及快速入門指南


Longhorn將給定的volume的所有備份存儲在公用目錄下。以下是描述Longhorn如何存儲volume的備份的簡單視圖。volume級元數據存儲在volume.cfg中。每個備份的元數據文件(例如snap2.cfg)相對較小,因為它們只包含備份中所有2MB block的偏移量和校驗和。屬于同一volume的所有備份的2MB block都存儲在公用目錄下,因此可以跨多個備份進行共享。2MB block(.blk文件)被壓縮。由于使用了校驗和來處理2MB block,所以我們刪除了同一volume的2MB block中一定程度的重復數據。


Longhorn全解析及快速入門指南


兩種部署模式


Longhorn volume管理器執行調度副本到節點的任務。我們可以調整調度算法,以不同的方式放置控制器、復制副本。控制器要始終放置在連接volume的主機上。另一方面,副本可以在運行控制器的同一組計算服務器上或在一組專用存儲服務器上進行。前者構成了超聚合部署模型, 后者則構成專用存儲服務器模型。


Longhorn全解析及快速入門指南


堅信開源才是技術的未來,始終秉承開源理念的Rancher Labs,此次推出的Longhorn依然是100%的開源軟件。您可以通過在GitHub上下載Longhorn。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浮山县| 平凉市| 巴中市| 百色市| 长沙市| 晋江市| 苏尼特左旗| 斗六市| 宁明县| 新巴尔虎左旗| 崇礼县| 西昌市| 武城县| 韩城市| 福安市| 横山县| 陈巴尔虎旗| 从江县| 日喀则市| 泉州市| 嵊泗县| 犍为县| 沙坪坝区| 德令哈市| 安西县| 盐边县| 萨迦县| 上林县| 石城县| 汾阳市| 镇原县| 德安县| 高邑县| 柳州市| 土默特左旗| 呼和浩特市| 府谷县| 舞钢市| 体育| 崇义县| 华蓥市|