1. 程式人生 > 實用技巧 >ceph學習筆記之九 層級化的Cluster Map

ceph學習筆記之九 層級化的Cluster Map

叢集對映由Device和桶(Buckets)組成,裝置和桶都有ID描述和權重。Bucket可以包含任意裝置或者其他的bucket,使他們形成內部節點的儲存層次結構,裝置總是在葉子節點。儲存裝置的權重由管理員設定以控制裝置負責儲存的相對資料量。儘管大型系統的裝置含不同的容量大小和效能特點,隨機資料分佈演算法可以根據裝置的利用率和負載來分佈資料。這樣裝置的平均負載與儲存的資料量成正比。這導致一維位置指標、權重、應來源於裝置的能力。桶的權重是它所包含的元素的權重的總和。Device(OSD)的權重值越高,對應的磁碟會被分配寫入更多的資料。從叢集整體來看,資料會均勻的寫入分佈於叢集的所磁碟,從而提高整體效能和可靠性。

Buckets可由任意可用儲存的層次結構組成。例如,可以建立這樣一個叢集對映,用名為“shelf”的桶代表最低層的一個主機來包含主機上的磁碟裝置,然後用名為“cabinet”的桶來包含安裝在同一個機架上的主機。在一個大的系統中,代表機架的“cabinet”桶可能還會包含在“row”桶或者“room”桶裡。資料被通過一個偽隨機類hash函式遞迴地分配到層級分明的桶元素中。傳統的雜湊分佈技術,一旦儲存目標數量有變,就會導致大量的資料遷移;CRUSH演算法是基於桶四個不同的型別,每一個都有不同的選擇演算法,以解決新增或刪除裝置造成的資料移動和整體的計算複雜度。

分層叢集的基本概念:

Device

最基本的儲存裝置,也就是OSD,通常一個OSD對應一個磁碟儲存裝置。

Bucket

表示放裝置的容器,可以包含多個裝置或子型別的Bucket。

Bucket的型別:

用來指定OSD 在CRUSH分層結構中的位置;Bucket可以包含很多種型別,例如:Host就代表一個主機節點,可以包含多個Device;Rack代表機架,包含多個Host節點。在ceph中預設有osd、host、chassis、rack、row、pdu、pod、room、datacenter、region、root 11個等級。使用者也可以自己定義新的型別。每個Device都設定了自己的權重,和自己的儲存空間相關。Bucket的權重就是子Bucket(或者裝置)的權重之和。型別描述如下表:

p_w_picpath

解讀CRUSH map

Bucket用法

# buckets

host node-7 { //型別Host 名稱為node-7

id -3 # do not change unnecessarily //Bucket的ID,一般為負數

# weight 5.460 //權重值,一般為item的權重值之和

alg straw //Bucket隨機選擇的演算法

hash 0 # rjenkins1 //Bucket隨機選擇的演算法使用的HASH函式,這裡0代表使用HASH函式jenkins1

item osd.0 weight 2.730 //OSD.0權重值

item osd.1 weight 2.730 //OSD.1權重值

}

host node-6 {

id -4 # do not change unnecessarily

# weight 5.460

alg straw

hash 0 # rjenkins1

item osd.2 weight 2.730

item osd.5 weight 2.730

}

host node-5 {

id -5 # do not change unnecessarily

# weight 5.460

alg straw

hash 0 # rjenkins1

item osd.3 weight 2.730

item osd.4 weight 2.730

}

host node-9 {

id -6 # do not change unnecessarily

# weight 0.540

alg straw

hash 0 # rjenkins1

item osd.7 weight 0.540

}

host node-10 {

id -7 # do not change unnecessarily

# weight 0.540

alg straw

hash 0 # rjenkins1

item osd.6 weight 0.540

}

host node-8 {

id -8 # do not change unnecessarily

# weight 0.540

alg straw

hash 0 # rjenkins1

item osd.8 weight 0.540

}

root default { //root型別的Bucket 名字為default

id -1 # do not change unnecessarily //ID號

# weight 18.000 //權重值,一般為item的權重值之和

alg straw //隨機選擇的演算法straw

hash 0 # rjenkins1 //Bucket隨機選擇的演算法使用的HASH函式,這裡0代表使用HASH函式jenkins1

item node-7 weight 5.460 //Host的權重為子裝置(OSD)權重之和

item node-6 weight 5.460

item node-5 weight 5.460

item node-9 weight 0.540

item node-10 weight 0.540

item node-8 weight 0.540

}

根據上面CRUSH Map配置檔案可以繪製一張關於Bucket層級的組織圖:

p_w_picpath

CRUSH map Bucket配置解讀例項:

  • 有一個root型別的Bucket,名稱為default

  • root下有6個Host型別的Bucket,名字分別為node-5、node-6、node-7、node-8、node-9、node-10;其中node-5、node-6、node-7節點下分別有2個OSD裝置,每個OSD裝置權重值為2.730;說明它們容量大小一致。而node-8、node-9、node-10節點下只有一個OSD裝置,其OSD裝置權重值均為0.540,表示他們容量大小也是一致的。其中node-5、node-6、node-7主機節點的權重值為OSD裝置權重值之和為5.460;而node-8、node-9、node-10主機節點的權重值為OSD裝置權重值之和為:0.540。主機權重值是根據各個節點上OSD權重值之和進行自動計算。根據主機間權重值可以看出該叢集節點OSD數量、容量都不一致。

  • Hash設定了使用Hash函式,值0代表使用rjenkins1

  • alg代表在該Bucket裡選擇子item的演算法

轉載於:https://blog.51cto.com/opencloud/1953166