cinder与ceph的区别_分布式存储基础、Ceph、cinder及华为软件定义的存储方案 -
塊存儲與分布式存儲
塊存儲,簡單來說就是提供了塊設備存儲的接口。通過向內核注冊塊設備信息,在Linux中通過lsblk可以得到當前主機上塊設備信息列表。
本文包括了單機塊存儲介紹、分布式存儲技術Ceph介紹,云中的塊存儲Cinder,以及華為軟件定義的存儲解決方案。
單機塊存儲
一個硬盤是一個塊設備,內核檢測到硬盤然后在/dev/下會看到/dev/sda/。因為需要利用一個硬盤來得到不同的分區來做不同的事,通過fdisk工具得到/dev/sda1, /dev/sda2等,這種方式通過直接寫入分區表來規定和切分硬盤,是最死板的分區方式。
分布式塊存儲
在面對極具彈性的存儲需求和性能要求下,單機或者獨立的SAN越來越不能滿足企業的需要。如同數據庫系統一樣,塊存儲在scale up的瓶頸下也面臨著scale out的需要。
分布式塊存儲系統具有以下特性:
分布式塊存儲可以為任何物理機或者虛擬機提供持久化的塊存儲設備; 分布式塊存儲系統管理塊設備的創建、刪除和attach/detach;
分布式塊存儲支持強大的快照功能,快照可以用來恢復或者創建新的塊設備; 分布式存儲系統能夠提供不同IO性能要求的塊設備。
現下主流的分布式塊存儲有Ceph、AMS ESB、阿里云磁盤與sheepdog等。
1 Ceph
1.1 Ceph概述
Ceph目前是OpenStack支持的開源塊存儲實現系統(即Cinder項目backend driver之一) 。Ceph是一種統一的、分布式的存儲系統。“統一的”意味著Ceph可以一套存儲系統同時提供對象存儲、塊存儲和文件系統存儲三種功能,以便在滿足不同應用需求的前提下簡化部署
和運維。“分布式”在Ceph系統中則意味著真正的無中心結構和沒有理論上限的系統規模可擴展性。
Ceph具有很好的性能、可靠性和可擴展性。其核心設計思想,概括為八個字—“無需查表,算算就好”。
1.2 Ceph系統的層次結構
自下向上,可以將Ceph系統分為四個層次:
基礎存儲系統RADOS(Reliable, Autonomic, Distributed Object Store,即可靠的、自動化的、分布式的對象存儲);
基礎庫LIBRADOS;
高層應用接口:包括了三個部分:RADOS GW(RADOS Gateway)、 RBD(Reliable Block Device)和Ceph FS(Ceph File System)。
RADOS由兩個組件組成:一種是數量很多、負責完成數據存儲和維護功能的OSD( Object Storage Device)。另一種則是若干個負責完成系統狀態檢測和維護的Monitor。OSD和monitor之間相互傳輸節點狀態信息,共同得出系統的總體工作狀態,并形成一個全局系統狀態記錄數據結構,即所謂的cluster map。這個數據結構與RADOS提供的特定算法相配合,便實現Ceph“無需查表,算算就好”的核心機制以及若干優秀特性。
OSD可以被抽象為兩個組成部分,即系統部分和守護進程(OSD deamon)部分。OSD的系統部分本質上就是一臺安裝了操作系統和文件系統的計算機,其硬件部分至少包括一個單核的處理器、一定數量的內存、一塊硬盤以及一張網卡。在上述系統平臺上,每個OSD
擁有一個自己的OSD deamon。這個deamon負責完成OSD的所有邏輯功能,包括與monitor和其他OSD(事實上是其他OSD的deamon)通信以維護更新系統狀態,與其他OSD共同完成數據的存儲和維護,與client通信完成各種數據對象操作等等。
1.3 Ceph中的數據尋址
用戶存儲數據時的數據路由過程如下圖所示:
首先明確幾個概念:
File ——用戶需要存儲或者訪問的文件。對于一個基于Ceph開發的對象存儲應用而言,這個file也就對應于應用中的“對象”,也就是用戶直接操作的“對象”。
Ojbect——RADOS所看到的“對象”。Object與上面提到的file的區別是,object的最大size由RADOS限定(通常為2MB或4MB),以便實現底層存儲的組織管理。因此,當上層應用向RADOS存入size很大的file時,需要將file切分成統一大小的一系列object(最后一個的大小可以不同)進行存儲。
PG(Placement Group)——顧名思義,PG的用途是對object的存儲進行組織和位置映射。具體而言,一個PG負責組織若干個object(可以為數千個甚至更多),但一個object只能被映射到一個PG中,即,PG和object之間是“一對多”映射關系。同時,一個PG會被映射到n個OSD上,而每個OSD上都會承載大量的PG,即,PG和OSD之間是“多對多”映射關系。在實踐當中,n至少為2,如果用于生產環境,則至少為3。一個OSD上的PG則可達到數百個。事實上,PG數量的設置牽扯到數據分布的均勻性問題。
OSD——即object storage device。 數據路由的過程需要經過幾次尋址:
? File -> object映射。這次映射的目的是,將用戶要操作的file,映射為RADOS能夠處理的object。其映射十分簡單,本質上就是按照object的最大size對file進行切分。這種切分的好處有二:一是讓大小不限的file變成最大size一致、可以被RADOS高效管理的object;
二是讓對單一file實施的串行處理變為對多個object實施的并行化處理。
? Object -> PG映射。在file被映射為一個或多個object之后,就需要將每個object獨立地映射到一個PG中去。計算公式: hash(oid) & mask ->pgid。根據RADOS的設計,給定PG的總數為m(m應該為2的整數冪),則mask的值為m-1。因此,哈希值計算和按位與操作的整體結果事實上是從所有m個PG中近似均勻地隨機選擇一個。基于這一機制,當有大量object和大量PG時,RADOS能夠保證object和PG之間的近似均勻映射。
? PG -> OSD映射。第三次映射就是將作為object的邏輯組織單元的PG映射到數據的實際存儲單元OSD。如圖所示,RADOS采用一個名為CRUSH的算法,將pgid代入其中,然后得到一組共n個OSD。這n個OSD即共同負責存儲和維護一個PG中的所有object。前已述及,n的數值可以根據實際應用中對于可靠性的需求而配置,在生產環境下通常為3。具體到每個OSD,則由其上運行的OSD deamon負責執行映射到本地的object在本地文件系統中的存儲、訪問、元數據維護等操作。和“object->OSD”映射中采用的哈希算法不同,CRUSH算法的結果不是絕對不變的,而是受到當前系統的狀態(cluster map)和存儲配置策略的影響。故而當系統中的OSD狀態、數量發生變化時,Cluster map發生變化,映射的結果也就發生了變化。
1.4 寫數據的流程
當某個client需要向Ceph集群寫入一個file時,首先需要在本地完成尋址流程,將file變為一個object,然后找出存儲該object的一組三個OSD。
找出三個OSD后,client將直接和Primary OSD通信,發起寫入操作。
Primary OSD收到請求后,分別向Secondary OSD和Tertiary OSD發起寫入操作。當Secondary OSD和Tertiary OSD各自完成寫入操作后,將分別向Primary OSD發送確認信息;
當Primary OSD確信其他兩個OSD的寫入完成后,則自己。也完成數據寫入,并向client確認object寫入操作完成。
1.5 集群維護
由若干個monitor共同負責整個Ceph集群中所有OSD狀態的發現與記錄,并且共同形成cluster map的master版本,然后擴散至全體OSD以及client。OSD使用cluster map進行數據的維護,而client使用cluster map進行數據的尋址。
monitor并不主動輪詢各個OSD的當前狀態。正相反,OSD需要向monitor上報狀態信息。常見的上報有兩種情況:一是新的OSD被加入集群,二是某個OSD發現自身或者其他OSD發生異常。在收到這些上報信息后,monitor將更新cluster map信息并加以擴散。
? 新增一個OSD時
首先根據配置信息與monitor通信,monitor將其加入cluster map,并設置為up且out狀態,再將最新版本的cluster map發給這個新OSD。收到monitor發過來的cluster map之后,這個新OSD計算出自己所承載的PG以及和自己承載同一個PG的其他OSD。然后與這些OSD取得聯系。如果這個PG目前處于降級狀態(即承載該PG的OSD個數少于正常值),則其他OSD將把這個PG內的所有對象和元數據賦值給新OSD。數據復制完成后,新OSD被置為up且in狀態,cluster map也更新。
? 自動化故障恢復
當其中一個OSD發生故障時,如果其PG目前一切正常,則這個新OSD將替換掉故障OSD(PG內將重新選出Primary OSD),并承擔其數據。在數據復制完成后,新OSD被置為up且in狀態,而被替換的OSD將推出該PG。而cluster map內容也將據此更新。
? 自動化的故障探測過程
如果一個OSD發現和自己共同承擔一個PG的另一個OSD無法聯通,則會將這一情況上報monitor。此外,如果一個OSD deamon發現自身工作狀態異常,也將把異常情況主動上報給monitor。此時,monitor將把出現問題的OSD的狀態設置為down且in。如果超過
總結
以上是生活随笔為你收集整理的cinder与ceph的区别_分布式存储基础、Ceph、cinder及华为软件定义的存储方案 -的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python设计一个学生类求最高分_设计
- 下一篇: 串口上升时间标准_JESD204B串行接