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 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層級的組織圖:
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的算法
本文出自 “無詺IT小站” 博客,謝絕轉載!
ceph學習筆記之九 層級化的Cluster Map