Ceph之CRUSH解析

問題考慮:

1):故障隔離,降低數據損壞的風險;2)負載均衡,避免部分節點空閒,部分節點超載,影響系統性能;3)控制節點加入離開引起的數據遷移量。

對象存儲中一致性hash和Ceph的CRUSH算法是使用比較多的數據分佈算法,Amazon的Dyanmo鍵值存儲系統採用一致性hash算法,並對它做了很多優化,OpenStack的Swift對象存儲系統也採用一致性hash算法。

CRUSH是一種基於僞隨機控制數據分佈、複製的算法,CRUSH爲解決數據的平衡分佈、負載、最大化系統性能以及系統的擴展和硬件容錯而被設計的。在Ceph集羣中,CRUSH需要一個簡潔而層次清晰的設備描述,包括存儲集羣和副本放置策略,從而有效的將數據對象映射大存儲設備上,而這個過程完成是分佈式的。

CRUSH原理


存儲設備具有吞吐量限制,影響讀寫性能和可擴展性,所以存儲系統需要支持條帶化以增加存儲系統的吞吐量並提升性能。數據條帶化常見方式是做RAID,同Ceph的條帶化最相似的是RAID 0,Ceph條帶化提供類似RAID 0的吞吐量。決定Ceph條帶化數據的3個因素:

  • 對象大小:處於分佈式集羣中的對象擁有一個最大可配置的尺寸,對象大小應該足夠大以適應大量的條帶單元
  • 條帶寬度:條帶有一個可配置的單元大小,每個條帶寬度應該是對象大小的一小部分
  • 條帶總量:

Ceph條帶化後,獲得N個帶有唯一object ID, object ID是進行線性映射生成,由file的元數據、Ceph條帶化產生的Object的序號連綴而成。對象映射到PG,映射包括兩部分:靜態hash計算Object ID,獲取hash值;hash值與mask進行操作,獲得PG ID。

假定集羣中有PG的數量爲M,Mask的值爲M-1。Hash值計算後,進行按位與操作實現從M個PG中均勻的選擇。

計算PG的ID示例

1)Client輸入pool名稱和Object ID
2)CRUSH獲取Object ID完成hash計算
3)CRUSH計算OSD的個數,Hash取模獲得PG的ID
4)CRUSH獲得已命名的pool的ID
5)CRUSH預先考慮Pool ID相同的PG ID

PG到OSD的映射過程由CRUSH完成,PG ID作爲輸入,獲得N個OSD的集合,集合中第一個元素被作爲源OSD,其他OSD作爲副本OSD。數量N表示PG所在Pool下的副本數目,生產環境一般爲3。CRUSH算法受一下兩個因素影響:當前系統狀態和存儲策略配置。

Ceph存儲系統支持pool概念,這是存儲的邏輯分區。client從monitor檢索cluster map,寫入對象到pool,pool的副本數量、CRSH規則和PG的數目決定數據的存儲位置。pool至少需要設定如下參數:對象的所有權/訪問權;PG數目;pool使用的CRUSH規則;對象副本的數目。

CRUSH本質上講是通過存儲設備的權重來計算對象的存儲分佈,通過集羣映射和分佈策略以及給出的隨機數共同決定數據對象的最終位置。集羣映射(cluster map)記錄所有可用的存儲資源和交互之間的空間層次結構(集羣中有多少個機架、機架上有多少個服務器,服務器上有多少個磁盤等信息)。集羣映射由device和bucket構成,它們都有自己的ID和權重值,形成一個以device爲葉子節點,bucket爲軀幹的樹狀結構。bucket有不同類型,如host, row, rack, room等,通常機架類型定義爲rack,主機類型定義爲host,數據中心定義爲data center.bucket都是虛擬結構,可根據自己喜好設計合適的類型。OSD的權重值越高,對應磁盤會被分配寫入更多的數據,總體上看,數據會被均勻寫入分佈於集羣所有的磁盤,從而提高整體性能和可靠性。OSD權重的大小值的配置,默認值設置爲1TB容量的硬盤,對應權重值爲1。

默認設置下,當集羣中有組件出現故障,Ceph會將OSD標記爲down,在300ms內未回覆,集羣進入恢復狀態。300ms的值可通過          mon osd down out interval配置選項修改。PG是數據管理單元,client把讀寫請求推送到ceph,CRUSH提供的算法把對象映射到PG,PG在存儲策略的影響下,最終映射到OSD。

存儲策略由placement rules組成,rule決定每個數據對象有多少個副本,這些副本的限制條件。

rule replicated_ruleset {    ## rule名稱
    ruleset     0            ## rule id  
    type        replicated   ## rule類型
    min_size    1            ## 如果存儲副本數小於整個值,rule不會被應用
    max_size    10           ## 如果副本數大於整個值,rule不會應用
    step    take default     ## 以default root作爲入口
    step    chooseleaf firstn 0 type host ## 隔離域爲host,及不同的副本在不同的主機上
    step    emit             ## 提交
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章