天天看點

帶你讀《存儲漫談Ceph原理與實踐》第二章Ceph 架構2.2 Ceph 資料尋址(一)

在從方案演進及變遷的較為宏觀角度對比了分布式存儲系統的有中心架構與無中心架構尋址方式之後,本小節将深入Ceph 存儲系統的資料尋址方案,進行詳細介紹。

在   PB   級資料存儲和成百上千台存儲伺服器納管的需求背景下,大規模分布式存儲系統必須做到資料和負載的均衡分布,以此來提高資源使用率,最大化系統的性能輸出,同   時要處理好系統的擴充和硬體失效問題。Ceph設計了一套 CRUSH 算法,用在分布式對象存儲系統(RADOS)上,可以有效地将資料對象(Object)映射到儲存設備(OSD)上。CRUSH     算法能夠處理儲存設備的添加和移除,并最小化由于儲存設備的添加和移動而導緻的資料遷移。

CRUSH 算法有兩個關鍵優點。

(1)  任何元件都可以獨立計算出 Object所在的位置(去中心化)。

(2)  運算過程隻需要很少的叢集中繼資料(ClusterMap),隻有當存儲叢集添加或删除裝置時,這些中繼資料才會發生改變。

這些特性使得 CRUSH 适合管理對象分布非常大的(PB級别)且要求可伸縮性、性能和可靠性非常高的存儲系統。

2.2.1     Ceph 尋址流程

為了講清楚 Ceph 尋址流程,這裡先介紹一下常用術語。

◆  File

File   是要存儲和通路的檔案,它是面向使用者的,也是可直覺操作的對象,在塊存儲使用場景,File 指挂載出去使用的RBD裝置;在對象存儲使用場景,File指使用者可見的音視訊或其他格式的使用者資料;在檔案存儲使用場景,File 指檔案系統中存儲的使用者資料。

◆  Object

Object是 Ceph底層 RADOS所看到的對象,也是在 Ceph中資料存儲的基本機關,當 File過大時,需要将File切分成統一大小的 Object進行存儲,每個 Object應包含 ID、BinaryData和 Metadata資訊。Object的大小可由 RADOS限定(通常為 4MB,可依據需要進行配置)。

◆  PG

PG(PlacementGroup)是一個邏輯的概念,它的用途是對 RADOS層 Object的存儲進行組織和位置的映射,通過PG概念的引入,Ceph 存儲系統可以更好地配置設定資料和定位資料,PG是 Ceph存儲系統資料均衡和恢複的最小機關。

◆  Pool

Pool規定了資料備援的類型,如副本模式、糾删碼模式,對于不同備援類型的資料存儲,需要單獨的 Pool劃分,即每個 Pool隻能對應一種資料備援類型的規則。每個 Pool内可包含多個 PG。

◆  OSD

如第 1章介紹,OSD(ObjectStorageDevice)服務負責資料的存取,并處理資料的複制、恢複、回填、再均衡等任務。

PG和 Object 是一對多的關系,1個 PG裡面組織若幹個 Object,但是 1個 Object隻射到 1個 PG 中。

PG和OSD是多對多的關系,1個PG會映射到多個OSD上(依照副本或者糾删碼規則),每個 OSD也會承載多個 PG。

PG和 Pool是多對一的關系,1個 Pool内包含多個 PG,Pool建立時可指定其中 PG的數量(通常為2的指數次幂),Pool建立之後,也可以通過指令對其進行調整。

圖 2-1展示了 Ceph 的尋址流程,可以看到,Ceph的尋址需要經曆 3次映射。

帶你讀《存儲漫談Ceph原理與實踐》第二章Ceph 架構2.2 Ceph 資料尋址(一)

圖 2-1Ceph尋址流程

首先,将File切分成多個 Object。

每個Object都有唯一的ID(即OID),OID根據檔案名稱得到,由ino和ono構成, ino為檔案唯一ID(比如filename+timestamp),ono則為切分後某個Object的序号(如0、 1、2、3、4、5等),根據該檔案的大小我們就會得到一系列的OID。

其次,将每個 Object映射到一個 PG中去。

實作方式也很簡單,對 OID進行 Hash 運算,然後對運算結果進行按位與計算,即可得到某一個 PG的 ID。圖中的mask掩碼設定為 PG的數量減 1。

我們認為得到的 pgid是随機的,這與 PG的數量和檔案的數量有關系,在足夠量級PG數量的前提下,叢集資料是均勻分布的。最後,将 Object所在的 PG映射到實際的存儲位置 OSD上。

這裡應用的就是 CRUSH算法了,CRUSH算法可以通過 pgid得到多個 OSD(與副本或者糾删碼的配置政策有程序。

可以看到,Ceph 存儲系統的資料尋址過程隻需要輸入檔案的名稱以及檔案的大小等資訊,所有計算過程都可以直接在用戶端本地完成。Ceph用戶端隻要獲得了 ClusterMap, 就可以使用 CRUSH算法計算出某個 Object所在OSD的 id,然後直接與它通信。Ceph用戶端在初始化時會從Monitor服務擷取最新的 Cluster   Map,随後采用反向訂閱機制,僅當Monitor服務中記錄的ClusterMap 發生變化時,才主動向Ceph 用戶端進行推送。

繼續閱讀