Longhorn項目是Rancher Labs推出的開源的基於雲和容器部署的分佈式塊存儲新方式。Longhorn遵循微服務的原則,利用容器將小型獨立組件構建爲分佈式塊存儲,並使用容器編排來協調這些組件,造成彈性分佈式系統。前端
2017年4月Longhorn初發布。2018年3月Longhorn v0.2發佈,支持任何Kubernetes集羣的持久化存儲實現。過去一個多季度以來,Longhorn研發團隊基於用戶的反饋與建議,進一步打磨Longhorn,並於今天正式發佈Longhorn v0.3,在新版本中帶來了新UI、CSI支持、S3備份目標、在多磁盤上提供基於容量的調度、基礎鏡像功能、iSCSI前端支持、零停機升級等酷炫功能。git
Why Longhorngithub
現在,基於雲和容器的部署規模日益擴大,分佈式塊存儲系統也正變得愈來愈複雜,單個存儲控制器上的volume數量在不斷增長。2000年代初,存儲控制器上的volume數量只有幾十個,但現代雲環境卻須要數萬到數百萬的分佈式塊存儲卷。存儲控制器變成了高度複雜的分佈式系統。web
分佈式塊存儲自己比其餘形式的分佈式存儲(如文件系統)更簡單。不管系統中有多少volume,每一個volume只能由單個主機進行裝載。正因如此,咱們設想,是否能夠將大型塊存儲控制器分割成多個較小的存儲控制器?若想要如此分割,咱們須要保證這些volume仍然是從公共磁盤池構建的,而且咱們須要有辦法來編排這些存儲控制器,讓它們能夠協同工做。c#
爲了將這一想法發揮到極限,咱們建立了Longhorn項目。這是一個咱們認爲值得探索的方向,每一個控制器上只有一個volume,這將大大簡化存儲控制器的設計。由於控制器軟件的故障域僅限於單個volume,因此控制器若崩潰,也只會影響一個volume。後端
Longhorn充分利用了近年來關於如何編排大量的容器和虛擬機的核心技術。例如,Longhorn並無構建一個能夠擴展到100,000個volume的高度複雜的控制器,而是出於讓存儲控制器簡單輕便的考慮,建立了100,000個單獨的控制器。而後,咱們能夠利用像Kubernetes這樣的最早進的編排系統來調度這些獨立的控制器,共享一組磁盤中的資源,協同工做,造成一個彈性的分佈式塊存儲系統。微信
Longhorn基於微服務的設計還有不少其餘優點。由於每一個volume都有本身的控制器,在升級每一個volume的控制器和replica容器時,是不會致使IO操做明顯的中斷的。Longhorn能夠建立一個長期運行的工做來編排全部live volume的升級,同時確保不會中斷系統正在進行的操做。爲確保升級不會致使意外的問題,Longhorn能夠選擇升級一小部分volume,並在升級過程當中出現問題時回滾到舊版本。這些作法在現代微服務應用中已獲得普遍應用,但在存儲系統中並不常見。咱們但願Longhorn能夠助力於微服務在存儲領域的更多應用。websocket
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快照和AWS EBS風格的備份:您能夠爲每一個volume建立多達254個快照,這些快照能夠逐個備份到NFS或S3兼容的輔助存儲中。只有更改的字節會在備份操做期間被複制和存儲。
指定按期快照和備份操做的計劃:您能夠指定這些操做的頻率(每小時,天天,每週,每個月和每一年)、執行這些操做的確切時間(例如,每一個星期日凌晨3:00),以及保留多少個循環快照和備份集。
Longhorn v0.3新功能
全新設計的UI
Longhorn v0.3的UI獲得了極大的優化,爲用戶提供了更爲優異的操做體驗:
用戶能夠在儀表板中查看系統的狀態
爲volume添加了多選和組操做
支持websocket支持,用戶再也不須要刷新頁面來更新UI。當後端狀態發生變化時,UI會自動更新
容器存儲接口(CSI)
在Longhorn v0.2中,有很多用戶反饋Flexvolume driver目錄位置的配置錯誤問題,這可能致使Kubernetes沒法鏈接到Longhorn Driver。Kubernetes不提供有關Flexvolume driver位置的信息,用戶須要手動操做識別。在v0.3中,咱們添加了對最新Container Storage Interface的支持,該接口無需事先進行配置便可安裝。關於如何使用CSI驅動程序安裝Longhorn的詳細信息,可參見此連接:
https://github.com/rancher/longhorn/tree/v0.3-rc#kubernetes-driver-requirements。
若您計劃繼續使用Flexvolume而且必須弄清楚volume插件的位置,咱們爲您準備的這個腳本能夠提供一些幫助:
https://github.com/rancher/longhorn/tree/v0.3-rc#kubernetes-driver-requirements
以S3做爲備份目標
Longhorn的一個很關鍵的功能就是volume備份,它能夠備份本地快照並將其傳輸到輔助存儲,如NFS。v0.2發佈以後,用戶呼聲最高的、但願能在下一版本中實現的功能之一,就是支持使用S3做爲備份目標。v0.3中,這一功能已實現!請參閱此處瞭解如何使用S3做爲Longhorn的備份目標:
https://github.com/rancher/longhorn/blob/v0.3-rc/README.md#backup。
在多磁盤上提供基於容量的調度
在Longhorn v0.2中,不管可用的磁盤空間如何,Longhorn v0.2都會在磁盤上隨機放置volume。而v0.3支持每一個節點多個磁盤,而且咱們重寫了調度程序,現提供基於容量的調度。用戶如今能夠啓用/禁用任何節點或磁盤的調度,並知曉有多少磁盤正在使用。咱們還爲用戶提供了各類選項,以自定義Longhorn如何在可用磁盤空間之上調度卷。請參閱此處瞭解詳情:
https://github.com/rancher/longhorn/blob/v0.3-rc/docs/multidisk.md
基礎鏡像功能
v0.3支持基礎鏡像功能。Longhorn中的基礎鏡像是一個打包的Docker鏡像,遵循RancherVM(https://github.com/rancher/vm )鏡像規範。所以,若是用戶有一些只讀鏡像,但願其在多個卷之間共享,則可使用基礎鏡像功能來完成。請參閱此處瞭解如何建立和使用基礎鏡像功能:
https://github.com/rancher/longhorn/blob/v0.3-rc/docs/base-image.md。
iSCSI前端
Longhorn v0.3支持iSCSI前端。之前咱們只支持使用塊設備做爲前端來訪問volume內容。咱們相信添加對iSCSI前端的支持,將有利於將iSCSI做爲塊設備接口的傳統虛擬機管理程序。有關iSCSI前端支持的詳細信息,請參見此處:
https://github.com/rancher/longhorn/blob/v0.3-rc/docs/iscsi.md。
零停機的引擎升級
在v0.3中,咱們設置了一個框架,在升級Longhorn引擎時能夠不影響volume。Longhorn引擎包括一個控制器和多個副本。如今,當volume運行時,咱們能夠換掉舊版本的控制器和副本,並在運行中添加新版本。如此一來,您能夠實如今volume零停機的狀況下部署新版本的Longhorn存儲軟件。
但須要注意的是,零停機升級適用於從v0.3升級至將來的因此新版本,但不適用於從v0.2升級到v0.3。
如何升級Longhorn
利用Kubernetes的特性,Longhorn v0.3的全部軟件組件均可以升級。請在此處查看升級說明:https://github.com/rancher/longhorn/blob/v0.3-rc/docs/upgrade.md。
使用Rancher Catalog安裝了Longhorn v0.1的用戶請務必注意,請勿在UI中使用upgrade按鈕。目前暫沒法經過Rancher Catalog爲早期版本的Longhorn進行一鍵自動升級,請按照上面的說明來手動升級舊的Longhorn系統。
一切開源,歡迎體驗
始終秉承開源理念的Rancher Labs,推出的Longhorn依然是100%的開源軟件。您能夠在GitHub上下載Longhorn:https://github.com/rancher/longhorn ,也能夠經過Rancher Catalog部署它。
直到今日,Longhorn依然在持續不斷的優化更新之中,咱們暫不倡議您將其用於生產環境。歡迎在GitHub上或Rancher微信羣中爲Rancher團隊提供寶貴的意見與反饋❤️