1. 程式人生 > >Longhorn全解析及快速入門指南

Longhorn全解析及快速入門指南

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:// <hostnameIP>:8080來使用UI。以下是有關volume詳細資訊的螢幕圖:

這裡寫圖片描述

您現在可以從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管理器被要求建立一個volume時,它將在該volume所附的主機以及放置副本的主機上建立一個控制器容器。副本應放置在不同的主機上,以確保最大可用性。

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

這裡寫圖片描述

例如,在大規模部署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。讀取索引有八個條目,並且在讀取操作發生時被惰性填充。寫操作會重置讀取索引,使其指向實時資料。

這裡寫圖片描述

讀取儲存在記憶體中的索引時,每4K block消耗一個位元組。位元組大小的讀取索引意味著您可以為每個volume獲取多達254個快照。

為每個副本讀取索引將會消耗一定量的記憶體資料結構。例如,1TB卷消耗256MB的記憶體讀取索引。因此,我們未來會考慮將讀取的索引放在記憶體對映檔案中。

副本重建

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

  • Longhorn volume管理器建立一個空白副本,並呼叫控制器將空白副本新增到其副本集中。
  • 要新增空白副本,控制器須執行以下操作:
    暫停所有讀寫操作
    在WO(只寫)模式下新增空白副本
    獲取所有現有副本的快照,即刻會有一個空白的差異磁碟
    Unpauses全部讀取寫入操作,僅將寫入操作傳送到新新增的副本
    啟動後臺程序,將所有(除最新的以外)差異磁碟從好的副本同步到空白副本
    同步完成後,所有副本的資料都具有一致性,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將給定的volume的所有備份儲存在公用目錄下。以下是描述Longhorn如何儲存volume的備份的簡單檢視。volume級元資料儲存在volume.cfg中。每個備份的元資料檔案(例如snap2.cfg)相對較小,因為它們只包含備份中所有2MB block的偏移量和校驗和。屬於同一volume的所有備份的2MB block都儲存在公用目錄下,因此可以跨多個備份進行共享。2MB block(.blk檔案)被壓縮。由於使用了校驗和來處理2MB block,所以我們刪除了同一volume的2MB block中一定程度的重複資料。

這裡寫圖片描述

兩種部署模式

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

這裡寫圖片描述

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

9月27日,北京海航萬豪酒店,容器技術大會Container Day 2017即將舉行。

CloudStack之父、海航科技技術總監、華為PaaS部門部長、恆豐銀行科技部總經理、阿里雲PaaS工程總監、民生保險CIO······均已加入豪華講師套餐!

11家已容器落地企業,15位真·雲端計算大咖,13場純·技術演講,結合實戰場景,聚焦落地經驗。免費參會+超高規格,詳細議程及註冊連結請戳

這裡寫圖片描述

相關推薦

Longhorn解析快速入門指南

Longhorn專案現已正式釋出!這是一個基於雲和容器部署的分散式塊儲存新方式。Longhorn遵循微服務的原則,利用容器將小型獨立元件構建為分散式塊儲存,並使用容器編排來協調這些元件,形成彈性分散式系統。 Why Longhorn? 如今,基於雲和容器

SpringMVC插件安裝、環境配置快速入門

應用 pre spring 包含 tro quest patch ava dispatch SpringMVC 是現在廣泛應用的框架結構,我也只是一個初學者,一遍學習一遍梳理整合,如有錯誤,希望大神指點,別誤人。 MVC :Model-View-Control 框架性質的C

幾張圖幫你理解 docker 基本原理快速入門

uil dir commit -name name 地址 什麽 生成 作者 http://www.cnblogs.com/SzeCheng/p/6822905.html 寫的非常好的一篇文章,不知道為什麽被刪除了。 利用Google快照,做個存檔。 快照地址:

MariaDB快速入門指南

mariadb 數據庫 linux 快速入門目錄 前言 一、數據庫中的數據結構 與SQL語言 1、數據結構 2 、SQL語言 二、MariaDB安裝及初始化配置 1、安裝 2、配置防火墻

針對Quant的Python快速入門指南

是我 調試方法 利用 learn sub get 講解 blog .com 作者:用Python的交易員 (原創文章,轉載請註明出處)最近有越來越多的朋友在知乎或者QQ上問我如何學習入門Python,就目前需求來看,我需要寫這麽一篇指南。針對整個vn.py框架的學習,整體上

Citrix XenServer ? Workload Balancing 7.3 快速入門指南

Workload Balancin Citrix 思傑 XenServer 第?1?章?簡介XenServer Workload Balancing 虛擬設備是一種基於 Linux 的虛擬機,可用於在環境中快速部署XenServer Workload Balancing 功能。只需幾個簡單的步

001-安裝快速入門【基於純antd的基本項目搭建】

也會 nod 幫助 控制 element ole 全局變量 當前日期 BE 一、安裝使用 1.1、安裝 推薦使用 npm 或 yarn 的方式進行開發 npm install antd --save yarn add antd 1.2、瀏覽器引入

Docker快速入門指南

epel nds .com lose nta 指南 format utf aux 鏡像操作 搜索鏡像 $ docker search centos 下載鏡像 $ docker pll centos 導入鏡像 $ docker load < ./docker/ima

GN 快速入門指南

GN Quick Start guide 執行 GN 你可以在命令列裡直接輸入gn執行。因為在depot_tools(路徑應該在你的環境變數PATH中已經設定過)工具目錄中有一個相同名字的指令碼。這個指令碼會找到當前目錄中的二進位制檔案並執行它。 構建一個build 使用GY

Quartz.NET快速入門指南

    最近工作中遇到了Quartz.net,為了更好的理解公司程式碼的寫法,於是就好好的研究了一下這個東西,確實是好東西,既然是好東西,我就拿出來分享一下。萬丈高樓平地起,我們也是從入門開始吧。    歡迎使用Quartz.NET快速入門指南。 在

docker 基本原理快速入門

什麼是docker Docker 是一個開源專案,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業餘專案。它基於 Google 公司推出的 Go 語言實現。 專案後來加入了 Linux 基金會,遵從了 Apache 2.0 協議,專案程式碼在 GitHub 上進行維

Apollo 1.0快速入門指南

關於本指南 在阿波羅1.0快速入門指南提供了所有的基本指令瞭解,安裝和建設阿波羅。 檔案約定 下表列出了本文件中使用的約定: 圖示 描述 膽大 重點 Mono-space font 程式碼,鍵入的資料 斜體 檔案,部分和標題的標

零基礎想學Python爬蟲?這是斯坦福大學教授給你的快速入門指南

      本文主要內容:以最短的時間寫一個最簡單的爬蟲,可以抓取論壇的帖子標題和帖子內容。 本文受眾:沒寫過爬蟲的萌新。 入門 爬蟲是怎麼工作的? 當然在學習Python的道路上肯定會困難,沒有好的學習資料,怎麼去學習呢?

Spark快速入門指南 – Spark安裝與基礎使用

Apache Spark 是一個新興的大資料處理通用引擎,提供了分散式的記憶體抽象。Spark 正如其名,最大的特點就是快(Lightning-fast),可比 Hadoop MapReduce 的處理速度快 100 倍。此外,Spark 提供了簡單易用的 API,幾行程式碼

h5py快速入門指南

h5py是Python語言用來操作HDF5的模組。下面的文章主要介紹h5py的快速入門指南,翻譯自h5py的官方文件:http://docs.h5py.org/en/latest/quick.html 。該翻譯僅為個人學習h5py為目的,如有翻譯不當之處,請速

Service Broker快速入門指南

4月底阿里雲容器服務上線了基於Kubernetes叢集的服務目錄功能。阿里雲的容器的服務目錄遵循Open Service Broker API標準,提供了一系列的服務代理元件,實現了對主流開源服務如MySQL、MariaDB、Spark、RabbitMQ等的完美支援,同時提供

buildbot自動化測試工具安裝快速入門

buildbot自動化測試工具   搭建一個完全自動化的buildbot伺服器相對來說比較麻煩,所以打算開幾條部落格來具體說明,我以git作為本次搭建測試自動化測試的例子,   由於本次自動化測試伺服器需要一臺buildmaster主機、兩臺buildslave

基於Spring security + Spring Boot + JWT的封裝框架快速入門指南

吐槽 近期做一個小玩意,打算實現前後端分離,那麼就要用到符合REST協議的API介面了。如果使用純API的話,就肯定不希望所有人都可以呼叫我的介面,所以對於API的安全就要重視了,對於我剛剛學習Spring Boot的人來說。第一就想到用Spring全家桶,百度

30分鐘--Spark快速入門指南

Apache Spark 是一個新興的大資料處理通用引擎,提供了分散式的記憶體抽象。Spark 正如其名,最大的特點就是快(Lightning-fast),可比 Hadoop MapReduce 的處理速度快 100 倍。此外,Spark 提供了簡單易用的 API,幾行程式碼就能實現 WordCount。本

Spark:Spark 程式設計模型快速入門

Spark程式設計模型SparkContext類和SparkConf類程式碼中初始化我們可通過如下方式呼叫 SparkContext 的簡單建構函式,以預設的引數值來建立相應的物件。val sc = new SparkContext("local[4]", "Test Spa