『壹』 分布式存儲有哪幾種類型
分布式存儲,分為文件存儲,塊存儲和對象存儲,是存儲設備提供的不同類型的服務,適配不同的使用場景。
分布式是存儲設備的部署方式,是部署在一台機器上,還是一個多台設備組成的集群中。軟體定義這個概念比較寬泛,是指通過軟體功能來實現曾經通過專用硬體完成的工作,也就是說,對於存儲硬體已經沒有要求了,用通用硬體+存儲軟體來實現將一台伺服器,變成存儲設備。其實無論是不是軟體定義存儲,其內部都運行著存儲系統軟體,把這個詞單拿出來,就是更加強調其對於硬體的無要求。
『貳』 分布式塊存儲系統是什麼東西
分布是塊存儲系統一般是塊設備存儲用於為虛擬機提供volume,作用和AWS的EBS一樣。在Openstack以前的版本中,是由nova-volume提供快設備存儲服務,但是從F版本以後,就創建了一個新的項目cinder,用於取代nova-volume。openstack cinder就是一種分布式塊存儲系統。
『叄』 深挖Kubernetes存儲為何如此難及其解決方案
以Kubernetes為代表的容器編排工具在應用開發部署領域起正發揮著顛覆性的變革作用。隨著微服務架構的發展,從開發人員的角度來看,應用邏輯架構與基礎設施架構之間開始解耦,這意味著開發者能夠將精力更多集中在軟體構建以及價值交付身上。
當管理Docker鏡像的時候,Kubernetes也讓實際應用變的十分便捷靈活。在利用Kubernetes進行容器架構的應用部署時,管理員們將在無需修改底層代碼的前提下將其部署在任何位置——包括公有雲、混合雲乃至私有雲。
雖然Kubernetes在擴展性、便攜性與管理性等方面的表現都相當給力,但截至目前,它仍然不支持存儲狀態。與之對應的是,如今的大多數應用都是有狀態的——換言之,要求在一定程度上配合外部存儲資源。
Kubernetes架構本身非常靈活的,能夠根據開發者的需求、規范以及實際負載情況,對容器進行隨意創建與撤銷。此外,Pod和容器還具有自我修復與復制能力。因此從本質上講,它們的生命周期普遍非常短暫。
但是,現有持久存儲解決方法無法支持動態的應用場景,而持久化存儲也無法滿足動態創建與撤銷的需求。
當我們需要將有狀態應用部署到其它基礎架構平台,或者另一家內部或混合雲供應商的環境中時,可移植性低下無疑將成為我們面臨的巨大挑戰。更具體地講,持久化存儲解決方案往往會鎖定於特定雲服務供應商,而無法靈活完成轉移。
另外,雲原生應用中的存儲機制也相當復雜、難於理解。Kubernetes中的不少存儲術語極易混淆,其中包含著復雜的含義與微妙的變化。再有,在原生Kubernetes、開源框架以及託管與付費服務之間還存在著諸多選項,這極大增加了開發人員在做出決定之前的考量與試驗成本。
以下是CNCF列出的雲原生存儲可選方案:
我們首先從最簡單的場景出發,即在Kubernetes當中部署一套資料庫。具體流程包括:選擇一套符合需求的資料庫,讓它在本地磁碟上運行,然後將其作為新的工作負載部署到集群當中。但是,由於資料庫中存在的一些固有屬性,這種方式往往無法帶來符合預期的效果。
容器本身是基於無狀態原則進行構建的,憑借這一天然屬性,我們才能如此輕松地啟動或撤銷容器環境。由於不存在需要保存及遷移的數據,集群也就不需要同磁碟讀寫這類密集型操作綁定在一起了。
但對於資料庫,其狀態必須隨時保存。如果以容器方式部署在集群當中的資料庫不需要進行遷移,或者不需要頻繁開關,那麼其基本屬性就相當於一種物理存儲設備。在理想情況下,使用數據的容器應該與該資料庫處於同一Pod當中。
當然,這並不是說將資料庫部署在容器中的作法不可取。在某些應用場景下,這樣的設計完全能夠滿足需求。舉例來說,在測試環境或者處理非生產級數據時,由於總體數據量很小,將資料庫納入集群完全沒有問題。但在實際生產中,開發人員往往需要仰仗於外部存儲機制。
Kubernetes到底是如何與存儲資源彼此通信的?其利用的是控制層介面。這些介面負責將Kubernetes與外部存儲相對接。接入Kubernetes的外部存儲解決方案被稱為「卷插件(Volume Plugins)」。正是有了卷插件的存在,存儲資源才得以抽象化並實現可移植性。
以前,卷插件一般由核心Kubernetes代碼庫進行構建、鏈接、編譯以及裝載。這樣就極大的限制了開發人員的發揮空間,同時也帶來了額外的維護開銷。因此,項目維護人員們決定在Kubernete的代碼庫上增加一些新的存儲功能。
隨著CSI以及Flexvolume的引入,卷插件如今可以在集群中直接部署,而完全無需更改代碼庫。
原生Kubernetes與存儲
持久卷是由管理員負責配置的存儲單元,它們獨立於任何單一Pod之外,因此不受Pod生命周期的影響。
存儲資源有兩種使用方式:靜態存儲與動態存儲。
實際上,靜態定義的持久卷並不能適應Kubernetes的可移植特性,因為存儲資源具有對環境的依賴性——例如AWS EBS或者GCE Persistent Disk。另外,手動綁定還需要根據不同供應商的存儲方案修改YAML文件。
在資源分配方面,靜態配置實際上也違背了Kubernetes的設計原則。後者的CPU與內存並非事先被分配好綁定在Pod或者容器上,而是以被動態形式進行分配。
通過簡單的說明,相信大家已經了解了原生Kubernetes對外部存儲資源的使用方式。當然,這里僅僅做出概括,實際使用場景中還有更多其它因素需要考量。
CSI——容器存儲介面
下面來看容器存儲介面(簡稱CSI)。CSI是由CNCF存儲工作組創建的統一標准,旨在定義一個標準的容器存儲介面,從而使存儲驅動程序能夠在任意容器架構下正常起效。
CSI規范目前已經在Kubernetes中得到普及,大量驅動插件被預先部署在Kubernetes集群內供開發人員使用。如此一來,我們就可以利用Kubernetes上的CSI卷來訪問與CSI兼容的開放存儲卷。
CSI的引入,意味著存儲資源能夠作為Kubernetes集群上的另一種工作負載實現容器化以及部署。
相關開源項目
目前,圍繞雲原生技術涌現出大量工具與項目。但作為生產場景中的一大突出問題,我們往往很難在雲原生架構中選擇最合適的開源項目。換言之,解決方案選項太多,反而令存儲需求變得更難解決。
我們再看一次CNCF列出的雲原生存儲的可選方案:
下面我會分享一下當下流行的存儲方案Ceph與Rook,還有Rancher開源的容器化分布式存儲Longhorn。
Ceph
Ceph是一種動態託管、橫向擴展的分布式存儲集群。Ceph面向存儲資源提供一種邏輯抽象機制,其設計理念包括無單點故障、自管理以及軟體定義等特性。Ceph可以面向同一套存儲集群分別提供塊存儲、對象存儲以及文件存儲的對應介面。
Ceph架構相當復雜的,其中使用到大量的底層技術,例如RADOS、librados、RADOSGW、RDB、CRUSH演算法,外加monitor、OSD以及MDS等功能性組件。這里我們先不談它的底層架構,關鍵在於Ceph屬於一種分布式存儲集群,這使得擴展更便利、能夠在不犧牲性能的前提下消除單點故障,且提供涵蓋對象存儲、塊存儲以及文件存儲的統一存儲體系。
Ceph架構圖
Rook
另一個有趣且頗具人氣的項目是Rook,這是一項旨在將Kubernetes與Ceph融合起來的技術方案。從本質上講,它將計算節點和存儲節點放進了同一個集群當中。
Rook是一種雲原生編排器,並對Kubernetes做出擴展。Rook允許用戶將Ceph放置在容器內,同時提供卷管理邏輯以立足Kubernetes之上實現Ceph的可靠運行。Rook還使本應由集群管理員操作的多種任務完成了自動化實現,其中包括部署、引導、配置、擴展以及負載均衡等等。
Rook自身不具備持久狀態,也不需要單獨管理。這,才是真正與Kubernetes設計原則相符的存儲資源管理方案。
Rook憑借著將Ceph與Kubernetes協同起來的強大能力而頗受歡迎,在GitHub上獲得近4000顆星,1600多萬次的下載,並吸引到100多名貢獻者,現已進入CNCF孵化階段。
Longhorn
Longhorn項目是Rancher Labs推出的開源的基於雲和容器部署的分布式塊存儲新方式。Longhorn遵循微服務的原則,利用容器將小型獨立組件構建為分布式塊存儲,並使用容器編排來協調這些組件,形成彈性分布式系統。
如今,基於雲和容器的部署規模日益擴大,分布式塊存儲系統也正變得越來越復雜,單個存儲控制器上的volume數量在不斷增加。2000年代初,存儲控制器上的volume數量只有幾十個,但現代雲環境卻需要數萬到數百萬的分布式塊存儲卷。存儲控制器變成了高度復雜的分布式系統。
Longhorn充分利用了近年來關於 如何編排大量的容器和虛擬機的核心技術 。例如,Longhorn並沒有構建一個可以擴展到100,000個volume的高度復雜的控制器,而是出於讓存儲控制器簡單輕便的考慮,創建了100,000個單獨的控制器。然後,我們可以利用像Kubernetes這樣的最先進的編排系統來調度這些獨立的控制器,共享一組磁碟中的資源,協同工作,形成一個彈性的分布式塊存儲系統。
Longhorn基於微服務的設計還有很多其他優勢。因為每個volume都有自己的控制器,在升級每個volume的控制器和replica容器時,是不會導致IO操作明顯的中斷的。Longhorn可以創建一個長期運行的工作來編排所有live volume的升級,同時確保不會中斷系統正在進行的操作。為確保升級不會導致意外的問題,Longhorn可以選擇升級一小部分volume,並在升級過程中出現問題時回滾到舊版本。這些做法在現代微服務應用中已得到廣泛應用,但在存儲系統中並不常見。希望Longhorn可以 助力於微服務在存儲領域的更多應用。
結 語
對於實際應用層面出現的任何問題,最重要的自然是判斷需求、設計系統或者選擇適當的工具。同樣的道理也適用於雲原生環境。雖然具體問題非常復雜,但也必然會出現大量工具方案嘗試解決。隨著雲原生世界的持續發展,我們可以肯定,新的解決方案將不斷涌現。未來,一切都會更加美好!
『肆』 分布式存儲選型
雲計算場景中, 通常使用對象存儲系統來做保存文件, 例如用戶上傳的圖片, 視頻, 文檔等, 或是虛擬鏡像, iso鏡像的內部數據. 公有雲廠商通常還會基於對象存儲提供SDN服務, 用來加速用戶數據的訪問. 而塊存儲則作為一種補充, 提供獨立於虛擬機的(虛擬機刪除數據不丟失), 方便擴展的存儲設備.
對象存儲由於是通過網路API提供服務的, 所以可以跨集群訪問.
集群內文件共享的方案非常多, windows上的共享磁碟, linux 上的samba, nfs 等項目都提供這樣的功能. 集群文件系統通常會和NAS進行對比, 以體現其在成本方面的優勢. 但是, 由於傳統的基於共享磁碟的集群文件系統在可擴展性方面比較弱, 有催生的分布式的集群文件系統, moosefs 就是典型的分布式集群文件系統.
集群文件系統也可以用來存儲虛擬機鏡像, 已達到存儲節點和計算節點的分離.
直觀上看, 對象存儲系統與業務系統是平行關系, 而集群文件系統則通常是業務系統的一個組成部分.
分布式存儲目前主要分兩大類: 塊存儲(文件系統, 裸設備), 對象存儲. 像 NFS 這樣只提供, 只提供簡單磁碟共享, 缺乏擴展能力的項目, 只能叫集群存儲, 而不能算分布式存儲.
考慮到未來分布式存儲的可能有多種應用場景, 所以我們更關注各個方案的功能是否完備. 以下是本次選型的標准.
|-|Ceph |Taobao TFS |Openstack Swift |MooseFS |
|----|----|----|----|----|----|
|MetaData冗餘[1] |YES[選舉] |YES[主從] |NO[3] |YES[主從]
|數據冗餘[2] |YES |YES |YES |YES
由於塊存儲是直接掛載到操作系統上使用的, 除了使用軟體本身的配額管理工具, 還可以使用操作系統的配個管理工具來實現基於用戶的容量配額管理.
根據前述選項標准, 這里推薦部署Ceph系統.
『伍』 NeonIO 雲原生存儲簡介與應用
NeonIO 是一款支持容器化部署的企業級分布式塊存儲系統,能夠給 Kubernetes 平台上提供動態創建(dynamic provisioning)持久存儲卷(persistent volume)的能力,支持 clone、snapshot、resstore、resize 等功能。
NeonIO 架構如圖上所示。
(1) 組件容器化:服務組件、CSI、Portal 容器化。
(2) 支持 CSI:提供標準的 IO 接入能力,可靜態、動態創建 PV。
(3) UI 界面,運維方便:
(4) 與雲原生高度融合:
(5) 一鍵式部署:helm install neonio ./neonio -- namespace kube-system。
(6) 部署簡單靈活:和 Rook-Ceph 對比:
(1) 全閃的分布式存儲架構
(2) 極短的 IO 路徑:拋棄文件系統,自研元數據管理系統,使 IO 路徑極短
(3) 使用 HostNetwork 網路模式
好處:
(1) 服務組件可靠性與可用性
(2) 數據的可靠性與可用性
(1) Pod 跨節點重建高效:2000PV 的掛載/卸載 16s。
(2) 批量創建 PV 能力:2000PV 的創建 5min。
測試平台:NeonIO 超融合一體機集群(3 個節點,192.168.101.174 - 192.168.101.176)。
注意:所有測試均使用 NVMe SSD,卷大小 = 1TiB。性能工具: https://github.com/leeliu/dbench
圖中黃色表示的是 NeonIO,第一張圖縱坐標是 IOPS,第二張圖縱坐標是毫秒,從結果來看,無論是單副本還是 3 副本,NeonIO 在 IOPS、時延都有明顯的優勢。
存儲大師班 | ZFS存儲池塊管理與事務模型
對象存儲手把手教四 | Bucket 生命周期管理
『陸』 分布式存儲是什麼東西
關於分布式存儲實際上並沒有一個明確的定義,甚至名稱上也沒有一個統一的說法,大多數情況下稱作 Distributed Data Store 或者 Distributed Storage System。
其中維基網路中給 Distributed data store 的定義是:分布式存儲是一種計算機網路,它通常以數據復制的方式將信息存儲在多個節點中。
在網路中給出的定義是:分布式存儲系統,是將數據分散存儲在多台獨立的設備上。分布式網路存儲系統採用可擴展的系統結構,利用多台存儲伺服器分擔存儲負荷,利用位置伺服器定位存儲信息,它不但提高了系統的可靠性、可用性和存取效率,還易於擴展。
盡管各方對分布式存儲的定義並不完全相同,但有一點是統一的,就是分布式存儲將數據分散放置在多個節點中,節點通過網路互連提供存儲服務。這一點與傳統集中式存儲將數據集中放置的方式有著明顯的區分。
『柒』 分布式存儲是什麼
分布式存儲系統,是將數據分散存儲在多台獨立的設備上。傳統的網路存儲系統採用集中的存儲伺服器存放所有數據,存儲伺服器成為系統性能的瓶頸,也是可靠性和安全性的焦點,不能滿足大規模存儲應用的需要。分布式網路存儲系統採用可擴展的系統結構,利用多台存儲伺服器分擔存儲負荷,利用位置伺服器定位存儲信息,它不但提高了系統的可靠性、可用性和存取效率,還易於擴展。
分布式和集中式存儲
集中存儲的優缺點是,物理介質集中布放;視頻流上傳到中心對機房環境要求高,要求機房空間大,承重、空調等都是需要考慮的問題。
分布存儲,集中管理的優缺點是,物理介質分布到不同的地理位置;視頻流就近上傳,對骨幹網帶寬沒有什麼要求;可採用多套低端的小容量的存儲設備分布部署,設備價格和維護成本較低;小容量設備分布部署,對機房環境要求低。
鏈喬教育在線旗下學碩創新區塊鏈技術工作站是中國教育部學校規劃建設發展中心開展的「智慧學習工場2020-學碩創新工作站 」唯一獲準的「區塊鏈技術專業」試點工作站。專業站立足為學生提供多樣化成長路徑,推進專業學位研究生產學研結合培養模式改革,構建應用型、復合型人才培養體系。
『捌』 對象存儲、塊存儲、文件存儲分別是什麼有什麼區別
你可以把塊理解成整個硬碟,文件理解成硬碟中的文件,對象理解成很多台伺服器中的很多塊硬碟。
『玖』 對象存儲、文件存儲和塊存儲有什麼區別
區別如下:
1、速度不同
塊存儲:低延遲(10ms),熱點突出;
文件存儲:不同技術各有不同;
對象存儲:100ms-1s,冷數據;
2、可分步性不同
塊存儲:異地不現實;
文件存儲:可分布式,但有瓶頸;
對象存儲:分步並發能力高;
3、文件大小不同
塊存儲:大小都可以,熱點突出;
文件存儲:適合大文件;
對象存儲:適合各種大小;
4、介面不同
塊存儲:Driver,kernel mole ;
文件存儲:POSIX;
對象存儲:Restful API ;
5、典型技術不同
塊存儲:SAN;
文件存儲:HDFS,GFS;
對象存儲:Swift,Amazon S3;
6、適合場景不同
塊存儲:銀行;
文件存儲:數據中心;
對象存儲:網路媒體文件存儲;
(9)分布式塊存儲的存儲卷擴展閱讀:
文件存儲的優缺點:
優點
(1)、造價低:隨便一台機器就可以,另外普通的乙太網就可以,根本不需要專用的SAN網路,所以造價低。
(2)、方便文件共享。
缺點
(1)、讀寫速率低,傳輸速率慢:乙太網,上傳下載速度較慢,另外所有讀寫都要1台伺服器裡面的硬碟來承受,相比起磁碟陣列動不動就十幾上百塊硬碟同時讀寫,速率慢了許多。
『拾』 分布式存儲的三種類型
有關分布式存儲的三個基本問題
文件系統vs對象存儲——選型和趨勢
塊存儲、文件存儲、對象存儲這三者的本質差別是什麼
分布式存儲的應用場景相對於其存儲介面,現在流行分為三種:
對象存儲: 也就是通常意義的鍵值存儲,其介面就是簡單的GET、PUT、DEL和其他擴展,如七牛、又拍、Swift、S3
塊存儲: 這種介面通常以QEMU Driver或者Kernel Mole的方式存在,這種介面需要實現Linux的Block Device的介面或者QEMU提供的Block Driver介面,如Sheepdog,AWS的EBS,青雲的雲硬碟和阿里雲的盤古系統,還有Ceph的RBD(RBD是Ceph面向塊存儲的介面)
文件存儲: 通常意義是支持POSIX介面,它跟傳統的文件系統如Ext4是一個類型的,但區別在於分布式存儲提供了並行化的能力,如Ceph的CephFS(CephFS是Ceph面向文件存儲的介面),但是有時候又會把GFS,HDFS這種非POSIX介面的類文件存儲介面歸入此類。