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(或者裝置)的權重之和。型別描述如下表:
解讀CRUSH map
# 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層級的組織圖:
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