Ceph-智慧分佈CRUSH之Object與PG與OSD
Ceph 智慧分佈CRUSH
Ceph CRUSH演算法(Controlled Replication Under ScalableHashing)一種基於為隨機控制資料分佈、複製的演算法。
基本原理:
儲存裝置通常支援條帶化以增加儲存系統的吞吐量並提升效能,條帶化最常見的方式就是做raid.如raid0.
資料在陣列中的硬碟上是以條帶的形式分佈的,條帶化是指資料在陳列中所有硬碟中的儲存過程。檔案中的資料被分割成小塊的資料段在陣列中的硬碟上順序儲存,這個最小資料塊叫做條帶單元。
決定Ceph條帶化資料的三個因素:
物件大小、條頻寬度、條帶總量
Object 與PG、OSD:
Ceph
1) 由Ceph叢集指定的靜態Hsah函式計算Object的oid,獲取到其Hash值。
2) 將該Hash值與mask進行與操作,從而獲得PG ID。
由PG對映到資料儲存的是幾單元OSD中,該對映是由CRUSH演算法來確定的,將PG ID作為該演算法的輸入,獲得到包含N個OSD的集合,該集合第一個OSD被作為主OSD,其他依次作為從OSD。
注:CRUSH演算法的結果不是絕對不變的,會受到(1)當前系統狀態(2)儲存策略配置
的影響。實際情況,策略配置不會改變,系統狀態一般是裝置損壞。但Ceph對這種情況提供了自動化支援。
在Ceph中,PG的全稱為PlacementGroup,中文名稱為歸置組。顧名思義,PG的用途是將某些東西進行邏輯歸組,從而達到統一管理,提升效率的作用。
而實際也是如此,Ceph通過CRUSH演算法,將若干個object對映到PG上,從而形成一個object與PG的邏輯集合,並以此作為object與OSD的中間層,將PG根據所在POOL的副本數,複製到多個OSD上。下面這個圖描述了object、PG及OSD守護程序之間的對映關係:
1、 PGP起到對PG進行歸置的作用。PGP是PG的邏輯承載體。
2、 PGP的取值應該與PG相同,在PG的值增大的同時,也要增大PGP的值以保持二者的值相同。
3、 當一個POOL的PG增大後,Ceph並不會開始進行rebalancing(資料遷移),只有在PGP的值增大後,PG才會開始遷移至其他的OSD上,並且開始rebalancing。
在cephj叢集裡,當有資料物件要寫入叢集時,需要進行兩次對映。
第一次:object -> PG 第二次 PG -> OSDset
每一次對映都是與其他物件無關的,體現了CRUSH的獨立性(充分分散)和確定性(可確定的儲存位置)
CRUSH關係分析:
CRUSH是通過儲存裝置的權重來計算資料物件的分佈的。計算過程中,通過Cluster Map(叢集對映)、Data Distribute Policy(資料分佈策略)和給出的一個隨機數來共同決定資料物件的最終位置。
Cluster Map : 記錄所有可用的儲存資源及互相之間的空間層次結構(叢集中有多少個機架,機架上有多少伺服器,每個機器上有多少磁碟等資訊)
Cluster Map 由Device和Bucket構成,它們都有自己的ID和權重值,最終形成一個以Device為葉子節點、Bucket為軀幹的樹狀結構。